| 
					
				 | 
			
			
				@@ -0,0 +1,173 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package nc.ui.pu.m25.editor.card.afteredit.body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.itf.scmpub.reference.uap.bd.vat.BuySellFlagEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.itf.scmpub.reference.uap.bd.vat.VATInfoQueryVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.itf.scmpub.reference.uap.bd.vat.VATInfoVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.ui.pu.m25.editor.utils.RelationCalculate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.ui.pu.m25.editor.utils.TaxRateAndTypeUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.ui.pu.m25.rule.InvoiceQueryPriceHandler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.ui.pu.pub.editor.CardEditorHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.ui.pu.pub.editor.card.listener.ICardBodyAfterEditEventListener; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.ui.pub.bill.BillCardPanel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.ui.pubapp.uif2app.view.util.RefMoreSelectedUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pu.m25.entity.InvoiceHeaderVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pu.m25.entity.InvoiceItemVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pu.pub.enumeration.PricePriority; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pu.pub.rule.vat.BillItemVatTaxInfoSetter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pu.pub.rule.vat.TaxValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pu.pub.util.ObjectUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pu.pub.util.PUSysParamUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pub.lang.UFBoolean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pub.lang.UFDate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pubapp.AppContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pubapp.pattern.data.ValueUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import nc.vo.pubapp.scale.ScaleUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.lang.ArrayUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.lang.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * <b>本类主要完成以下功能:</b> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * <ul> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * <li>表体物料编辑后处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * </ul> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @version 6.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @since 6.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author tianft 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @time 2010-3-26 上午10:38:21 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class Material implements ICardBodyAfterEditEventListener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void afterEdit(CardBodyAfterEditEvent event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    RefMoreSelectedUtils utils = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        new RefMoreSelectedUtils(event.getBillCardPanel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    event.getBillCardPanel().getBillModel().setNeedCalculate(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 处理多选情况 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    int[] rows = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        utils.refMoreSelected(event.getRow(), InvoiceItemVO.PK_MATERIAL, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 清空物料 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (rows.length == 1 && ObjectUtil.isEmptyWithTrim(event.getValue())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      event.getBillCardPanel().getBillModel().setNeedCalculate(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 物料编辑时(已经有物料的情况下,单位可能被该动过) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.calculateByNum(event.getBillCardPanel(), rows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // ---------远程调用合并------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 多选处理,询计划价,税率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TaxRateAndTypeUtil util = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        new TaxRateAndTypeUtil(event.getBillCardPanel(), rows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    util.prepare(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 询价远程调用合并 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    InvoiceQueryPriceHandler price = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        new InvoiceQueryPriceHandler(event.getBillCardPanel(), rows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    price.prepareQueryPrice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // VAT信息设置规则的远程调用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TaxValue taxvaluerule = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.getVatValueRule(event.getBillCardPanel(), rows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    taxvaluerule.prepare(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // ---------远程调用合并执行真正的处理--------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // VAT信息设置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.setVatVule(taxvaluerule, event.getBillCardPanel(), rows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 计划价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    util.setPlanPrice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 触发询价,劳务折扣类物料不参与询价!! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    price.handleQueryPrice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    event.getBillCardPanel().getBillModel().setNeedCalculate(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * 编辑物料时重新设置单位,并用主数量联动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @param event 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @param rows 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private void calculateByNum(BillCardPanel panel, int[] rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (ArrayUtils.isEmpty(rows)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ScaleUtils scale = new ScaleUtils(AppContext.getInstance().getPkGroup()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (int row : rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      panel.setBodyValueAt(scale.adjustHslScale("1.00/1.00"), row, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          InvoiceItemVO.VCHANGERATE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    RelationCalculate calc = new RelationCalculate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    calc.calculate(panel, rows, InvoiceItemVO.NNUM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private TaxValue getVatValueRule(BillCardPanel bcp, int[] rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CardEditorHelper invoice = new CardEditorHelper(bcp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    String sendcountry = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        invoice.getHeadStringValue(InvoiceHeaderVO.CSENDCOUNTRYID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    String rececountry = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        invoice.getHeadStringValue(InvoiceHeaderVO.CRECECOUNTRYID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    String taxcountry = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        invoice.getHeadStringValue(InvoiceHeaderVO.CTAXCOUNTRYID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    UFDate billdate = invoice.getHeadUFDateValue(InvoiceHeaderVO.DBILLDATE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Integer fbsflag = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (Integer) invoice.getHeadValue(InvoiceHeaderVO.FBUYSELLFLAG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    String pk_supplier = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        invoice.getHeadStringValue(InvoiceHeaderVO.PK_SUPPLIER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    UFBoolean triatrade = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ValueUtils.getUFBoolean(invoice 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .getHeadValue(InvoiceHeaderVO.BTRIATRADEFLAG)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    String pk_org = invoice.getHeadStringValue(InvoiceHeaderVO.PK_ORG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    VATInfoQueryVO[] vatqvos = new VATInfoQueryVO[rows.length]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (int i = 0; i < rows.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (StringUtils.isBlank(sendcountry) || StringUtils.isBlank(rececountry) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          || StringUtils.isBlank(taxcountry) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          || StringUtils.isBlank(pk_supplier) || null == billdate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          || null == fbsflag) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      String pk_material = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          invoice.getBodyStringValue(rows[i], InvoiceItemVO.PK_MATERIAL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      vatqvos[i] = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          new VATInfoQueryVO(taxcountry, BuySellFlagEnum.valueOf(fbsflag), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              triatrade, sendcountry, rececountry, pk_supplier, pk_material, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              billdate, pk_org); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TaxValue tv = new TaxValue(vatqvos); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tv.prepare(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return tv; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private void setVatVule(TaxValue tv, BillCardPanel bcp, int[] rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CardEditorHelper invoice = new CardEditorHelper(bcp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // VATValueSetProvider puorgbuysellGetter = new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // VATValueSetProvider(invoice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // puorgbuysellGetter.setFbuysellflagPos(PosEnum.head); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    BillItemVatTaxInfoSetter setter = new BillItemVatTaxInfoSetter(invoice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    RelationCalculate calc = new RelationCalculate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tv.process(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    VATInfoVO[] vatinfos = tv.getVatinfos(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    String pk_purchaseorg = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        invoice.getHeadStringValue(InvoiceHeaderVO.PK_PURCHASEORG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    PricePriority pricePriority = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PUSysParamUtil.getPO28For25(pk_purchaseorg) ? PricePriority.TAXPRICE_PRIOR_TO_PRICE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            : PricePriority.PRICE_PRIOR_TO_TAXPRICE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (int i = 0; i < rows.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      VATInfoVO vatvo = vatinfos[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (null == vatvo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      String chgkey = setter.setVatTax(vatvo, rows[i], pricePriority); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (null == chgkey) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      calc.calculate(invoice.getEditor(), new int[] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rows[i] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, chgkey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |