詢價事件的業務過程分爲兩步:詢銷售價格、通過詢價信息(價格+折扣)算金額等。如果需要修改過程中的價格折扣等信息,則第一步完成後則是最好的契機。下面的代碼演示了大概的修改方法。
public class so001ClientUIPlugin extends ScmUIPluginBase {
@SuppressWarnings({ "restriction", "deprecation" })
@Override
public void afterEdit(BillEditEvent e, SCMUIContext ctx) {
if (e.getKey().equals("nnumber")) {
// ctx.getBillCardPanel().getBillValueVO(SaleOrderVO., headVOName, bodyVOName);
SaleorderBVO[] SaleorderBVOs = (SaleorderBVO[]) ctx.getBillCardPanel().getBillData().getBodyValueVOs(SaleorderBVO.class.getName());
SaleorderBVO saleorderBVO=SaleorderBVOs[e.getRow()];
SaleorderHVO saleorderHVO=(SaleorderHVO) ctx.getBillCardPanel().getBillData().getHeaderValueVO(SaleorderHVO.class.getName());
SaleOrderVO SaleOrderVO= (nc.vo.so.so001.SaleOrderVO) ctx.getBillCardPanel().getBillData().getBillValueVO(SaleOrderVO.class.getName(), SaleorderHVO.class.getName(), SaleorderBVO.class.getName());
SalePriceVO salePriceVO = GetPriceParam(saleorderBVO,saleorderHVO,SaleOrderVO);
//必填項(存貨,客戶,計量單位,幣種,單據日期,公司)
IFindSalePriceQuery m_fundprm = (IFindSalePriceQuery) NCLocator.getInstance().lookup(IFindSalePriceQuery.class.getName());
if (m_fundprm != null) {
try {
//詢價
PriceAskResultVO vo = (PriceAskResultVO) m_fundprm.findPrice(salePriceVO);
// 設置原始的尋價單價、淨價
saleorderBVO.setNqtorgtaxprc(vo.getNum());
saleorderBVO.setNqtorgtaxnetprc(vo.getNetNum());
// 設置報價進行計算
saleorderBVO.setNorgqttaxprc(vo.getNum());//這裏可以替換自己的單價
saleorderBVO.setNitemdiscountrate(vo.getDiscount());//這裏可以替換自己的折扣
//計算金額等其他信息
Object oRet = SCMRelationsCal.calculate(saleorderBVO,saleorderHVO,SaleorderBVO.getCalculatePara("norgqttaxprc", null, UFBoolean.TRUE, "調整折扣"),
"norgqttaxprc", SaleorderBVO.getKeys(), SaleorderBVO.getField(),null);
ctx.getBillCardPanel().getBillModel().setBodyRowVO((CircularlyAccessibleValueObject) oRet, e.getRow());
} catch (BusinessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
public SalePriceVO GetPriceParam(SaleorderBVO saleorderBVO,SaleorderHVO saleorderHVO,SaleOrderVO saleOrderVO) {
String sInv =saleorderBVO.getCinventoryid();
if (sInv == null || sInv.toString().trim().length() == 0)
return null;
//設置查詢參數0
SalePriceVO salepriceVO = new SalePriceVO();
//公司ID(當前公司)
salepriceVO.setCropID(saleOrderVO.getPk_corp());
//業務類型
salepriceVO.setBizTypeID(saleOrderVO.getBusitypePK());
//客戶ID
salepriceVO.setCustomerID(saleorderHVO.getCcustomerid());
//客戶基礎ID
salepriceVO.setCustomerBaseID(saleorderHVO.getCccustbasid());
//客戶分組
String cchantypeid ="";
if (!SoVoTools.isEmptyString(cchantypeid)
&& !"null".equals(cchantypeid.trim())) {
salepriceVO.setCustomerClass(cchantypeid);
} else {
salepriceVO.setCustomerClass(null);
}
salepriceVO.setBuseBaseStrict(Boolean.FALSE);
//部門ID
salepriceVO.setDeptid(saleorderHVO.getCdeptid());
//銷售組織
salepriceVO.setSaleStrucid(saleorderHVO.getCsalecorpid());
//系統日期
Object date = saleorderHVO.getDbilldate();
//存貨ID
salepriceVO.setInventoryID(saleorderBVO.getCinventoryid());
//詢價計量單位
salepriceVO.setMeasdocid(saleorderBVO.getCquoteunitid());
//存貨基礎ID
salepriceVO.setInventoryBaseID(saleorderBVO.getCinvbasdocid());
//幣種ID
salepriceVO.setCurrencyID(saleorderBVO.getCcurrencytypeid());
//數量
salepriceVO.setNumber(saleorderBVO.getNquoteunitnum());
return salepriceVO;
}
}