/// <summary> /// Handles the CA transaction detail <see cref="ICATranDetail.AccountID"/> field updated event. /// </summary> /// <param name="tranDetailsCache">The transaction details cache.</param> /// <param name="e">Field updated event arguments.</param> public static void OnAccountIdFieldUpdatedEvent(PXCache tranDetailsCache, PXFieldUpdatedEventArgs e) { ICATranDetail tranDetail = e.Row as ICATranDetail; if (tranDetail == null) { return; } Account glAccount = PXSelect <Account, Where <Account.accountID, Equal <Required <Account.accountID> > > > .Select(tranDetailsCache.Graph, tranDetail.AccountID); if (glAccount?.IsCashAccount != true) { return; } CashAccount cashAccount = GetCashAccount(tranDetailsCache.Graph, glAccount.AccountID, tranDetail.SubID, tranDetail.BranchID, doSearchWithSubsetsOfArgs: true); if (cashAccount != null) { tranDetailsCache.SetValueExt(tranDetail, nameof(ICATranDetail.BranchID), cashAccount.BranchID); tranDetailsCache.SetValueExt(tranDetail, nameof(ICATranDetail.SubID), cashAccount.SubID); } }
/// <summary> /// Handles the CA transaction detail row updating event. /// </summary> /// <param name="tranDetailsCache">The transaction details cache.</param> /// <param name="e">Row updating event arguments.</param> public static void OnCATranDetailRowUpdatingEvent(PXCache tranDetailsCache, PXRowUpdatingEventArgs e) { ICATranDetail oldTranDetail = e.Row as ICATranDetail; ICATranDetail newTranDetail = e.NewRow as ICATranDetail; if (newTranDetail == null || tranDetailsCache == null) { return; } UpdateNewTranDetailCuryTranAmtOrCuryUnitPrice(tranDetailsCache, oldTranDetail, newTranDetail); if (newTranDetail.AccountID == null) { return; } Account currentAcc = PXSelect <Account, Where <Account.accountID, Equal <Required <Account.accountID> > > > . Select(tranDetailsCache.Graph, newTranDetail.AccountID); if (currentAcc?.IsCashAccount != true) { return; } CashAccount cashAccount = GetCashAccount(tranDetailsCache.Graph, newTranDetail.AccountID, newTranDetail.SubID, newTranDetail.BranchID, doSearchWithSubsetsOfArgs: false); if (cashAccount == null) { PXSetPropertyException exception = new PXSetPropertyException(Messages.NoCashAccountForBranchAndSub, PXErrorLevel.Error); string branchCD = (string)PXSelectorAttribute.GetField(tranDetailsCache, newTranDetail, nameof(ICATranDetail.BranchID), newTranDetail.BranchID, typeof(Branch.branchCD).Name); string subCD = (string)PXSelectorAttribute.GetField(tranDetailsCache, newTranDetail, nameof(ICATranDetail.SubID), newTranDetail.SubID, typeof(Sub.subCD).Name); tranDetailsCache.RaiseExceptionHandling(nameof(ICATranDetail.BranchID), newTranDetail, branchCD, exception); tranDetailsCache.RaiseExceptionHandling(nameof(ICATranDetail.SubID), newTranDetail, subCD, exception); e.Cancel = true; } }
/// <summary> /// Handles the CA transaction detail <see cref="ICATranDetail.CashAccountId"/> field verifying event. /// </summary> /// <param name="tranDetailsCache">The transaction details cache.</param> /// <param name="e">Field verifying event arguments.</param> /// <param name="curCashAccountID">Identifier for the current cash account.</param> public static void OnCashAccountIdFieldVerifyingEvent(PXCache tranDetailsCache, PXFieldVerifyingEventArgs e, int?curCashAccountID) { ICATranDetail tranDetail = e.Row as ICATranDetail; if (tranDetail == null) { return; } CashAccount offsetCashAccount = PXSelect <CashAccount, Where <CashAccount.cashAccountID, Equal <Required <CashAccount.cashAccountID> > > > .Select(tranDetailsCache.Graph, e.NewValue); if (offsetCashAccount != null && offsetCashAccount.AccountID == curCashAccountID) { e.NewValue = offsetCashAccount.CashAccountCD; throw new PXSetPropertyException(Messages.OffsetAccountMayNotBeTheSameAsCurrentAccount, PXErrorLevel.Error); } }
/// <summary> /// Handles the CA transaction detail <see cref="ICATranDetail.CashAccountID"/> field defaulting event. /// </summary> /// <param name="tranDetailsCache">The transaction details cache.</param> /// <param name="e">Field defaulting event arguments.</param> public static void OnCashAccountIdFieldDefaultingEvent(PXCache tranDetailsCache, PXFieldDefaultingEventArgs e) { ICATranDetail tranDetail = e.Row as ICATranDetail; if (tranDetail == null || tranDetail.CashAccountID != null) { return; } CashAccount cashAccount = PXSelect <CashAccount, Where <CashAccount.accountID, Equal <Required <CABankTranDetail.accountID> >, And <CashAccount.subID, Equal <Required <CABankTranDetail.subID> >, And <CashAccount.branchID, Equal <Required <CABankTranDetail.branchID> > > > > > .Select(tranDetailsCache.Graph, tranDetail.AccountID, tranDetail.SubID, tranDetail.BranchID); if (cashAccount != null) { e.NewValue = cashAccount.CashAccountCD; } }
/// <summary> /// Handles the CA transaction detail <see cref="ICATranDetail.CashAccountID"/> field updated event. /// </summary> /// <param name="tranDetailsCache">The transaction details cache.</param> /// <param name="e">Field updated event arguments.</param> public static void OnCashAccountIdFieldUpdatedEvent(PXCache tranDetailsCache, PXFieldUpdatedEventArgs e) { ICATranDetail tranDetail = e.Row as ICATranDetail; if (tranDetail == null || tranDetail.CashAccountID == (int?)e.OldValue) { return; } CashAccount offsetCashAcct = null; if (tranDetail.CashAccountID != null) { offsetCashAcct = PXSelectReadonly <CashAccount, Where <CashAccount.cashAccountID, Equal <Required <CashAccount.cashAccountID> > > > .Select(tranDetailsCache.Graph, tranDetail.CashAccountID); } tranDetailsCache.SetValue(tranDetail, nameof(ICATranDetail.AccountID), offsetCashAcct?.AccountID); tranDetailsCache.SetValue(tranDetail, nameof(ICATranDetail.SubID), offsetCashAcct?.SubID); tranDetailsCache.SetValue(tranDetail, nameof(ICATranDetail.BranchID), offsetCashAcct?.BranchID); }
/// <summary> /// Updates the new transaction detail CuryTranAmt or CuryUnitPrice. /// </summary> /// <param name="tranDetailsCache">The transaction details cache.</param> /// <param name="oldTranDetail">The old transaction detail.</param> /// <param name="newTranDetail">The new transaction detail.</param> public static void UpdateNewTranDetailCuryTranAmtOrCuryUnitPrice(PXCache tranDetailsCache, ICATranDetail oldTranDetail, ICATranDetail newTranDetail) { if (tranDetailsCache == null || newTranDetail == null) { return; } bool priceChanged = (oldTranDetail?.CuryUnitPrice ?? 0m) != (newTranDetail.CuryUnitPrice ?? 0m); bool amtChanged = (oldTranDetail?.CuryTranAmt ?? 0m) != (newTranDetail.CuryTranAmt ?? 0m); bool qtyChanged = (oldTranDetail?.Qty ?? 0m) != (newTranDetail.Qty ?? 0m); if (amtChanged) { if (newTranDetail.Qty != null && newTranDetail.Qty != 0m) { decimal curyUnitPriceToRound = (newTranDetail.CuryTranAmt ?? 0m) / newTranDetail.Qty.Value; newTranDetail.CuryUnitPrice = PXCurrencyAttribute.RoundCury(tranDetailsCache, newTranDetail, curyUnitPriceToRound); } else { newTranDetail.CuryUnitPrice = newTranDetail.CuryTranAmt; newTranDetail.Qty = 1.0m; } } else if (priceChanged || qtyChanged) { newTranDetail.CuryTranAmt = newTranDetail.Qty * newTranDetail.CuryUnitPrice; } }