diff --git a/pu/src/private/nc/impl/pu/m23/approve/rule/ChkCanUnApproveRule.java b/pu/src/private/nc/impl/pu/m23/approve/rule/ChkCanUnApproveRule.java new file mode 100644 index 0000000..7c383c6 --- /dev/null +++ b/pu/src/private/nc/impl/pu/m23/approve/rule/ChkCanUnApproveRule.java @@ -0,0 +1,138 @@ +package nc.impl.pu.m23.approve.rule; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.itf.pu.reference.ic.M45PUServices; +import nc.itf.pu.reference.ic.M47PUServices; +import nc.vo.ml.NCLangRes4VoTransl; +import nc.vo.pu.m23.entity.ArriveItemVO; +import nc.vo.pu.m23.entity.ArriveVO; +import nc.vo.pu.pub.util.ApproveFlowUtil; +import nc.vo.pub.lang.UFBoolean; +import nc.vo.pub.lang.UFDouble; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.pub.MathTool; +import nc.vo.scmpub.res.billtype.IBillType; +import nc.vo.scmpub.res.billtype.POBillType; +import nc.vo.scmpub.res.billtype.SCBillType; + + +public class ChkCanUnApproveRule + extends Object + implements IRule +{ + public void process(ArriveVO[] voArray) { + for (ArriveVO aggVO : voArray) + { + chkCanUnApprove(aggVO); + } + + checkHasPurchaseIn(voArray); + + checkHasSubcontIn(voArray); + } + + private void checkHasPurchaseIn(ArriveVO[] vos) { + List hidLst = getHIDSourceFrom(vos, POBillType.Order); + if (hidLst.size() == 0) { + return; + } + Map hidMap = M45PUServices.getMapBysrcHid((String[])hidLst + .toArray(new String[hidLst.size()])); + if (null == hidMap || hidMap.size() == 0) { + return; + } + for (UFBoolean value : hidMap.values()) { + if (UFBoolean.TRUE.equals(value)) { + throwHasStoreInExp(); + } + } + } + + private void checkHasSubcontIn(ArriveVO[] vos) { + List hidLst = getHIDSourceFrom(vos, SCBillType.Order); + if (hidLst.size() == 0) { + return; + } + if (M47PUServices.hasFromSource(hidLst)) { + throwHasStoreInExp(); + } + } + + + private void chkCanUnApprove(ArriveVO aggVO) { + if (!ApproveFlowUtil.isCanUnApprove(aggVO)) { + String message = NCLangRes4VoTransl.getNCLangRes().getStrByID("4004040_0", "04004040-0122"); + ExceptionUtils.wrappBusinessException(message); + } + + ArriveItemVO[] itemVOArray = aggVO.getBVO(); + for (int i = 0; i < itemVOArray.length; i++) { + + if (MathTool.nvl(itemVOArray[i].getNaccumstorenum()).doubleValue() > 0.0D) { + throwHasStoreInExp(); + } + if (itemVOArray[i].getBfaflag().booleanValue()) + { + ExceptionUtils.wrappBusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("4004040_0", "04004040-0124")); + } + + if (MathTool.nvl(itemVOArray[i].getNaccumreplnum()).doubleValue() > 0.0D) + { + ExceptionUtils.wrappBusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("4004040_0", "04004040-0125")); + } + + if (aggVO.getHVO().getBisback() == null || !aggVO.getHVO().getBisback().booleanValue()) + { + if (MathTool.nvl(itemVOArray[i].getNaccumchecknum()) + .doubleValue() > 0.0D) + { + ExceptionUtils.wrappBusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("4004040_0", "04004040-0126")); + } + } + + if (MathTool.nvl(itemVOArray[i].getNaccumletgonum()).doubleValue() > 0.0D) + { + ExceptionUtils.wrappBusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("4004040_0", "04004040-0127")); + } + + if (UFBoolean.TRUE.equals(itemVOArray[i].getBtransasset())) + { + ExceptionUtils.wrappBusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("4004040_0", "04004040-0128")); + } + + if (itemVOArray[i].getNaccumbacknum() != null && + !UFDouble.ZERO_DBL.equals(itemVOArray[i] + .getNaccumbacknum())) + { + ExceptionUtils.wrappBusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("4004040_0", "04004040-0192")); + } + } + } + + private List getHIDSourceFrom(ArriveVO[] vos, IBillType bt) { + List hidLst = new ArrayList(); + for (ArriveVO vo : vos) { + for (ArriveItemVO item : vo.getBVO()) { + if (bt.getCode().equals(item.getCsourcetypecode())) { + hidLst.add(item.getPk_arriveorder()); + break; + } + } + } + return hidLst; + } + + private void throwHasStoreInExp() { + ExceptionUtils.wrappBusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("4004040_0", "04004040-0123")); + } +}