询价事件的业务过程分为两步:询销售价格、通过询价信息(价格+折扣)算金额等。如果需要修改过程中的价格折扣等信息,则第一步完成后则是最好的契机。下面的代码演示了大概的修改方法。
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;
}
}