Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryManager.java =================================================================== diff -u -r20812 -r20841 --- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryManager.java (.../ExpensiveGoodsGodownEntryManager.java) (revision 20812) +++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsGodownEntryManager.java (.../ExpensiveGoodsGodownEntryManager.java) (revision 20841) @@ -1,14 +1,12 @@ package com.forgon.disinfectsystem.expensiveGoods.service; import java.util.Collection; -import java.util.List; import java.util.Map; import net.sf.json.JSONObject; import com.forgon.directory.model.OrgUnit; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntry; -import com.forgon.disinfectsystem.vo.DisposableGoodsStorageAdjustVo; import com.forgon.tools.hibernate.BasePoManager; public interface ExpensiveGoodsGodownEntryManager extends BasePoManager { @@ -20,13 +18,13 @@ // 保存入库单 public void saveGodownEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry entry,Map result); // 保存入库单,只修改库存,不改其他属性,用于盘点与调拨 - public List saveGodownEntryModifyOnlyAmount_TRANS_REQUIRED(ExpensiveGoodsGodownEntry entry,Map result); + public void saveGodownEntryModifyOnlyAmount_TRANS_REQUIRED(ExpensiveGoodsGodownEntry entry,Map result); public void saveGodownEntry_TRANS_MANDATORY(Collection entrys,Map result); // 更新入库单 public void updateGodownEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry original,ExpensiveGoodsGodownEntry entry,Map result); // 保存退库单 - public List saveGodownOutEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry entry,Map result,boolean needWriteBack); + public void saveGodownOutEntry_TRANS_REQUIRED(ExpensiveGoodsGodownEntry entry,Map result,boolean needWriteBack); public void saveGodownOutEntry_TRANS_MANDATORY(Collection entrys,Map result); // 更新退库单 Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsInstance.java =================================================================== diff -u -r20812 -r20841 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsInstance.java (.../ExpensiveGoodsInstance.java) (revision 20812) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsInstance.java (.../ExpensiveGoodsInstance.java) (revision 20841) @@ -97,6 +97,21 @@ private String locationForDisplay; // 位置(组织机构名称) /** + * 第一个自带条码 + */ + private String firstBodyCode; + + /** + * 第二个自带条码 + */ + private String secondBodyCode; + + /** + * 第三个自带条码 + */ + private String thirdBodyCode; + + /** * 入库类型(区分是自购入库还是预入库) */ private String entryType = ENTRY_TYPE_PURCHASE; @@ -290,6 +305,30 @@ this.entryType = entryType; } + public String getFirstBodyCode() { + return firstBodyCode; + } + + public void setFirstBodyCode(String firstBodyCode) { + this.firstBodyCode = firstBodyCode; + } + + public String getSecondBodyCode() { + return secondBodyCode; + } + + public void setSecondBodyCode(String secondBodyCode) { + this.secondBodyCode = secondBodyCode; + } + + public String getThirdBodyCode() { + return thirdBodyCode; + } + + public void setThirdBodyCode(String thirdBodyCode) { + this.thirdBodyCode = thirdBodyCode; + } + @Transient public boolean isAssociatedInfoValidForInvoice() { if (!DatabaseUtil.isPoIdValid(invoiceId)) { Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsGodownOutEntryView.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsGodownOutEntryView.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsGodownOutEntryView.js (revision 20841) @@ -0,0 +1,1334 @@ +var entityName = "退库单"; +var grid; +var g_localID = 1;// 为了区分每一个item,增加的ID。 +var commonEntry = new commonEntry(); + +//单价数据源 +var priceStore = null; +var PriceRecord = null; +// 清除表单数据 +function clearFormData(){ + disposableGoodsBatchNumStore.removeAll(); + priceStore.removeAll(); +} +// 清空批次和价格 +function clearBatchNumberAndPrice() { + clearBatchNumber(); + clearPrice(); +} +function clearBatchNumber() { + clearCombo(disposableGoodsBatchNumStore,'batchNumber1'); +} +// 清空价格 +function clearPrice() { + clearCombo(priceStore,'combo_price'); +} +// 设置批次 +function setBatchNumbers(batches,selectFirst) { + clearBatchNumber(); + if(typeof(batches) == 'undefined' || batches == null){ + return; + } + for(var i = 0;i 0){ + setCmpValue('batchNumber1',batches[0].batchNumber); + + var combo = top.Ext.getCmp("batchNumber1"); + // 触发选中事件 + combo.fireEvent('select', combo,disposableGoodsBatchNumStore.getAt(0),0); + } + } +} +//设置价格 +function setPrices(prices,selectFirst) { + clearPrice() + if(typeof(prices) == 'undefined' || prices == null){ + return; + } + for(var i = 0;i 0){ + setCmpValue('combo_price',prices[0].price); + } + } +} +//全部一次性物品 +var allDiposableGoodsStore = new Ext.data.Store({ + pageSize: 100, + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/diposableGoodsAction!getDiposableGoodsData.do?allItems=yes', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'spelling',mapping : 'spelling'}, + {name : 'name',mapping : 'name'}, + {name : 'displayName',mapping : 'displayName'}, + {name : 'referencePrice',mapping : 'referencePrice'}, + {name : 'specification',mapping : 'specification'},//规格 + {name : 'disposableGoodsName',mapping : 'disposableGoodsName'}//没拼接的名字 + ]) +}); +batchNumStore = new top.Ext.data.Store({ + proxy : new top.Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/diposableGoodsAction!getDisposableGoodsBatchList.do', + method : 'POST' + }), + reader : new top.Ext.data.JsonReader({ + fields : [ + {name : 'id'}, + {name : 'batchNumber'} + ] + }) +}); +var wareHouseStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/baseData/wareHouseAction!getWareHouseData.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'name',mapping : 'name'}, + {name : 'orgUnitCode',mapping : 'orgUnitCode'}, + ]), + listeners : { + load : function(store,records) { + if(records.length > 0 && (!commonEntry.isOpen())){ + var combo = top.Ext.getCmp("wareHouse1"); + // 触发选中事件 + combo.fireEvent('select', combo,records[0],0); + } + top.Ext.getCmp("name1").enable(); + } + } +}); + +var disposableGoodsStockStore = new Ext.data.Store({ + pageSize: 100, + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/disposableGoodsStockAction!getDisposableGoodsStockData.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'spelling',mapping : 'spelling'}, + {name : 'name',mapping : 'name'}, + {name : 'referencePrice',mapping : 'referencePrice'}, + {name : 'supplierName',mapping : 'supplierName'}, + ]), + listeners : { + beforeload : function(store,option) { + store.baseParams['wareHouseId'] = top.Ext.getCmp('warehouseID').getValue(); + } + } +}); + +var disposableGoodsBatchNumStore = new Ext.data.Store({ + reader : new Ext.data.JsonReader({ + fields : [ + {name : 'id'}, + {name : 'disposableGoodsId'}, + {name : 'disposableGoodsStockId'}, + {name : 'disposableGoodsBatchId'}, + {name : 'disposableGoodsBatchStockId'}, + {name : 'batchNumber'}, + {name : 'cost'}, + {name : 'supplierName'}, + {name : 'expDate'} + ] + }) +}); + +var BatchRecord = Ext.data.Record.create([ { + name: 'id', + name: 'disposableGoodsId', + name: 'disposableGoodsStockId', + name: 'disposableGoodsBatchId', + name: 'disposableGoodsBatchStockId', + name : 'batchNumber', + name : 'cost', + name : 'supplierName', + name : 'expDate' +} ]); + +var GodownEntryItemRecord = Ext.data.Record.create([ + {name : 'disposableGoodsID'}, + {name : 'disposableGoodsStockID'}, + {name : 'disposableGoodsBatchID'}, + {name : 'disposableGoodsBatchStockID'}, + {name : 'expensiveDisposableGoodsId'}, + {name : 'localID'}, + {name : 'id'}, + {name : 'name'}, + {name : 'amount'}, + {name : 'canOutAmount'}, + {name : 'cost'}, + {name : 'batchNumber'}, + {name : 'identification'}, + {name : 'identificationID'}, + {name : 'batchID'}, + {name : 'disposableGoodsStockID'}, + {name : 'expDate' ,type : 'date'}, + {name : 'supplierName'} +]); + +/** + * 设置仓库的id和name的隐藏域的内容 + * @param id + * @param name + */ +function setWareHouseInfo(id,name){ + top.Ext.getCmp('warehouseID').setValue(id); + top.Ext.getCmp('warehouseName').setValue(name); +} + +// 获取当前选中的批次 +function getSelectedBatch(){ + var batchNumber = top.Ext.getCmp('batchNumber1').getValue(); + var batch = findRecordDataByNameAndValue(disposableGoodsBatchNumStore,'batchNumber',batchNumber); + return batch; +} +// 获取当前选中的价格 +function getSelectedPriceAmount(){ + return getSelectedDataFromCombo(priceStore,'combo_price','price'); +} +function loadBarcodeDeviceInfo() { + var barcode = top.Ext.getCmp('barcode').getValue(); + // 清除已加载的信息 + top.Ext.getCmp("barcode").setValue('');// 清除条码 + Ext.Ajax.request({ + url : WWWROOT + '/disinfectSystem/receiveRecordAction!loadBarcodeDeviceInfo.do', + params : { + barcode : barcode + }, + success : function(response, options) { + var result = response.responseText; + if (result != null && result != "null") { + var resultObj = JSON.parse(result); + + if(!resultObj.success){ + showResult(resultObj.errMsg); + return; + } + if(resultObj.barcodeType == '高值耗材'){ + addExpensiveDisposablegoodsItems(resultObj.disposablegoods); + }else{ + + } + }else{ + showResult('输入的条码无效!'); + } + + }, + failure : function(response, options) { + var result = Ext.decode(response.responseText); + } + }); +} +//验证一次性物品是否重复 +function isExpensiveDisposablegoodsRepeat(disposableGoods){ + var store = top.Ext.getCmp('godownEntryItemGrid').getStore(); + for(var i = 0;i < store.getCount();i++){ + var item = store.getAt(i).data; + if(item.barcode == disposableGoods.barcode){ + return true; + } + } + + return false; +} +function addExpensiveDisposablegoodsItems(diposableGood){ + if(isExpensiveDisposablegoodsRepeat(diposableGood)){ + showResult("该物品已存在!"); + return; + } + + var tousseName = diposableGood.showName; + var barcode = diposableGood.barcode; + var batchNumber = diposableGood.batchNumber; + var price = diposableGood.price; + var expDate = diposableGood.expDate; + var fluctuationPrice = diposableGood.fluctuationPrice; + var supplierName = diposableGood.supplierName; + //添加操作 + var godownEntryItem = new GodownEntryItemRecord({ + disposableGoodsID: diposableGood.disposableGoodsID, + disposableGoodsStockID: diposableGood.disposableGoodsStockID, + disposableGoodsBatchID: diposableGood.disposableGoodsBatchID, + disposableGoodsBatchStockID: diposableGood.disposableGoodsBatchStockID, + expensiveDisposableGoodsId: diposableGood.expensiveDisposablegoodsId, + localID:g_localID++, + id : "", + identificationID : '', + name : tousseName, + barcode: barcode, + amount : 1, + canOutAmount : 1, + cost : price, + batchNumber : batchNumber, + expDate : expDate, + supplierName : supplierName + }); + top.Ext.getCmp('godownEntryItemGrid').getStore().insert(0 , godownEntryItem); +} +function addItems(disposableGoodsStockID,name,amount,batch,priceAmount){ + if(isUndefinedOrNull(batch)){ + showResult("请填写批次!"); + return false; + } + var batchNumber = batch.batchNumber; + if(top.Ext.getCmp('name1').getValue() == null || top.Ext.getCmp('name1').getValue() == ''){ + showResult("请填写物品名称!"); + return false; + } + + if(top.Ext.getCmp('amount1').getValue() == null || top.Ext.getCmp('amount1').getValue() == ''){ + showResult("请填写数量!"); + return false; + } + + if(!top.Ext.getCmp('amount1').isValid()){ + showResult("请正确填写数量!"); + return false; + } + if(top.Ext.getCmp('batchNumber1').getValue() == null || top.Ext.getCmp('batchNumber1').getValue() == ''){ + showResult("请填写批次!"); + return false; + } + if(isUndefinedOrNull(priceAmount)){ + showResult("请选择价格!"); + return false; + } + // 物品是否重复 + var godownEntryItemGridStore = top.Ext.getCmp('godownEntryItemGrid').getStore(); + for(var i = 0;i < godownEntryItemGridStore.getCount();i++){ + var godownEntryItem = godownEntryItemGridStore.getAt(i).data; + if(godownEntryItem.disposableGoodsStockID == disposableGoodsStockID && godownEntryItem.batchNumber == batchNumber && godownEntryItem.cost == priceAmount.price){ + showResult("该物品已经存在,不能重复添加!"); + return false; + } + } +// var cost = top.Ext.getCmp('cost').getValue(); + var expDate = top.Ext.getCmp('expDate').getValue(); + var supplierName = top.Ext.getCmp('supplierName').getValue(); + //添加操作 + var godownEntryItem = new GodownEntryItemRecord({ + disposableGoodsID: batch.disposableGoodsId, + disposableGoodsStockID: batch.disposableGoodsStockId, + disposableGoodsBatchID: batch.disposableGoodsBatchId, + disposableGoodsBatchStockID: batch.id, + localID:g_localID++, + id : "", + identificationID : '', + batchID : batch.id, + name : name, + amount : amount, + canOutAmount : priceAmount.amount, +// cost : cost, + cost : priceAmount.price, + batchNumber : batch.batchNumber, + expDate : expDate, + supplierName : supplierName + }); + //top.Ext.getCmp('godownEntryItemGrid').getStore().add(godownEntryItem); + top.Ext.getCmp('godownEntryItemGrid').getStore().insert(0 , godownEntryItem); +// top.Ext.getCmp('name1').setValue(''); +// top.Ext.getCmp('amount1').setValue(''); +// top.Ext.getCmp('batchNumber1').setValue(''); +// top.Ext.getCmp('cost').setValue(''); +// top.Ext.getCmp('disposableGoodsStockID').setValue(''); +// disposableGoodsBatchNumStore.removeAll(); +// top.Ext.getCmp('expDate').setValue(''); +// top.Ext.getCmp('supplierName').setValue(''); +// top.Ext.getCmp('name1').focus(); +} + +function renderDeleteButton(v,p,record){ + return ""; +} + +function deleteItem(localID){ + var godownEntryItemGridStore = top.Ext.getCmp('godownEntryItemGrid').getStore(); + for(var i = 0;i 1) { + showResult("一次只能查看一个" + entityName + "!"); + return false; + } + id = records[0].data['id']; + editRecord(id); +}; + +function editRecord(id){ + commonEntry.setId(id); + addGodownEntry(); + if(!isUndefinedOrNullOrEmpty(id)){ + top.Ext.getCmp("saveButton").hide(); + } + top.Ext.getCmp("serialNum").show(); + top.Ext.getCmp('godownEntryForm').form.load({ + url : WWWROOT + '/disinfectSystem/godownEntryAction!loadGodownEntry.do', + method : 'GET', + waitMsg : '正在加载数据,请稍候', + params : {id : id}, + success : function(form, action) { + var time = action.result.data.time.time; + top.Ext.getCmp("time").setValue(Ext.util.Format.date(new Date(time), 'Y-m-d H:i')); + setWareHouseInfo(action.result.data.warehouseID,action.result.data.warehouseName); + top.Ext.getCmp("wareHouse1").setValue(action.result.data.warehouseID); + for(var i = 0 ;i < action.result.data.itemsList.length ;i++){ + var specification = action.result.data.itemsList[i].diposableGoods.specification; + var b = true; + if(specification == null || specification.length <= 0){ + b = false; + } + var expDateStr = ''; + if(!isUndefinedOrNull(action.result.data.itemsList[i].expDate)){ + expDateStr = Ext.util.Format.date(new Date(action.result.data.itemsList[i].expDate.time), 'Y-m-d') + } + var godownEntryItem = new GodownEntryItemRecord({ + localID:g_localID++, + id : action.result.data.itemsList[i].id, + disposableGoodsID: action.result.data.itemsList[i].disposableGoodsID, + disposableGoodsStockID: action.result.data.itemsList[i].disposableGoodsStockID, + disposableGoodsBatchID: action.result.data.itemsList[i].disposableGoodsBatchID, + disposableGoodsBatchStockID: action.result.data.itemsList[i].disposableGoodsBatchStockID, +// disposableGoodsStockID : action.result.data.itemsList[i].diposableGoods.id, + identificationID : action.result.data.itemsList[i].identificationID, + name : action.result.data.itemsList[i].diposableGoods.name + (b == false?"":" ["+specification+"]"), + amount : action.result.data.itemsList[i].amount, + identification : action.result.data.itemsList[i].identification, + cost : action.result.data.itemsList[i].cost, + batchNumber : action.result.data.itemsList[i].batchNumber, + expDate : expDateStr, + supplierName : action.result.data.itemsList[i].supplierName, + identification : action.result.data.itemsList[i].identification + }); + top.Ext.getCmp('godownEntryItemGrid').getStore().add(godownEntryItem); + } + // 保存原始数据,只需要保存需要修改的属性 + setOriginalFormParams(form,['id','remark','time','warehouseName','warehouseID']); + var originalItems = buildJSONStringFromStore(top.Ext.getCmp('godownEntryItemGrid').getStore()); + //alert(originalItems); + top.Ext.getCmp("originalItems").setValue(originalItems); + }, + failure : function(form, action) { + } + }); +} + +/** + * 修改记录 + * modifyRecord函数 触发modify函数调用,并传入当前列的值以及record.data对象 + * 页面中需要定义 modify(v,data) 函数 + */ +function modify(v,data){ + editRecord(data['id']); +} + +Ext.onReady(function() { + + top.Ext4.tip.QuickTipManager.init(); + Ext.QuickTips.init(); + commonEntry.setCurrentUserName(curUserName); + //单价数据源 + if(priceStore == null){ + priceStore = new Ext.data.Store({ + reader : new Ext.data.JsonReader({ + fields : [ + {name : 'price'}, + {name : 'fluctuationPrice'}, + {name : 'amount'} + ] + }) + }); + } + if(PriceRecord == null){ + PriceRecord = Ext.data.Record.create([ + {name : 'price'}, + {name : 'fluctuationPrice'}, + {name : 'amount'} + ]); + } + + var sm = new Ext.grid.CheckboxSelectionModel(); + var columns = [sm, + {header : "单号",width : 150,dataIndex : 'serialNumber' , renderer : modifyRecord}, + {header : "操作员",width : 150,dataIndex : 'operator'}, + {header : "退库时间",width : 150,dataIndex : 'time' , renderer : myDateFormat}, + {header : "退库金额",width : 150,dataIndex : 'totalPrice' ,renderer: function(v,p,record){ + return formartToFixedFloat(v,4); + }}, + {id : 'operationRemark',header : "备注",width : 120,dataIndex : 'remark'} + ]; + + var readerDetail = [ + {name : 'id'}, + {name : 'serialNumber'}, + {name : 'operator'}, + {name : 'time'}, + {name : 'totalPrice'}, + {name : 'remark'} + ]; + + var filters = new Ext.grid.GridFilters({ + filters:[ + {type: 'string', dataIndex: 'serialNumber'}, + {type: 'string', dataIndex: 'operator'}, + {type: 'date', dataIndex: 'time'}, + {type: 'string', dataIndex: 'remark'} + ]} + ); + + var tbar = [{ + text : '添加', + hidden : SSTS_WarehouseEntry_Create, + iconCls : 'btn_ext_add', + handler : function() { + commonEntry.setId(null); + addGodownEntry('insert'); + } + },'-'/*,{ + text : '删除', + hidden : true, + iconCls : 'btn_ext_application_del', + handler : function() { + deleteGodownEntry(grid); + } + },'-'*/,{ + text : '查看', + hidden : SSTS_WarehouseEntry_Update, + iconCls : 'btn_ext_refresh', + id : 'editTbar', + handler : function() { + loadFormData(grid); + } + },'-',{ + text : '打印', +// hidden : SSTS_WarehouseEntry_Delete, + iconCls : 'icon_print', + handler : function(){ + commonEntry.onPrintEntryDetail(grid,entityName); + } + },'-',{ + text : '打印列表', +// hidden : SSTS_WarehouseEntry_Delete, + iconCls : 'icon_print', + handler : function() { + //加载打印数据 + var map = {}; + map["code"] = Ext.getCmp('code').getValue(); + map["batchNumber"] = Ext.getCmp('batchNumber').getValue(); + map["startDate"] = Ext.getCmp('startDate').getRawValue(); + map["endDate"] = Ext.getCmp('endDate').getRawValue(); + map["type"] = entityName; + + commonEntry.onPrintEntryList(map,entityName); + } + }]; + + grid = new Ext.ux.ForgonPageGrid( { + tbar : tbar, + pageSize : 20, + defaultSortField : 'id', + title : entityName + '列表', + defaultSortDirection : 'desc', + isCheckboxSelectionModel : false, + rememberSelected : false, + isShowSearchField : true, + columns : columns, + plugins: filters, + sm:sm, + autoExpandColumn : 'operationRemark', + renderTo : 'gridDiv', + frame : false + }, readerDetail, + GodownEntryTableManager.findGodownEntryTableList2, + null + ); + + function initQueryValueAndReload() { + var startDate = Ext.getCmp('startDate').getRawValue(); + var endDate = Ext.getCmp('endDate').getRawValue(); + var code = Ext.getCmp('code').getValue(); + var batchNumber = Ext.getCmp('batchNumber').getValue(); + var disposableGoodsName = Ext.getCmp('disposableGoodsName').getValue(); + var specification = Ext.getCmp('specification').getValue(); + if(startDate || endDate){ + if(!compareDate(startDate,endDate)){ + showResult("开始时间不能大于结束时间"); + return; + } + } + + $Id('parm_s_startDate').value = startDate; + $Id('parm_s_endDate').value = endDate; + $Id('parm_s_code').value = code; + $Id('parm_s_batchNumber').value = batchNumber; + $Id('parm_s_disposableGoodsName').value = disposableGoodsName; + $Id('parm_s_specification').value = specification; + grid.dwrReload(); + } + var dt = new Date(); + var v = dt.getMonth()+1; + if(v < 10){ + v = "0" + (dt.getMonth()+1); + } + var startDayofMonth = dt.getFullYear() + "/" + v + "/01"; + var form = new Ext.Panel({ + id : 'northPanel', + layout : 'table', + frame : true, + region : 'north', + border : false, + bodyBorder : false, + layoutConfig : {columns : 2}, + height : 63, + items : [{ + width :900, + layout : 'column', + items:[{ + xtype:'hidden', + name : 'disposableGoodsName', + id : 'disposableGoodsName' + },{ + xtype:'hidden', + name : 'specification', + id : 'specification' + },{ + columnWidth : .73, + layout : 'form', + labelWidth : 60, + items : [{ + fieldLabel : '关键字', + xtype : 'combo', + id : 'code', + name : 'code', + queryParam : 'spell', + minChars : 0, + valueField : 'id', + displayField : 'displayName', + width : 600, + store : allDiposableGoodsStore, + pageSize : 100, + listConfig: {width: 300}, + forceSelection : true, + lazyInit : true, + triggerAction : 'all', + hideTrigger : true, + typeAhead : false, + allowBlank : true, + anchor : '97%', + listeners : { + select : function(combo, record, index) { + Ext.getCmp('batchNumber').setValue(); + Ext.getCmp('code').setValue(record.data.name); + Ext.getCmp('disposableGoodsName').setValue(record.data.disposableGoodsName); + Ext.getCmp('specification').setValue(record.data.specification); + batchNumStore.baseParams['disposableGoodsID'] = record.data.id; + batchNumStore.load(); + } + } + }] + },{ + columnWidth : .25, + layout : 'form', + labelWidth : 60, + items : [{ + xtype : 'combo', + id : 'batchNumber', + name : 'batchNumber', + fieldLabel : '物品批次', + maxLength : '30', + minChars : 0, + valueField : 'batchNumber', + displayField : 'batchNumber', + store : batchNumStore, + forceSelection : true, + lazyInit : false, + triggerAction : 'all', + hideTrigger : false, + typeAhead : false, + selectOnFocus :true, + anchor : '94%', + listeners :{ + select:function(combo, record, index ){ + var batchNumber = record.data.batchNumber; + Ext.getCmp('batchNumber').setValue(batchNumber); + } + } + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 60, + items : [{ + xtype : 'datefield', + fieldLabel : '开始日期', + name : 'startDate', + id : 'startDate', + readOnly : false, + altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', + editable : false, + format : 'Y-m-d', + value:new Date(startDayofMonth), + anchor : '94%' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 60, + items : [{ + xtype : 'datefield', + fieldLabel : '结束日期', + name : 'endDate', + id : 'endDate', + readOnly : false, + altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', + editable : false, + format : 'Y-m-d', + value:new Date(), + anchor : '94%' + }] + }] + },{ + width :150, + layout : 'column', + items : [{ + columnWidth : .5, + layout :'form', + items : [{ + xtype : 'button', + text : '查询', + minWidth : 70, + iconCls : 'icon_search', + handler : function() { + initQueryValueAndReload(); + } + }] + },{ + columnWidth : .5, + layout :'form', + items : [{ + xtype : 'button', + text : '重置', + minWidth : 70, + iconCls : 'icon_set', + handler : function() { + Ext.getCmp('code').setValue(""); + Ext.getCmp('startDate').setValue(""); + Ext.getCmp('endDate').setValue(""); + Ext.getCmp('batchNumber').setValue(""); + } + }] + }] + }] + }); + + var viewport = new Ext.Viewport( { + layout : 'border', + items : [form,{ + region : 'center', + margins : '0 0 0 0', + layout : 'fit', + items : grid + }] + }); + /* + * 鼠标悬停预览表格功能 + */ + Ext4.tip.QuickTipManager.init(); + Ext4.apply(Ext4.tip.QuickTipManager.getQuickTip(), { + dismissDelay: 0, + showDelay: 0 + }); + grid.on('mouseover',function(e){// 添加mouseover事件 + var index = grid.getView().findRowIndex(e.getTarget());// 根据mouse所在的target可以取到列的位置 + if (index !== false) {// 当取到了正确的列时,(因为如果传入的target列没有取到的时候会返回false) + var record = this.getStore().getAt(index);//获得当前列的数据 + var tableContent = record.data['htmlContent'];//预览内容 + if(!tableContent){//若为unfinished + var content = ""; + var id=record.data['id']; + Ext.Ajax.request({ + url: WWWROOT + '/disinfectSystem/godownEntryAction!getGodownEntryItemById.do', + params : { + id : id + }, + success: function(response, options) {//请求成功的回调函数 + var result = Ext.decode(response.responseText); + if(result!=null){ + var itemsList = result.data; + for(var i=0;i " + itemsList[i].diposableGoods.name+ (b == false?"":" ["+specification+"]") + +""+ itemsList[i].batchNumber + +""+ amount + +""+ cost + +""+ amount*cost + +""+ (itemsList[i].supplierName == ""?' ':itemsList[i].supplierName) + +"" + new Date(itemsList[i].expDate.time).Format("yyyy-MM-dd") + +""+""; + } + } + //预览表格行 + tableContent = ("" + +"" + +"" + +"" + +"" + +"" + +"" + +""); + tableContent +="" + content + "

物品名称

批次

数量

单价

金额

供应商

失效时间


"; + record.set("htmlContent",tableContent); + }, + failure : function(response, options) {//请求失败的回调函数 + } + }); + } + var rowEl = Ext4.fly(e.getTarget()); + rowEl.set({ + 'data-qtip' :tableContent, + 'data-qwidth':550, + 'data-qtitle':' 退库单信息表:'}); + } + }); + }); \ No newline at end of file Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/action/ExpensiveGoodsGodownEntryAction.java =================================================================== diff -u -r20822 -r20841 --- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/action/ExpensiveGoodsGodownEntryAction.java (.../ExpensiveGoodsGodownEntryAction.java) (revision 20822) +++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/action/ExpensiveGoodsGodownEntryAction.java (.../ExpensiveGoodsGodownEntryAction.java) (revision 20841) @@ -14,6 +14,7 @@ import net.sf.json.JSONObject; import net.sf.json.JsonConfig; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; @@ -25,6 +26,7 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntry; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntryItem; import com.forgon.disinfectsystem.entity.basedatamanager.barcodeinformation.BarcodeInformation; @@ -33,6 +35,7 @@ import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.json.JsonPropertyFilter; import com.opensymphony.xwork2.ModelDriven; @@ -52,12 +55,14 @@ private BarcodeManager barcodeManager; + private ObjectDao objectDao; + public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { this.dateQueryAdapter = dateQueryAdapter; } - public void setExpensiveGoodsGodownEntry(ExpensiveGoodsGodownEntryManager expensiveGoodsGodownEntryManager) { + public void setExpensiveGoodsGodownEntryManager(ExpensiveGoodsGodownEntryManager expensiveGoodsGodownEntryManager) { this.expensiveGoodsGodownEntryManager = expensiveGoodsGodownEntryManager; } @@ -69,6 +74,10 @@ this.barcodeManager = barcodeManager; } + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + @SuppressWarnings("unchecked") public String viewGodownEntryList() { HttpServletRequest request = StrutsParamUtils.getRequest(); @@ -97,7 +106,7 @@ /** * 保存退库单 页面上的item只会记批次和价格,但是后台会记对应的标识号对象。这样方便以后的价格同步与删除出库单等操作 */ - public void saveGodownOutEntry() { + public void saveExpensiveGoodsGodownOutEntry() { HttpServletResponse response = StrutsParamUtils.getResponse(); PrintWriter out = null; @@ -141,7 +150,7 @@ saveResult = false; result = e.getMessage(); } - printMsgToClient(saveResult, out, result.toString(), null); + printMsgToClient(saveResult, result, null); } /** @@ -156,16 +165,14 @@ * @param result * :显示的文本信息 */ - private void printMsgToClient(boolean success, PrintWriter out, - String result, JSONArray jsonArray) { + private void printMsgToClient(boolean success, String message, JSONArray jsonArray) { JSONObject jsonObj = new JSONObject(); - jsonObj.put("success", success); - jsonObj.put("message", result); + jsonObj.put(JSONUtil.JSON_KEY_SUCCESS, success); + jsonObj.put(JSONUtil.JSON_KEY_MESSAGE, message); if(jsonArray != null){ jsonObj.put("items", jsonArray); } - out.print(jsonObj.toString()); - out.close(); + StrutsResponseUtils.output(jsonObj); } private void setGodownEntryPropertiesFromParams(ExpensiveGoodsGodownEntry entry,String formParams,String items){ @@ -184,7 +191,7 @@ JSONArray itemsArray = JSONArray.fromObject(items); int size = itemsArray.size(); for (int i = 0; i < size; ++i) { - JSONObject obj = itemsArray.getJSONObject(i); + JSONObject obj = itemsArray.optJSONObject(i); if (obj != null) { expensiveGoodsGodownEntryManager.addItemToGodownEntry(entry, obj); } @@ -203,34 +210,29 @@ setGodownEntryPropertiesFromParams(entry,null,items); } + /** + * 根据前台传入参数构造入库单及入库明细对象 + * @param entry + */ private void buildGodownEntryParamsForSave(ExpensiveGoodsGodownEntry entry) { + //格式为:[{"id":"","supplierId":57,"supplierName":"广州京弘电子有限公司","expensiveGoodsId":"3","expensiveGoodsName":"test高值耗材3[规格3]","certification":"aaa","cost":300,"expDate":"2017-11-25","firstBodyCode":"111","secondBodyCode":"222","thirdBodyCode":"333","grade":"一类","localID":1}] String items = StrutsParamUtils.getPraramValue("items", ""); + //格式为:{"id":"","remark":"","time":"2017-11-14T21:28:00","warehouseName":"\u6d4b\u8bd5\u4f9b\u5e94\u5ba4\u4ed3\u5e931","warehouseID":"81535"} String formParams = StrutsParamUtils.getPraramValue("formParams", ""); setGodownEntryPropertiesFromParams(entry,formParams,items); - //setGodownEntryItemsFromParams(entry, items); } - /* 增加一次性物品的并发控制,可以多个人同时入库同一个物品 - * 增加入库单本身的并发修改,可以合并多人修改,互不影响。 - * */ - public String saveGodownEntry() { - HttpServletResponse response = StrutsParamUtils.getResponse(); - PrintWriter out = null; - String result = "保存成功"; - response.setCharacterEncoding("UTF-8"); - Map returnMsg = new HashMap(); - returnMsg.put("success", false); - returnMsg.put("errMsg", "保存失败"); + /** + * 添加高值耗材入库单 + * @return + */ + public String saveExpensiveGoodsGodownEntry() { + Map resultMap = new HashMap(); + boolean success = false; + String message = "保存失败"; try { - out = response.getWriter(); - } catch (IOException e) { - e.printStackTrace(); - } - boolean saveResult = false; - try { String id = StrutsParamUtils.getPraramValue("id", ""); - String print = StrutsParamUtils.getPraramValue("print", ""); String entryType = StrutsParamUtils.getPraramValue("entryType", ExpensiveGoodsGodownEntry.SUBTYPE_PURCHASE); ExpensiveGoodsGodownEntry entry = godownEntry; @@ -239,31 +241,67 @@ // 常规功能不能修改入库单了 throw new RuntimeException("请在干预模块修改入库单!"); } else { - // 保存入库单,里面的item一定都是新建标识号对象,并且需要更新批次属性。 + // 根据前台传过来的数据格式,构造入库单及入库单明细 buildGodownEntryParamsForSave(entry); entry.setTime(new Date()); - entry.setSubType(ExpensiveGoodsGodownEntry.SUBTYPE_PURCHASE); + entry.setSubType(entryType); + entry.setType(ExpensiveGoodsGodownEntry.TYPE_IN); entry.setOrgUnitCode(AcegiHelper.getCurrentOrgUnitCode()); entry.setOrgUnitName(AcegiHelper.getCurrentOrgUnitName()); - returnMsg.put(print, print); - expensiveGoodsGodownEntryManager.saveGodownEntry_TRANS_REQUIRED(entry, returnMsg); + expensiveGoodsGodownEntryManager.saveGodownEntry_TRANS_REQUIRED(entry, resultMap); } - saveResult = true; + success = true; + message = "保存成功"; } catch (Exception e) { e.printStackTrace(); - saveResult = false; - result = e.getMessage(); + success = false; + message = e.getMessage(); } - JSONArray itemsDetails = (JSONArray)returnMsg.get("itemsDetails"); + JSONArray itemsDetails = (JSONArray)resultMap.get("itemsDetails"); - printMsgToClient(saveResult, out, result.toString(), itemsDetails); + printMsgToClient(success, message, itemsDetails); return null; } + + /** + * 根据入库单id查询明细 + */ + public void getExpensiveGoodsGodownEntryItemById(){ + JSONArray data = new JSONArray(); + Long expensiveGoodsGodownEntryId = StrutsParamUtils.getPraramLongValue("id", null); + ExpensiveGoodsGodownEntry expensiveGoodsGodownEntry = expensiveGoodsGodownEntryManager.get(expensiveGoodsGodownEntryId); + List expensiveGoodsGodownEntryItemList = expensiveGoodsGodownEntry.getItemsList(); + if (CollectionUtils.isNotEmpty(expensiveGoodsGodownEntryItemList)) { + for (ExpensiveGoodsGodownEntryItem expensiveGoodsGodownEntryItem : expensiveGoodsGodownEntryItemList) { + JSONObject expensiveGoodsGodownEntryItemJson = new JSONObject(); + ExpensiveGoods expensiveGoods = (ExpensiveGoods)objectDao.getByProperty(ExpensiveGoods.class.getSimpleName(), "id", expensiveGoodsGodownEntryItem.getExpensiveGoodsId()); + expensiveGoodsGodownEntryItemJson.put("id", expensiveGoodsGodownEntryItem.getId()); + expensiveGoodsGodownEntryItemJson.put("supplierId", expensiveGoodsGodownEntryItem.getSupplierId()); + expensiveGoodsGodownEntryItemJson.put("supplierName", expensiveGoodsGodownEntryItem.getSupplierName()); + expensiveGoodsGodownEntryItemJson.put("expensiveGoodsId", expensiveGoodsGodownEntryItem.getExpensiveGoodsId()); + expensiveGoodsGodownEntryItemJson.put("expensiveGoodsName", expensiveGoods.getShowName()); + expensiveGoodsGodownEntryItemJson.put("certification", expensiveGoodsGodownEntryItem.getCertification()); + expensiveGoodsGodownEntryItemJson.put("firstBodyCode", expensiveGoodsGodownEntryItem.getFirstBodyCode()); + expensiveGoodsGodownEntryItemJson.put("secondBodyCode", expensiveGoodsGodownEntryItem.getSecondBodyCode()); + expensiveGoodsGodownEntryItemJson.put("thirdBodyCode", expensiveGoodsGodownEntryItem.getThirdBodyCode()); + expensiveGoodsGodownEntryItemJson.put("grade", expensiveGoodsGodownEntryItem.getGrade()); + + //鼠标移动需要用到的属性 + expensiveGoodsGodownEntryItemJson.put("name", expensiveGoods.getName()); + expensiveGoodsGodownEntryItemJson.put("specification", expensiveGoods.getSpecification()); + expensiveGoodsGodownEntryItemJson.put("expDate", expensiveGoodsGodownEntryItem.getExpDate()); + expensiveGoodsGodownEntryItemJson.put("cost", expensiveGoodsGodownEntryItem.getCost()); + data.add(expensiveGoodsGodownEntryItemJson); + } + } + StrutsResponseUtils.output(data); + } + // 干预功能,修改入库单 public String interfere_updateGodownEntry() { HttpServletResponse response = StrutsParamUtils.getResponse(); PrintWriter out = null; - String result = "更新成功"; + String message = "更新成功"; response.setCharacterEncoding("UTF-8"); Map returnMsg = new HashMap(); returnMsg.put("success", false); @@ -293,32 +331,13 @@ } catch (Exception e) { e.printStackTrace(); saveResult = false; - result = e.getMessage(); + message = e.getMessage(); } JSONArray itemsDetails = (JSONArray) returnMsg.get("itemsDetails"); - printMsgToClient(saveResult, out, result.toString(), itemsDetails); + printMsgToClient(saveResult, message, itemsDetails); return null; } - public String loadGodownEntryItemByid() { - String id = StrutsParamUtils.getPraramValue("id", ""); - if (StringUtils.isNotBlank(id) && id.equals("0") == false) {// 初始化加载的数据 - godownEntry = expensiveGoodsGodownEntryManager.get(id); - List items = godownEntry.getItemsList(); - Map map = new HashMap(); - map.put("success", true); - map.put("data", items); - JSONObject jsonObject = JSONObject.fromObject(map); - try { - StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); - StrutsParamUtils.getResponse().getWriter() - .println("[" + jsonObject.toString() + "]"); - } catch (IOException e) { - e.printStackTrace(); - } - } - return null; - } public void printSomeGodownEntryItem() { String items = StrutsParamUtils.getPraramValue("items", ""); @@ -327,27 +346,77 @@ expensiveGoodsGodownEntryManager.printSomeGodownEntryItem(items, jsonObj); StrutsResponseUtils.output(jsonObj); } - - public String loadGodownEntry() { + + /** + * 根据入库单加载数据 + time + warehouseID + warehouseName + expensiveGoods.name + expensiveGoods.specification + cost + id + expensiveGoodsId + expDate + supplierName + grade + */ + public void loadExpensiveGoodsGodownEntry() { String id = StrutsParamUtils.getPraramValue("id", ""); - if (StringUtils.isNotBlank(id) && StringUtils.isNumeric(id)) { + if (DatabaseUtil.isPoIdValid(id)) { godownEntry = expensiveGoodsGodownEntryManager.get(id); } - StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); - Map map = new HashMap(); - map.put("success", true); - map.put("data", godownEntry); - JsonConfig config = new JsonConfig(); - config.setJsonPropertyFilter(new JsonPropertyFilter(new String[] { - "godownEntry", "goodsBatchs" })); - JSONObject jsonObject = JSONObject.fromObject(map, config); - String jsonStr = jsonObject.toString(); - try { - StrutsParamUtils.getResponse().getWriter().println(jsonStr); - } catch (IOException e) { - e.printStackTrace(); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("success", true); + + JSONObject entryData = new JSONObject(); + entryData.put("time",godownEntry.getTime()); + entryData.put("warehouseID",godownEntry.getWarehouseID()); + entryData.put("warehouseName",godownEntry.getWarehouseName()); + entryData.put("id",godownEntry.getId()); + entryData.put("operator",godownEntry.getOperator()); + entryData.put("orgUnitCode",godownEntry.getOrgUnitCode()); + entryData.put("orgUnitName",godownEntry.getOrgUnitName()); + entryData.put("remark",godownEntry.getRemark()); + entryData.put("serialNumber",godownEntry.getSerialNumber()); + entryData.put("subType",godownEntry.getSubType()); + entryData.put("type",godownEntry.getType()); + entryData.put("totalPrice",godownEntry.getTotalPrice()); + List expensiveGoodsGodownEntryItemList = godownEntry.getItemsList(); + if(CollectionUtils.isNotEmpty(expensiveGoodsGodownEntryItemList)){ + JSONArray itemList = new JSONArray(); + for (ExpensiveGoodsGodownEntryItem expensiveGoodsGodownEntryItem : expensiveGoodsGodownEntryItemList) { + ExpensiveGoods expensiveGoods = + (ExpensiveGoods)objectDao.getByProperty(ExpensiveGoods.class.getSimpleName(), "id", expensiveGoodsGodownEntryItem.getExpensiveGoodsId()); + JSONObject expensiveGoodsData = new JSONObject(); + expensiveGoodsData.put("name", expensiveGoods.getName()); + expensiveGoodsData.put("specification", expensiveGoods.getSpecification()); + + JSONObject itemData = new JSONObject(); + + itemData.put("expensiveGoods", expensiveGoodsData); + + itemData.put("cost", expensiveGoodsGodownEntryItem.getCost()); + itemData.put("id", expensiveGoodsGodownEntryItem.getId()); + itemData.put("expensiveGoodsId", expensiveGoodsGodownEntryItem.getExpensiveGoodsId()); + itemData.put("expensiveGoodsName", expensiveGoods.getShowName()); + itemData.put("expDate", expensiveGoodsGodownEntryItem.getExpDate()); + itemData.put("supplierName", expensiveGoodsGodownEntryItem.getSupplierName()); + itemData.put("grade", expensiveGoodsGodownEntryItem.getGrade()); + + itemData.put("certification", expensiveGoodsGodownEntryItem.getCertification()); + itemData.put("firstBodyCode", expensiveGoodsGodownEntryItem.getFirstBodyCode()); + itemData.put("secondBodyCode", expensiveGoodsGodownEntryItem.getSecondBodyCode()); + itemData.put("thirdBodyCode", expensiveGoodsGodownEntryItem.getThirdBodyCode()); + itemData.put("supplierId", expensiveGoodsGodownEntryItem.getSupplierId()); + + itemList.add(itemData); + } + entryData.put("itemsList", itemList); } - return null; + jsonObject.put("data", entryData); + StrutsResponseUtils.output(jsonObject); } public void deleteGodownEntry() { Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsGodownEntryView.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsGodownEntryView.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsGodownEntryView.js (revision 20841) @@ -0,0 +1,1554 @@ +var entityName = entryType + "入库单"; +var grid; +var g_localID = 1;// 为了区分每一个item,增加的ID。 +var commonEntry = new commonEntry(); + +//表单提交的结果状态(分别表示初始、提交成功、失败等) +var formSubmitResultInit = "0"; +var formSubmitResultSucc = "1"; +var formSubmitResultFail = "-1"; +var entryItemJsonArray = []; //入库项数组,用于Selenium自动化测试 + +//仓库数据源 +var wareHouseStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/baseData/wareHouseAction!getWareHouseData.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'name',mapping : 'name'}, + {name : 'orgUnitCode',mapping : 'orgUnitCode'}, + ]), + listeners : { + load : function(store,records) { + if(records.length > 0 && (!commonEntry.isOpen())){ + var combo = top.Ext.getCmp("wareHouse1"); + // 触发选中事件 + combo.fireEvent('select', combo,records[0],0); + } + } + } +}); + +// 高值耗材物品定义数据源 +var expensiveGoodsStore = new Ext.data.Store({ + pageSize: 100, + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/expensiveGoodsAction!getExpensiveGoodsData.do', + //url : WWWROOT + '/disinfectSystem/expensiveGoodsAction!searchExpensiveGoods.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'spelling',mapping : 'spelling'}, + {name : 'name',mapping : 'name'}, + {name : 'displayName',mapping : 'displayName'}, + {name : 'referencePrice',mapping : 'referencePrice'} + ]) +}); + +function dateCompare(date1,date2){ + date1 = date1.replace(/\-/gi,"/"); + date2 = date2.replace(/\-/gi,"/"); + var time1 = new Date(date1).getTime(); + var time2 = new Date(date2).getTime(); + if(time1 > time2){ + return 1; + }else if(time1 == time2){ + return 2; + }else{ + return 3; + }} + +//供应商(高值耗材)数据源 +var expensiveGoodsSupplierStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/baseData/supplierAction!getSupplierData.do?supplierType='+encodeURI(expensiveGoodsSupplier), + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'name',mapping : 'name'} + ]) +}); + +//类别数据源 +var gradeStore = new Ext.data.SimpleStore({ + data:[['一类'],['二类'],['三类']], + fields:['name'] +}); + +//入库明细item +var ExpensiveGoodsGodownEntryItemRecord = Ext.data.Record.create([ + {name : 'localID'}, + {name : 'id'}, + {name : 'supplierId'}, + {name : 'supplierName'}, + {name : 'expensiveGoodsId'}, + {name : 'expensiveGoodsName'}, + {name : 'certification'}, + {name : 'expDate' ,type : 'date'}, + {name : 'cost'}, + {name : 'firstBodyCode'}, + {name : 'secondBodyCode'}, + {name : 'thirdBodyCode'}, + {name : 'grade'} +]); + +/** + * 设置仓库的id和name的隐藏域的内容 + * @param id + * @param name + */ +function setWareHouseInfo(id,name){ + top.Ext.getCmp('warehouseID').setValue(id); + top.Ext.getCmp('warehouseName').setValue(name); +} + +/** + * 添加明细 + * @param supplierId 供应商id + * @param supplierName 供应商名字 + * @param expensiveGoodsId 高值耗材定义id + * @param name 高值耗材名称 + * @param cost 单价 + * @param expDate 失效期 + * @param certification 注册证号 + * @param firstBodyCode 自身条码1 + * @param secondBodyCode 自身条码2 + * @param thirdBodyCode 自身条码3 + * @param grade 类别 + * @returns {Boolean} + */ +function addItems(supplierId,supplierName,expensiveGoodsId,expensiveGoodsName,cost,expDate,certification,firstBodyCode,secondBodyCode,thirdBodyCode,grade){ + if(top.Ext.getCmp('name1').getValue() == null || top.Ext.getCmp('name1').getValue() == ''){ + showResult("请填写物品名称!"); + return false; + } + + if(top.Ext.getCmp('cost1').getValue() == null || top.Ext.getCmp('cost1').getValue() == ''){ + showResult("请填写单价!"); + return false; + } + + if(!top.Ext.getCmp('cost1').isValid()){ + showResult("请正确填写单价!"); + return false; + } + + if(top.Ext.getCmp('expDate1').getValue() == null || top.Ext.getCmp('expDate1').getValue() == ''){ + showResult("请填写失效日期!"); + return false; + } + + if(!sstsConfig.notValidateSupply && top.Ext.isEmpty(top.Ext.getCmp('supplier1'))){ + showResult("请填写供应商!"); + return false; + } + + for(var i = 0;i < top.Ext.getCmp('expensiveGoodsGodownEntryItemGrid').getStore().getCount();i++){ + var expensiveGoodsGodownEntryItemData = top.Ext.getCmp('expensiveGoodsGodownEntryItemGrid').getStore().getAt(i).data; + if(expensiveGoodsGodownEntryItemData.expensiveGoodsId == expensiveGoodsId + && (expensiveGoodsGodownEntryItemData.firstBodyCode && firstBodyCode && expensiveGoodsGodownEntryItemData.firstBodyCode == firstBodyCode) + && (expensiveGoodsGodownEntryItemData.secondBodyCode && secondBodyCode && expensiveGoodsGodownEntryItemData.secondBodyCode == secondBodyCode) + && (expensiveGoodsGodownEntryItemData.thirdBodyCode && thirdBodyCode && expensiveGoodsGodownEntryItemData.thirdBodyCode == thirdBodyCode)){ + showResult("该物品已经存在,不能重复添加!"); + return false; + } + } + + //添加操作 + var expensiveGoodsGodownEntryItem = new ExpensiveGoodsGodownEntryItemRecord({ + localID:g_localID++, + id : "", + supplierId : supplierId, + supplierName : supplierName, + expensiveGoodsId : expensiveGoodsId, + expensiveGoodsName : expensiveGoodsName, + certification:certification, + expDate : expDate, + cost : Ext.num(parseFloat(cost),0), + firstBodyCode:firstBodyCode, + secondBodyCode:secondBodyCode, + thirdBodyCode:thirdBodyCode, + grade:grade + }); + + top.Ext.getCmp('expensiveGoodsGodownEntryItemGrid').getStore().add(expensiveGoodsGodownEntryItem); + //top.Ext.getCmp('expensiveGoodsGodownEntryItemGrid').getStore().insert(0 , expensiveGoodsGodownEntryItem); + clearAddedElementValue(); +} + +/** + * 清空每个被添加的元素的值 + */ +function clearAddedElementValue(){ + top.Ext.getCmp('supplier1').setValue(''); + top.Ext.getCmp('expensiveGoodsId1').setValue(''); + top.Ext.getCmp('name1').setValue(''); + top.Ext.getCmp('certification1').setValue(''); + top.Ext.getCmp('expDate1').setValue(''); + top.Ext.getCmp('cost1').setValue(''); + top.Ext.getCmp('firstBodyCode1').setValue(''); + top.Ext.getCmp('secondBodyCode1').setValue(''); + top.Ext.getCmp('thirdBodyCode1').setValue(''); + top.Ext.getCmp('grade1').setValue(''); +} + +function renderDeleteButton(v,p,record){ + //如果为修改,则隐藏删除图标 + if(commonEntry.isOpen()){ + return ""; + } + return ""; +} +/** +* 精确计算arg1和arg2的乘积 +* @param arg1 +* @param arg2 +* @return +*/ +function accMul(arg1,arg2) { + var s1=null ,m=0; + if(!arg1){ + s1 = '0.0'; + }else{ + s1=arg1.toString(); + } + if(!arg2){ + s2='0.0'; + }else{ + s2=arg2.toString(); + } + try{m+=s1.split(".")[1].length;}catch(e){s1='0.0';} + try{m+=s2.split(".")[1].length;}catch(e){s2='0.0';} + return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m); +} +/** +* 精确计算arg1和arg2的和 +* @param arg1 +* @param arg2 +* @return +*/ +function accAdd(arg1,arg2){ + var r1=null ,m=0; + if(!arg1){ + r1 = '0.0'; + }else{ + r1=arg1.toString(); + } + if(!arg2){ + r2='0.0'; + }else{ + r2=arg2.toString(); + } + try{r1=arg1.toString().split(".")[1].length;}catch(e){r1=0;} + try{r2=arg2.toString().split(".")[1].length;}catch(e){r2=0;} + m=Math.pow(10,Math.max(r1,r2)); + return round((arg1*m+arg2*m)/m,2); +} +function round(v,e){ + var t=1; + for(;e>0;t*=10,e--); + for(;e<0;t/=10,e++); + return Math.round(v*t)/t; +} +function setTotalMoney(grid) { + var totalMoney = 0.0; + grid.getStore().each(function(record){ + var cost = Ext.num(parseFloat(record.data.cost),0.0); + totalMoney += cost; + }); + top.Ext.getCmp("totalPrice").setValue(Ext.util.Format.usMoney(totalMoney)); +} +function renderTotalPrice(val,p,record){ + var cost = Ext.num(parseFloat(record.data.cost),0.0); + var total = Ext.util.Format.usMoney(cost); + return total; +} + +function deleteItem(localID){ + var expensiveGoodsGodownEntryItemGridStore = top.Ext.getCmp('expensiveGoodsGodownEntryItemGrid').getStore(); + for(var i = 0;i