acumatica - 如何修改流程准备发票
问题描述
我一直在图表上寻找一种方法来实现这一点,但我不知道从哪里开始。我需要有人告诉我通过什么事件我可以实现所陈述的内容。
- 在任何给定的一天或一周内,可能会有多次交付或取货的材料成为引用不同项目的客户的销售订单。客户 A 一周内有 5 个销售订单,地点、条款和税区相同,并且没有采购订单/客户订单编号。2 个用于项目 1234,3 个用于项目 5678。当我们处理“准备发票”时,我们需要创建 2 个发票,1 个用于项目 1234,1 个用于项目 5678。当前逻辑将为所有 5 个订单创建一张发票。
提前致谢。
解决方案
如果你做一些调查,你会注意到一些事情。
首先Orders
是网格数据视图。
浏览该屏幕的源代码,您会注意到该数据视图有一个数据视图委托orders
,其调用如下:
public virtual IEnumerable orders()
{
// ... //
PXSelectBase<SOOrder> cmd = GetSelectCommand(filter);
// ... //
}
该方法GetSelectCommand(filter)
定义如下:
protected virtual PXSelectBase<SOOrder> GetSelectCommand(SOOrderFilter filter)
{
PXSelectBase<SOOrder> cmd;
switch (filter.Action)
{
// ... //
case WellKnownActions.SOOrderScreen.PrepareInvoice:
cmd = BuildCommandPrepareInvoice();
break;
// ... //
}
return cmd;
}
该方法BuildCommandPrepareInvoice()
是这样定义的,它进一步过滤了返回的订单:
protected virtual PXSelectBase<SOOrder> BuildCommandPrepareInvoice()
{
var cmd =
new PXSelectJoinGroupBy<SOOrder,
InnerJoin<SOOrderType, On<SOOrderType.orderType, Equal<SOOrder.orderType>, And<SOOrderType.aRDocType, NotEqual<ARDocType.noUpdate>>>,
LeftJoin<Carrier, On<SOOrder.shipVia, Equal<Carrier.carrierID>>,
LeftJoin<SOOrderShipment, On<SOOrderShipment.orderType, Equal<SOOrder.orderType>, And<SOOrderShipment.orderNbr, Equal<SOOrder.orderNbr>>>,
LeftJoinSingleTable<ARInvoice, On<ARInvoice.docType, Equal<SOOrderShipment.invoiceType>, And<ARInvoice.refNbr, Equal<SOOrderShipment.invoiceNbr>>>,
LeftJoinSingleTable<Customer, On<SOOrder.customerID, Equal<Customer.bAccountID>>>>>>>,
Where<SOOrder.hold, Equal<boolFalse>, And<SOOrder.cancelled, Equal<boolFalse>,
And<Where<Customer.bAccountID, IsNull, Or<Match<Customer, Current<AccessInfo.userName>>>>>>>,
Aggregate<
GroupBy<SOOrder.orderType,
GroupBy<SOOrder.orderNbr,
GroupBy<SOOrder.approved>>>>>(this);
if (PXAccess.FeatureInstalled<FeaturesSet.inventory>())
{
cmd.WhereAnd<
Where<Sub<Sub<Sub<SOOrder.shipmentCntr,
SOOrder.openShipmentCntr>,
SOOrder.billedCntr>,
SOOrder.releasedCntr>, Greater<short0>,
Or2<Where<SOOrder.orderQty, Equal<decimal0>,
And<SOOrder.curyUnbilledMiscTot, Greater<decimal0>>>,
Or<Where<SOOrderType.requireShipping, Equal<boolFalse>, And<ARInvoice.refNbr, IsNull>>>>>>();
}
else
{
cmd.WhereAnd<
Where<SOOrder.curyUnbilledMiscTot, Greater<decimal0>, And<SOOrderShipment.shipmentNbr, IsNull,
Or<Where<SOOrderType.requireShipping, Equal<boolFalse>, And<ARInvoice.refNbr, IsNull>>>>>>();
}
return cmd;
}
我相信您可以使用定义您要查找的内容的方法来覆盖此方法,特别是最后一部分。
我意识到这不是一个可行的答案;但是,我希望它会有所帮助。
推荐阅读
- bazel - 将 Bazel 目标限制为特定平台
- android - 在共享首选项中保留显式数据与二进制数据(性能)
- xamarin.forms - 具有透明背景的 Xamarin.iOS 屏幕截图
- metal - 无法使用 MTKTextureLoader 将大型 jpeg 加载到 MTLTexture
- r - vif,多重共线性,as.vector(y) 中的错误 - mean(y):二元运算符的非数字参数,
- mysql - Mysql查询如何加速
- java - java中的链表节点类数据结构
- javascript - 类型脚本 BeforeUnloadEvent 未触发
- python - 几个对象的Json对象
- java - 如何从句子中的arraylist中获取任何单词第一次出现的索引