【发布时间】:2015-09-15 21:52:17
【问题描述】:
我在分配模块 (SO303000) 中为发票创建扩展。我需要在根据当前发票发布付款时自动创建付款。通过使用以下代码,我已成功使用单张发票
public PXAction<ARInvoice> release;
[PXUIField(DisplayName = "Release", Visible = false)]
[PXButton()]
public IEnumerable Release(PXAdapter adapter)
{
Base.Release(adapter);
PXLongOperation.WaitCompletion(Base.UID);
ARPaymentEntry arPaymentEntry = PXGraph.CreateInstance<ARPaymentEntry>();
ARPayment payment = arPaymentEntry.Document.Insert();
payment.CustomerID = Base.Document.Current.CustomerID;
payment.CustomerLocationID = Base.Document.Current.CustomerLocationID;
payment.PaymentMethodID = "TM";
Branch branch = PXSelect<Branch>.Select(new PXGraph());
CashAccount ca =
PXSelect<CashAccount, Where<CashAccount.branchID, Equal<Required<CashAccount.branchID>>>>
.Select
(new PXGraph(),
branch.BranchID).FirstTableItems.FirstOrDefault();
if (ca != null)
{
payment.CashAccountID = ca.CashAccountID;
}
else
{
throw new PXException("Cannot find the Cash Account.");
}
payment.ExtRefNbr = "Auto";
payment.Hold = false;
payment.CuryOrigDocAmt = Base.Document.Current.CuryLineTotal;
arPaymentEntry.Document.Current = payment;
arPaymentEntry.Document.Cache.Update(arPaymentEntry.Document.Current);
ARAdjust arAdjust = new ARAdjust();
arAdjust.AdjdRefNbr = Base.Document.Current.RefNbr;
arAdjust.AdjgRefNbr = arPaymentEntry.Document.Current.RefNbr;
arAdjust.AdjgDocType = arPaymentEntry.Document.Current.DocType;
arAdjust.AdjdDocType = Base.Document.Current.DocType;
arAdjust.CustomerID = Base.Document.Current.CustomerID;
arAdjust.AdjdBranchID = branch.BranchID;
arAdjust.AdjgBranchID = branch.BranchID;
arAdjust.AdjdDocDate = Base.Document.Current.DocDate;
arAdjust.AdjdFinPeriodID = Base.Document.Current.FinPeriodID;
arAdjust.Released = false;
arAdjust.Voided = false;
arPaymentEntry.Adjustments.Insert(arAdjust);
ARAdjust arAdjusted = (ARAdjust) arPaymentEntry.Adjustments.Update(arAdjust);
arPaymentEntry.Adjustments.Current = arAdjusted;
var arAdapter =
new PXAdapter(new DummyView(arPaymentEntry, arPaymentEntry.Document.View.BqlSelect,
new List<object> {arPaymentEntry.Document.Current}))
{
};
arPaymentEntry.Save.Press();
arPaymentEntry.Release(arAdapter);
}
。但在处理发票和付款屏幕 (SO505000)。我必须将我的代码更改为该代码,因为在页面 SO505000 中进行处理时,它们会将列表传递给适配器,因此我需要使用循环。我想使用 PXLongOperation.WaitCompletion 来确定是否发布了哪个发票。
public PXAction<ARInvoice> release;
[PXUIField(DisplayName = "Release", Visible = false)]
[PXButton()]
public IEnumerable Release(PXAdapter adapter)
{
var list = Base.Release(adapter);
var invList = adapter.Get<ARInvoice>();
foreach (var inv in invList)
{
ARPaymentEntry arPaymentEntry = PXGraph.CreateInstance<ARPaymentEntry>();
ARPayment payment = arPaymentEntry.Document.Insert();
payment.CustomerID = inv.CustomerID;
payment.CustomerLocationID = inv.CustomerLocationID;
payment.PaymentMethodID = "TM";
Branch branch = PXSelect<Branch>.Select(new PXGraph());
CashAccount ca =
PXSelect
<CashAccount, Where<CashAccount.branchID, Equal<Required<CashAccount.branchID>>>>
.Select
(new PXGraph(),
branch.BranchID).FirstTableItems.FirstOrDefault();
if (ca != null)
{
payment.CashAccountID = ca.CashAccountID;
}
else
{
throw new PXException("Cannot find the Cash Account.");
}
payment.ExtRefNbr = "Auto";
payment.Hold = false;
payment.CuryOrigDocAmt = inv.CuryLineTotal;
arPaymentEntry.Document.Current = payment;
arPaymentEntry.Document.Cache.Update(arPaymentEntry.Document.Current);
//arPaymentEntry.Save.Press();
ARAdjust arAdjust = new ARAdjust();
arAdjust.AdjdRefNbr = inv.RefNbr;
arAdjust.AdjgRefNbr = inv.RefNbr;
arAdjust.AdjgDocType = inv.DocType;
arAdjust.AdjdDocType = inv.DocType;
arAdjust.CustomerID = inv.CustomerID;
arAdjust.AdjdBranchID = branch.BranchID;
arAdjust.AdjgBranchID = branch.BranchID;
arAdjust.AdjdDocDate = inv.DocDate;
arAdjust.AdjdFinPeriodID = inv.FinPeriodID;
arAdjust.Released = false;
arAdjust.Voided = false;
arPaymentEntry.Adjustments.Insert(arAdjust);
ARAdjust arAdjusted = (ARAdjust) arPaymentEntry.Adjustments.Update(arAdjust);
arPaymentEntry.Adjustments.Current = arAdjusted;
var arAdapter =
new PXAdapter(new DummyView(arPaymentEntry, arPaymentEntry.Document.View.BqlSelect,
new List<object> {arPaymentEntry.Document.Current}))
{
};
arPaymentEntry.Save.Press();
arPaymentEntry.Release(arAdapter);
}
}
感谢您的支持。
【问题讨论】: