예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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;
            }
        }
예제 #3
0
        /// <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);
            }
        }
예제 #4
0
        /// <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;
            }
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        /// <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;
            }
        }