Jelajahi Sumber

修改采购订单、解决流程绑定事件报错问题

ouyj 9 bulan lalu
induk
melakukan
4af24144ea

+ 6 - 0
src/main/contract/com/yw/contract/contract/action/ContractEntryAction.java

@@ -1121,6 +1121,7 @@ public class ContractEntryAction extends ContractFlowAction {
 		String flowOnOff = request.getParameter("flowOnOff");
 		String isValid = request.getParameter("isValid"); 
 		String supplierCode = request.getParameter("supplierCode");
+		String noOrder = request.getParameter("noOrder");
 
 		List<ContractInfo> infoList = new ArrayList<ContractInfo>();
 		ContractInfo info = new ContractInfo();
@@ -1173,6 +1174,9 @@ public class ContractEntryAction extends ContractFlowAction {
 				supplierCode = java.net.URLDecoder.decode(supplierCode, "UTF-8");
 				ph.setParam("supplierCode", supplierCode.trim());
 			}
+			if (noOrder != null && !"".equals(noOrder)) { 
+				ph.setParam("noOrder", noOrder.trim());
+			}
 			infoList = contractEntryService.contractEntryList(p, pSize, ph, info, oasession);
 			// 去除不用的参数
 			// params.remove(0);
@@ -1200,8 +1204,10 @@ public class ContractEntryAction extends ContractFlowAction {
 			
 			String supplierCode = request.getParameter("supplierCode");
 			String contract_type = request.getParameter("contract_type");
+			String noOrder = request.getParameter("noOrder");
 			request.setAttribute("supplierCode", supplierCode);
 			request.setAttribute("contract_type", contract_type);
+			request.setAttribute("noOrder", noOrder);
 		} catch (Exception e) {
 			e.printStackTrace();
 		}

+ 7 - 1
src/main/contract/com/yw/contract/contract/dao/ContractEntryDaoImpl.java

@@ -32,7 +32,7 @@ public class ContractEntryDaoImpl extends BaseDao implements ContractEntryDao {
 	public List<ContractInfo> contractEntryList(int p, int pSize, ParameterHelper ph, ContractInfo info, IAppSession oasession) throws Exception {
 		StringBuffer sb = new StringBuffer("SELECT ec.universalid, ec.contract_number,ec.firstparty_name,ec.secondparty_name,ec.contract_name,ec.contract_type,ec.contract_signdate,"
 				+ " ec.contract_type,tu1.name AS duty_man_name,tu2.name AS salesman_name," + "tg.GROUPNAME AS duty_department_name ,ed.dname AS contract_type_name, ec.au_state, ec.flow_id,"
-				+ " ec.execute_state,ec.supplier_code,ec.supplier_name,ec.l_form_ins_id,ec.l_form_ins_id,ec.flow_ins_id, ec.is_valid,ec.process_id,ec.contract_entrying_date,ec.purchase_id,ec.purchase_number,a.v_ins_sub_name "
+				+ " ec.execute_state,ec.supplier_code,ec.supplier_name,ec.l_form_ins_id,ec.l_form_ins_id,ec.flow_ins_id, ec.is_valid,ec.process_id,ec.contract_entrying_date,ec.purchase_id,ec.purchase_number,a.v_ins_sub_name,ec.order_number "
 				+ " FROM contract ec LEFT JOIN t_user tu1 ON ec.duty_man=tu1.UNIVERSALID " + "LEFT JOIN t_user tu2 ON ec.salesman=tu2.UNIVERSALID "
 				+ " LEFT JOIN t_group tg ON ec.duty_department=tg.UNIVERSALID " + "LEFT JOIN contract_data_dictionary ed ON ec.contract_type=ed.dvalue "
 				+ " AND ed.parentid = (SELECT universalid FROM contract_data_dictionary WHERE dvalue = '" + ContractConstant.CONTRACT_TYPE + "' AND group_root_id=" + oasession.getUnit().getId() + ")"
@@ -115,6 +115,11 @@ public class ContractEntryDaoImpl extends BaseDao implements ContractEntryDao {
 		if (null != ph.getParam("supplierCode") && !"".equals(ph.getParam("supplierCode"))) {
 			sb.append(" AND ec.supplier_code = '" + ph.getParam("supplierCode") + "'");
 		}
+		if (null != ph.getParam("noOrder") && !"".equals(ph.getParam("noOrder"))) {
+			if("true".equals(ph.getParam("noOrder"))){
+				sb.append(" AND (ec.order_number is null or ec.order_number='' )");
+			} 
+		}
 		sb.append(" ORDER BY ec.contract_entrying_date DESC,ec.create_time DESC ");
 		return sb.toString();
 	}
@@ -333,6 +338,7 @@ public class ContractEntryDaoImpl extends BaseDao implements ContractEntryDao {
 				info.setFlowInsId(rs.getLong("flow_ins_id"));
 				info.setPurchaseId(rs.getLong("purchase_id"));
 				info.setPurchaseNumber(rs.getString("purchase_number"));
+				info.setOrderNumber(rs.getString("order_number"));
 				return info;
 			}
 		};

+ 10 - 0
src/main/contract/com/yw/contract/contract/model/ContractInfo.java

@@ -234,6 +234,9 @@ public class ContractInfo {
 	@Column(name="purchase_number",type=Types.VARCHAR)
 	private String purchaseNumber;		//采购申请单编号
 	
+	@Column(name="order_number",type=Types.VARCHAR)
+	private String orderNumber;		//采购订单编号
+	
 	private String seTache;
 	
 	//子标题 
@@ -737,4 +740,11 @@ public class ContractInfo {
 	public void setV_ins_sub_name(String v_ins_sub_name) {
 		this.v_ins_sub_name = v_ins_sub_name;
 	}
+	public String getOrderNumber() {
+		return orderNumber;
+	}
+	public void setOrderNumber(String orderNumber) {
+		this.orderNumber = orderNumber;
+	}
+	
 }

+ 227 - 4
src/main/contract/com/yw/contract/contract/service/ContractPurchaseOrderServiceImpl.java

@@ -3,6 +3,7 @@ package com.yw.contract.contract.service;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
@@ -20,6 +21,8 @@ import com.kingdee.service.data.entity.SupplierListResRow;
 import com.yw.contract.common.sync.jdy.JdyCommonHelper;
 import com.yw.contract.common.sync.jdy.JdyPurOrderHelper;
 import com.yw.contract.common.sync.mes.MesCommonHelper;
+import com.yw.contract.contract.dao.ContractEntryDao;
+import com.yw.contract.contract.dao.ContractMaterialDao;
 import com.yw.contract.contract.dao.ContractPurchaseOrderDao;
 import com.yw.contract.contract.model.ContractInfo;
 import com.yw.contract.contract.model.ContractMaterial;
@@ -35,15 +38,115 @@ public class ContractPurchaseOrderServiceImpl implements ContractPurchaseOrderSe
 
     @Autowired
     ContractPurchaseOrderDao purchaseOrderDao; 
-    
+    @Autowired
+	ContractMaterialDao contractMaterialDao;
+    @Autowired
+	ContractEntryDao contractEntryDao;
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public int addContractPurchaseOrder(ContractPurchaseOrder contractPurchaseOrder) throws Exception {
 		int orderStatus = contractPurchaseOrder.getOrderStatus();
-		if(orderStatus == 1){
+		if(orderStatus == 1){ 
 			if(ObjectUtils.isEmpty(contractPurchaseOrder.getPurchaseOrderDetails())){
 				return -98;
+			}else{ 
+				if(StringUtils.isNotEmpty(contractPurchaseOrder.getContractNumber())){
+					Long contractId = contractPurchaseOrder.getContractId();
+					ContractInfo contractInfo = new ContractInfo();
+					contractInfo.setUniversalid(contractId);
+					Object object = this.getObject(contractInfo);
+					contractInfo = (ContractInfo)this.getObject(contractInfo);
+					if(StringUtils.isNotEmpty(contractInfo.getOrderNumber())){
+						return -97; 
+					}
+					//如果有合同数据,取合同明细与已确认的订单的明细及当前订单的明细的物料和物料数量进行对比 
+					List<ContractMaterial> contractMaterialList = contractMaterialDao.getContractMaterialListByContractId(contractId);
+					List<ContractPurchaseOrderDetail> purchaseOrderDetailList = contractPurchaseOrder.getPurchaseOrderDetails();
+					 
+					for (ContractMaterial material : contractMaterialList) { 
+						String itemCode = material.getItemCode();
+						BigDecimal qtyMaterial = material.getQty();
+						boolean match = true;
+						for (ContractPurchaseOrderDetail detail : purchaseOrderDetailList) {
+							String materialCode = detail.getMaterialCode(); 
+							BigDecimal qtyDetail = detail.getQty();
+							if (!(materialCode.equals(itemCode) && qtyMaterial.compareTo(qtyDetail) == 0))  { 
+								match = false;
+								break;
+				            } 
+						}
+						if (!match) {  
+				            return -96; 
+				        } 
+					}
+				}else if(StringUtils.isNotEmpty(contractPurchaseOrder.getPurchaseNumber())){
+					//如果没有合同数据,但有采购数据,则和采购数据进行对比 
+					List<Object> orderList = new ArrayList<>();
+					Long purchaseId = contractPurchaseOrder.getPurchaseId();
+					String purchaseNumber = contractPurchaseOrder.getPurchaseNumber();
+					ContractPurchaseOrder orderA = new ContractPurchaseOrder();
+					orderA.setPurchaseNumber(purchaseNumber);
+					orderA.setOrderStatus(1);
+					List<Object> orderAList = this.getObjectList(orderA);
+					if(orderAList != null){
+						orderList.addAll(orderAList);
+					} 
+					ContractPurchaseOrder orderB = new ContractPurchaseOrder();
+					orderB.setPurchaseNumber(purchaseNumber);
+					orderB.setOrderStatus(2);
+					List<Object> orderBList = this.getObjectList(orderB);
+					if(orderBList != null){
+						orderList.addAll(orderBList);
+					}  
+					List<ContractPurchaseOrder> contractPurchaseOrderList = (List<ContractPurchaseOrder>) (List<?>) orderList;
+					List<Object> detailList = new ArrayList<>();
+					for(ContractPurchaseOrder contractPurchaseOrderI:contractPurchaseOrderList){
+						ContractPurchaseOrderDetail contractPurchaseOrderDetail = new ContractPurchaseOrderDetail(); 
+						contractPurchaseOrderDetail.setOrderId(contractPurchaseOrderI.getUniversalid()); 
+						List<Object> detailIList = this.getObjectList(contractPurchaseOrderDetail);
+						if(detailIList != null){
+							detailList.addAll(detailIList);
+						} 
+					}
+					
+					List<ContractPurchaseOrderDetail> purchaseOrderDetailList = (List<ContractPurchaseOrderDetail>) (List<?>) detailList; 
+					purchaseOrderDetailList.addAll(contractPurchaseOrder.getPurchaseOrderDetails());
+					//将所得到的采购订单物品详情数据和采购申请表的物品进行对比  
+					ContractPurchaseDetail contractPurchaseDetail = new ContractPurchaseDetail();
+					contractPurchaseDetail.setContractPurchaseFormId(purchaseId); 
+					List<Object> contractMaterials = this.getObjectList(contractPurchaseDetail);
+					List<ContractPurchaseDetail> contractPurchaseDetailList = new ArrayList<>(); 
+					contractPurchaseDetailList = (List<ContractPurchaseDetail>) (List<?>) contractMaterials; 
+					// 获取当前订单的物料明细
+					List<ContractPurchaseOrderDetail> currentOrderDetails = contractPurchaseOrder.getPurchaseOrderDetails();
+
+					// 遍历当前订单的每种物料,进行数量校验
+					for (ContractPurchaseOrderDetail currentDetail : currentOrderDetails) {
+					    String currentMaterialCode = currentDetail.getMaterialCode();  
+					    
+					    //在已有采购订单明细(purchaseOrderDetailList)中,汇总同一物料的总数量
+					    BigDecimal totalOrderedQty = BigDecimal.ZERO;
+					    for (ContractPurchaseOrderDetail existingDetail : purchaseOrderDetailList) {
+					        if (existingDetail.getMaterialCode().equals(currentMaterialCode)) {
+					            totalOrderedQty = totalOrderedQty.add(existingDetail.getQty());
+					        }
+					    }
+					    
+					    //在采购申请表明细(contractPurchaseDetailList)中,查找该物料允许的最大数量
+					    BigDecimal maxAllowedQty = BigDecimal.ZERO; 
+					    for (ContractPurchaseDetail purchaseDetail : contractPurchaseDetailList) {
+					        if (purchaseDetail.getMaterialCode().equals(currentMaterialCode)) {
+					            maxAllowedQty = purchaseDetail.getQty();   
+					            break;
+					        }
+					    }  
+					    //比较:当前订单数量 + 已有订单总数量 不能超过申请表中的最大允许数量
+					    if (totalOrderedQty.compareTo(maxAllowedQty) > 0) {
+					        return -95; //物料采购数量超限
+					    }
+					}
+				} 
 			}
 		}
 		int num = purchaseOrderDao.addContractPurchaseOrder(contractPurchaseOrder);
@@ -58,6 +161,15 @@ public class ContractPurchaseOrderServiceImpl implements ContractPurchaseOrderSe
 				purchaseOrderDao.addObject(detail);
 			} 
 			if(orderStatus == 1){
+				if(StringUtils.isNotEmpty(contractPurchaseOrder.getContractNumber())){
+					Long contractId = contractPurchaseOrder.getContractId();
+					ContractInfo contractInfo = new ContractInfo();
+					contractInfo.setUniversalid(contractId);
+					Object object = this.getObject(contractInfo);
+					contractInfo = (ContractInfo)this.getObject(contractInfo);
+					contractInfo.setOrderNumber(contractPurchaseOrder.getOrderNumber());
+					contractEntryDao.editContractEntry(contractInfo);
+				} 
 				this.insertPurchaseOrder(contractPurchaseOrder.getUniversalid());
 			}
 		}
@@ -80,6 +192,103 @@ public class ContractPurchaseOrderServiceImpl implements ContractPurchaseOrderSe
 		if(orderStatus == 1){
 			if(ObjectUtils.isEmpty(contractPurchaseOrderDetailList)){
 				return -98;
+			}else{
+				if(StringUtils.isNotEmpty(contractPurchaseOrder.getContractNumber())){
+					Long contractId = contractPurchaseOrder.getContractId();
+					ContractInfo contractInfo = new ContractInfo();
+					contractInfo.setUniversalid(contractId);
+					Object object = this.getObject(contractInfo);
+					contractInfo = (ContractInfo)this.getObject(contractInfo);
+					if(StringUtils.isNotEmpty(contractInfo.getOrderNumber())){
+						return -97; 
+					}
+					//如果有合同数据,取合同明细与已确认的订单的明细及当前订单的明细的物料和物料数量进行对比 
+					List<ContractMaterial> contractMaterialList = contractMaterialDao.getContractMaterialListByContractId(contractId);
+					List<ContractPurchaseOrderDetail> purchaseOrderDetailList = contractPurchaseOrder.getPurchaseOrderDetails();
+					 
+					for (ContractMaterial material : contractMaterialList) { 
+						String itemCode = material.getItemCode();
+						BigDecimal qtyMaterial = material.getQty();
+						boolean match = true;
+						for (ContractPurchaseOrderDetail detail : purchaseOrderDetailList) {
+							String materialCode = detail.getMaterialCode(); 
+							BigDecimal qtyDetail = detail.getQty();
+							if (!(materialCode.equals(itemCode) && qtyMaterial.compareTo(qtyDetail) == 0))  { 
+								match = false;
+								break;
+				            } 
+						}
+						if (!match) {  
+				            return -96; 
+				        } 
+					}
+				}else if(StringUtils.isNotEmpty(contractPurchaseOrder.getPurchaseNumber())){
+					//如果没有合同数据,但有采购数据,则和采购数据进行对比
+					List<Object> orderList = new ArrayList<>();
+					Long purchaseId = contractPurchaseOrder.getPurchaseId();
+					String purchaseNumber = contractPurchaseOrder.getPurchaseNumber();
+					ContractPurchaseOrder orderA = new ContractPurchaseOrder();
+					orderA.setPurchaseNumber(purchaseNumber);
+					orderA.setOrderStatus(1);
+					List<Object> orderAList = this.getObjectList(orderA);
+					if(orderAList != null){
+						orderList.addAll(orderAList);
+					} 
+					ContractPurchaseOrder orderB = new ContractPurchaseOrder();
+					orderB.setPurchaseNumber(purchaseNumber);
+					orderB.setOrderStatus(2);
+					List<Object> orderBList = this.getObjectList(orderB);
+					if(orderBList != null){
+						orderList.addAll(orderBList);
+					}  
+					List<ContractPurchaseOrder> contractPurchaseOrderList = (List<ContractPurchaseOrder>) (List<?>) orderList;
+					List<Object> detailList = new ArrayList<>();
+					for(ContractPurchaseOrder contractPurchaseOrderI:contractPurchaseOrderList){
+						ContractPurchaseOrderDetail contractPurchaseOrderDetail = new ContractPurchaseOrderDetail(); 
+						contractPurchaseOrderDetail.setOrderId(contractPurchaseOrderI.getUniversalid()); 
+						List<Object> detailIList = this.getObjectList(contractPurchaseOrderDetail);
+						if(detailIList != null){
+							detailList.addAll(detailIList);
+						} 
+					}
+					
+					List<ContractPurchaseOrderDetail> purchaseOrderDetailList = (List<ContractPurchaseOrderDetail>) (List<?>) detailList; 
+					purchaseOrderDetailList.addAll(contractPurchaseOrder.getPurchaseOrderDetails());
+					//将所得到的采购订单物品详情数据和采购申请表的物品进行对比  
+					ContractPurchaseDetail contractPurchaseDetail = new ContractPurchaseDetail();
+					contractPurchaseDetail.setContractPurchaseFormId(purchaseId); 
+					List<Object> contractMaterials = this.getObjectList(contractPurchaseDetail);
+					List<ContractPurchaseDetail> contractPurchaseDetailList = new ArrayList<>(); 
+					contractPurchaseDetailList = (List<ContractPurchaseDetail>) (List<?>) contractMaterials; 
+					// 获取当前订单的物料明细
+					List<ContractPurchaseOrderDetail> currentOrderDetails = contractPurchaseOrder.getPurchaseOrderDetails();
+
+					// 遍历当前订单的每种物料,进行数量校验
+					for (ContractPurchaseOrderDetail currentDetail : currentOrderDetails) {
+					    String currentMaterialCode = currentDetail.getMaterialCode();  
+					    
+					    //在已有采购订单明细(purchaseOrderDetailList)中,汇总同一物料的总数量
+					    BigDecimal totalOrderedQty = BigDecimal.ZERO;
+					    for (ContractPurchaseOrderDetail existingDetail : purchaseOrderDetailList) {
+					        if (existingDetail.getMaterialCode().equals(currentMaterialCode)) {
+					            totalOrderedQty = totalOrderedQty.add(existingDetail.getQty());
+					        }
+					    }
+					    
+					    //在采购申请表明细(contractPurchaseDetailList)中,查找该物料允许的最大数量
+					    BigDecimal maxAllowedQty = BigDecimal.ZERO; 
+					    for (ContractPurchaseDetail purchaseDetail : contractPurchaseDetailList) {
+					        if (purchaseDetail.getMaterialCode().equals(currentMaterialCode)) {
+					            maxAllowedQty = purchaseDetail.getQty();   
+					            break;
+					        }
+					    }  
+					    //比较:当前订单数量 + 已有订单总数量 不能超过申请表中的最大允许数量
+					    if (totalOrderedQty.compareTo(maxAllowedQty) > 0) {
+					        return -95; //物料采购数量超限
+					    }
+					}
+				} 
 			}
 		}
 		int num  = purchaseOrderDao.editContractPurchaseOrder(contractPurchaseOrder,"universalid");
@@ -98,7 +307,16 @@ public class ContractPurchaseOrderServiceImpl implements ContractPurchaseOrderSe
 				detail.setUnitId(contractPurchaseOrder.getUnitId());
 				purchaseOrderDao.addObject(detail); 
 			} 
-			if(orderStatus == 1){
+			if(orderStatus == 1){ 
+				if(StringUtils.isNotEmpty(contractPurchaseOrder.getContractNumber())){
+					Long contractId = contractPurchaseOrder.getContractId();
+					ContractInfo contractInfo = new ContractInfo();
+					contractInfo.setUniversalid(contractId);
+					Object object = this.getObject(contractInfo);
+					contractInfo = (ContractInfo)this.getObject(contractInfo);
+					contractInfo.setOrderNumber(contractPurchaseOrder.getOrderNumber());
+					contractEntryDao.editContractEntry(contractInfo);
+				} 
 				this.insertPurchaseOrder(contractPurchaseOrder.getUniversalid());
 			}
 		} 
@@ -310,6 +528,7 @@ public class ContractPurchaseOrderServiceImpl implements ContractPurchaseOrderSe
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public int createPurchaseOrderFromContract(ContractPurchaseOrder contractPurchaseOrder, ContractInfo contractInfo)
 			throws Exception { 
 		BigDecimal totalAmount = BigDecimal.ZERO;
@@ -339,7 +558,7 @@ public class ContractPurchaseOrderServiceImpl implements ContractPurchaseOrderSe
 		contractPurchaseOrder.setSupplierCode(contractInfo.getSupplierCode());
 		contractPurchaseOrder.setSupplierName(contractInfo.getSupplierName());
 		contractPurchaseOrder.setTotalAmount(totalAmount);
-		contractPurchaseOrder.setOrderStatus(0);
+		contractPurchaseOrder.setOrderStatus(1);
 		contractPurchaseOrder.setSource(1);
 		contractPurchaseOrder.setSyncStatus(0);
 		contractPurchaseOrder.setCreateTime(new Date());
@@ -347,6 +566,10 @@ public class ContractPurchaseOrderServiceImpl implements ContractPurchaseOrderSe
 		contractPurchaseOrder.setPurchaseId(contractInfo.getPurchaseId());
 		contractPurchaseOrder.setPurchaseNumber(contractInfo.getPurchaseNumber());
 		int num = addContractPurchaseOrder(contractPurchaseOrder);
+		/*if(num > 0){
+			contractInfo.setOrderNumber(contractPurchaseOrder.getOrderNumber());
+			num = contractEntryDao.editContractEntry(contractInfo);
+		}*/
 		return num;
 	} 
 }

+ 6 - 4
src/main/core/com/yw/core/clientImpl/service/RequestAbs.java

@@ -25,10 +25,12 @@ public abstract class RequestAbs implements RequestIntf{
 
 	public void run() {
 		getParameters();
-		token = request.getHeader("Authorization");
-		if(!StringUtil.isEmpty(token)){
-			token = token.replace("Bearer ", "");
-		}
+		if(request != null){
+			token = request.getHeader("Authorization");
+			if(!StringUtil.isEmpty(token)){
+				token = token.replace("Bearer ", "");
+			}
+		} 
 	}
 
 	public void runConfig(){

+ 17 - 6
src/main/webapp/yw/contract/contractEntryList.jsp

@@ -83,9 +83,11 @@
 												+ row.universalid
 												+ ')\">合同信息</a>&nbsp;';
 											if(row.lFormInsId){
-												html += '<a href=\"#\" onclick=\"createPurchaseOrder('
-													+ row.universalid
-													+ ')\">生成采购订单</a>&nbsp;';
+												if(!row.orderNumber){
+													html += '<a href=\"#\" onclick=\"createPurchaseOrder('
+														+ row.universalid
+														+ ')\">生成采购订单</a>&nbsp;';
+												}
 												html += '<a href=\"#\" onclick=\"viewContractStatus('
 													+ row.universalid
 													+ ')\">合同跟踪</a>&nbsp;';
@@ -276,16 +278,25 @@ function getTime(){
  
 function createPurchaseOrder(id){
 	if (window.confirm("确定生成采购订单?")){ 
+		$.ligerDialog.waitting('正在生成订单,请稍候...');
 		var param={'universalid':id};
-		sendAjaxParam(param,"contractPurchaseOrderAction.do?task=createFromContract",'json',createPurchaseOrderProcess);
+		sendAsyncAjax(param,"contractPurchaseOrderAction.do?task=createFromContract",'json',createPurchaseOrderProcess);
 	}
 }
 
 function createPurchaseOrderProcess(data){
+	$.ligerDialog.closeWaitting();
+	searchByKword();
 	if(data>0){ 
-		addInfo("生成成功!"); 
+		addInfo("生成成功!");   
 	}else{ 
-		addError("生成失败!");
+		if(data == -98){
+			addError("没有物料明细!");  
+		}else if(data == -97){
+			addError("所选合同已被生成采购订单,不能重复生成!");  
+		}else{
+			addError("生成失败!");  
+		} 
 	}
 }
 </script>

+ 17 - 6
src/main/webapp/yw/contract/contractMyLaunchList.jsp

@@ -363,9 +363,11 @@
 												+ row.universalid
 												+ ')\">合同信息</a>&nbsp;';
 											if(row.lFormInsId){
-												html += '<a href=\"#\" onclick=\"createPurchaseOrder('
-													+ row.universalid
-													+ ')\">生成采购订单</a>&nbsp;';
+												if(!row.orderNumber){
+													html += '<a href=\"#\" onclick=\"createPurchaseOrder('
+														+ row.universalid
+														+ ')\">生成采购订单</a>&nbsp;';
+												}
 												html += '<a href=\"#\" onclick=\"viewContractStatus('
 													+ row.universalid
 													+ ')\">合同跟踪</a>&nbsp;';
@@ -527,16 +529,25 @@ function getTime(){
 
 function createPurchaseOrder(id){
 	if (window.confirm("确定生成采购订单?")){ 
+		$.ligerDialog.waitting('正在生成订单,请稍候...');
 		var param={'universalid':id};
-		sendAjaxParam(param,"contractPurchaseOrderAction.do?task=createFromContract",'json',createPurchaseOrderProcess);
+		sendAsyncAjax(param,"contractPurchaseOrderAction.do?task=createFromContract",'json',createPurchaseOrderProcess);
 	}
 }
 
 function createPurchaseOrderProcess(data){
+	$.ligerDialog.closeWaitting();
+	searchByKword();
 	if(data>0){ 
-		addInfo("生成成功!"); 
+		addInfo("生成成功!");   
 	}else{ 
-		addError("生成失败!");
+		if(data == -98){
+			addError("没有物料明细!");  
+		}else if(data == -97){
+			addError("所选合同已被生成采购订单,不能重复生成!");  
+		}else{
+			addError("生成失败!");  
+		} 
 	}
 }
 </script>

+ 32 - 5
src/main/webapp/yw/contract/contractPurchaseOrder/js/purchaseOrder.js

@@ -20,7 +20,7 @@ function selectContract() {
 		height : 350,
 		width : 750,
 		title : '选择合同',
-		url : 'contractEntry.do?task=toSelectContract&time=' + new Date().getTime(),
+		url : 'contractEntry.do?task=toSelectContract&noOrder=true&time=' + new Date().getTime(),
 		showMax : false,
 		showToggle : true,
 		showMin : false,
@@ -100,7 +100,7 @@ function getMaterial(){
 	} 
 }
 
-function addMaterial(index, row) {
+function addMaterial(index, row,readonly) {
 	var cloneObj = $("#template_1").clone().removeClass("hide").removeAttr("id");
 	cloneObj.find("input").attr("disabled", false);
 	// 重复选择的物料不添加
@@ -122,6 +122,11 @@ function addMaterial(index, row) {
 		$(cloneObj).find("input.qty").attr("name", "contractPurchaseOrderDetailList[" + index + "].qty").val(row.qty || 0);
 		$(cloneObj).find("input.price").attr("name", "contractPurchaseOrderDetailList[" + index + "].price").val(row.price || 0);
 		$(cloneObj).find("input.cess").attr("name", "contractPurchaseOrderDetailList[" + index + "].cess").val(row.cess || 0);
+		if (readonly) {
+	        $(cloneObj).find("input.price").attr("readonly", "readonly");
+	        $(cloneObj).find("input.cess").attr("readonly", "readonly");
+	        $(cloneObj).find("input.qty").attr("readonly", "readonly");
+	    }
 		$("#firstPoint").before(cloneObj);
 		calTotalAmount();
 	}
@@ -165,7 +170,7 @@ function materialHasContract(contractId){
 					return;
 				}
 				for (var i = 0; i < rows.length; i++) {
-					addMaterial(i, rows[i]);
+					addMaterial(i, rows[i], true);
 				}
 				dialog.close();
 				addIdAndName();
@@ -206,7 +211,7 @@ function f_importOKMaterialNoContract(item, dialog) {
 		return;
 	}
 	for (var i = 0; i < rows.length; i++) {
-		addMaterial(i, rows[i]);
+		addMaterial(i, rows[i], false);
 	}
 	dialog.close();
 	addIdAndName();
@@ -322,6 +327,7 @@ function clearContract(){
 	$("#contractName").val(''); 
 	$("#purchaseId").val(''); 
 	$("#purchaseNumber").val('');
+	$(".startTr1 input.price, .startTr1 input.cess, .startTr1 input.qty").removeAttr("readonly");
 }
 
 /**
@@ -406,6 +412,27 @@ function saveForm(actionUrl, formName, url) {
 				if(url){ 
 					return;
 				}
+			}else if(data == -97){
+				addError("所选合同已被生成采购订单,不能重复生成!"); 
+				dialogWarn.close(); 
+				result = false;
+				if(url){ 
+					return;
+				}
+			}else if(data == -96){
+				addError("物料明细与所选合同物料明细不一致!"); 
+				dialogWarn.close(); 
+				result = false;
+				if(url){ 
+					return;
+				}
+			}else if(data == -95){
+				addError("物料采购数量超限!"); 
+				dialogWarn.close(); 
+				result = false;
+				if(url){ 
+					return;
+				}
 			}else{
 				//isSubmitting = false; 
 				dialogWarn.close(); 
@@ -564,7 +591,7 @@ function materialHasPurchase(purchaseId){
 					rows[i].itemCode = rows[i].materialCode;
 					rows[i].itemName = rows[i].materialName;
 					rows[i].specification = rows[i].materialModel;
-					addMaterial(i, rows[i]);
+					addMaterial(i, rows[i], false);
 				}
 				dialog.close();
 				addIdAndName();

+ 5 - 0
src/main/webapp/yw/contract/selectContract.jsp

@@ -118,6 +118,8 @@ function initContractEntryList(){
 	params=params+"&contract_search_type="+encodeURI(encodeURI(contract_search_type));
 	var supplierCode=$("#supplierCode").val();
 	params=params+"&supplierCode="+encodeURI(encodeURI(supplierCode));
+	var noOrder=$("#noOrder").val();
+	params=params+"&noOrder="+noOrder;
 	loadContractEntryList(params);
 }
 function searchByKword(){
@@ -131,6 +133,8 @@ function searchByKword(){
 	params=params+"&contract_search_type="+encodeURI(encodeURI(contract_search_type));
 	var supplierCode=$("#supplierCode").val();
 	params=params+"&supplierCode="+encodeURI(encodeURI(supplierCode));
+	var noOrder=$("#noOrder").val();
+	params=params+"&noOrder="+noOrder;
 	loadContractEntryList(params);
 }
 function f_select() {
@@ -212,6 +216,7 @@ body {
 		<input type="hidden" name="flowOnOff" id="flowOnOff" value="${flowOnOff}" />
 		<input type="hidden" name="supplierCode" id="supplierCode" value="${supplierCode}" />
 		<input type="hidden" name="contract_type" id="contract_type" value="${contract_type}" />
+		<input type="hidden" name="noOrder" id="noOrder" value="${noOrder}" />
 	</div>
 </BODY>
 </HTML>

+ 16 - 6
src/main/webapp/yw/master1_contract/contractEntryList.jsp

@@ -102,9 +102,10 @@
 		                    		+ arr.flowInsId + '&tabid=' + getCurrentTabId()+ '&modelId=' + arr.lModelId
 									+ '\')" class="btn_c" value="表单打印"/></div>';
 								html += '<div class="div_btn"><input type="button" class="btn_c" onclick=\'item("${pageContext.request.contextPath }/MTFlowAction.do?task=toCustomView&insId='+arr.flowInsId+'&state=contractEntryList");\' value="查看流程" /></div>';
-								
-							    html += '<div class="div_btn"><input type="button" onclick=\'createPurchaseOrder("'
-									+ arr.universalid + '");\' class="btn_c" value="生成订单" /></div>';
+								if(!arr.orderNumber){
+									html += '<div class="div_btn"><input type="button" onclick=\'createPurchaseOrder("'
+											+ arr.universalid + '");\' class="btn_c" value="生成订单" /></div>';
+								}
 							}  
 							html += '<div class="div_btn"><input type="button" onclick=\'viewContractStatus('
 							    + arr.universalid
@@ -174,16 +175,25 @@
 	
 	function createPurchaseOrder(id){
 		if (window.confirm("确定生成采购订单?")){ 
+			$.ligerDialog.waitting('正在生成订单,请稍候...');
 			var param={'universalid':id};
-			sendAjaxParam(param,"contractPurchaseOrderAction.do?task=createFromContract",'json',createPurchaseOrderProcess);
+			sendAsyncAjax(param,"contractPurchaseOrderAction.do?task=createFromContract",'json',createPurchaseOrderProcess);
 		}
 	}
 
 	function createPurchaseOrderProcess(data){
+		$.ligerDialog.closeWaitting();
+		search(); 
 		if(data>0){ 
-			addInfo("生成成功!"); 
+			addInfo("生成成功!");   
 		}else{ 
-			addError("生成失败!");
+			if(data == -98){
+				addError("没有物料明细!");  
+			}else if(data == -97){
+				addError("所选合同已被生成采购订单,不能重复生成!");  
+			}else{
+				addError("生成失败!");  
+			} 
 		}
 	}
 </script>

+ 16 - 5
src/main/webapp/yw/master1_contract/contractMyLaunchList.jsp

@@ -118,8 +118,10 @@ function searchByKword(s) {
 			                    		+ arr.flowInsId + '&tabid=' + getCurrentTabId()+ '&modelId=' + arr.lModelId
 										+ '\')" class="btn_c" value="表单打印"/></div>';
 									html += '<div class="div_btn"><input type="button" class="btn_c" onclick=\'item("${pageContext.request.contextPath }/MTFlowAction.do?task=toCustomView&insId='+arr.flowInsId+'&state=contractMyLauchList");\' value="查看流程" /></div>';
-									html += '<div class="div_btn"><input type="button" onclick=\'createPurchaseOrder("'
-										+ arr.universalid + '");\' class="btn_c" value="生成订单" /></div>'; 
+									if(!arr.orderNumber){
+										html += '<div class="div_btn"><input type="button" onclick=\'createPurchaseOrder("'
+												+ arr.universalid + '");\' class="btn_c" value="生成订单" /></div>';
+									}
 								} 
 								html += '<div class="div_btn"><input type="button" onclick=\'viewContractStatus('
 								    + arr.universalid
@@ -281,16 +283,25 @@ function viewflow(insId){
 
 function createPurchaseOrder(id){
 	if (window.confirm("确定生成采购订单?")){ 
+		$.ligerDialog.waitting('正在生成订单,请稍候...');
 		var param={'universalid':id};
-		sendAjaxParam(param,"contractPurchaseOrderAction.do?task=createFromContract",'json',createPurchaseOrderProcess);
+		sendAsyncAjax(param,"contractPurchaseOrderAction.do?task=createFromContract",'json',createPurchaseOrderProcess);
 	}
 }
 
 function createPurchaseOrderProcess(data){
+	$.ligerDialog.closeWaitting();
+	search(); 
 	if(data>0){ 
-		addInfo("生成成功!"); 
+		addInfo("生成成功!");   
 	}else{ 
-		addError("生成失败!");
+		if(data == -98){
+			addError("没有物料明细!");  
+		}else if(data == -97){
+			addError("所选合同已被生成采购订单,不能重复生成!");  
+		}else{
+			addError("生成失败!");  
+		} 
 	}
 }
 </script>