public bool GetBranchEfecAccumMoney(long lGroup, ref long m_lRealAccMoney)
        {
            trace.Write(TraceLevel.Debug, "CM1GroupTree::GetBranchAccumMoney");
            bool fnResult = true;

            try
            {
                CM1Group group = GetGroupFromGrpId(lGroup);
                if (group == null)
                {
                    throw new InvalidOperationException("Could not obtain group of current operation");
                }

                long lGrpAccMoney = 0;
                m_lRealAccMoney = 0;

                while (group != null)
                {
                    lGrpAccMoney    = group.GetEfecAccMoney();
                    m_lRealAccMoney = Math.Max(lGrpAccMoney, m_lRealAccMoney);
                    group           = GetGroupParent(group.GetGrpId());
                }

                trace.Write(TraceLevel.Info, $"Money accumulate for branch of group {lGroup}: {m_lRealAccMoney}");
            }
            catch (Exception error)
            {
                trace.Write(TraceLevel.Error, error.ToLogString());
                fnResult = false;
            }

            return(fnResult);
        }
        public bool GetBranchMinMoney(long groupId, ref long money, bool isComputeEx1 = false)
        {
            trace.Write(TraceLevel.Debug, "CM1GroupsTree::GetBranchMinMoney");
            bool fnResult = true;

            try
            {
                // Get group object of the group of the operation to evaluate
                CM1Group pGrp = GetGroupFromGrpId(groupId);

                if (pGrp == null)
                {
                    throw  new InvalidOperationException("Could not obtain group of current operation");
                }

                long lGrpAccMoney = 0;
                long lGrpMinMoney = 0;
                money = -1;

                while (pGrp != null)
                {
                    lGrpAccMoney = (isComputeEx1) ? pGrp.GetEfecAccMoney() : pGrp.GetAccMoney();
                    lGrpMinMoney = pGrp.GetMinMoney();

                    if (lGrpMinMoney == GlobalDefs.DEF_UNDEFINED_VALUE || lGrpMinMoney < lGrpAccMoney)
                    {
                        lGrpMinMoney = 0;
                    }
                    else
                    {
                        lGrpMinMoney -= lGrpAccMoney;
                    }

                    money = Math.Max(lGrpMinMoney, money);

                    pGrp = GetGroupParent(pGrp.GetGrpId());
                }
                trace.Write(TraceLevel.Info, $"Min. money for branch of group {groupId}: {money}");
            }
            catch (Exception error)
            {
                trace.Write(TraceLevel.Error, error.ToLogString());
                fnResult = false;
            }

            return(fnResult);
        }