/// <summary> /// Returns the maximum money that a user can spend in a branch without overflowing the maximum money constraint in any group /// </summary> /// <param name="tree"></param> /// <param name="groupId"></param> /// <param name="money"></param> /// <returns>bool</returns> public bool GetBranchMaxAvailableMoney(long groupId, ref long money, bool isComputeEx1 = false) { trace?.Write(TraceLevel.Debug, "CM1GroupTree::GetBranchMaxAvailableMoney"); bool fnResult = true; try { CM1Group treeGroup = GetGroupFromGrpId(groupId); if (treeGroup == null) { throw new ArgumentNullException(nameof(groupId), "Could not obtain group of current operation"); } long lGrpAccMoney = 0; long lGrpMaxMoney = 0; money = 999999999; while (treeGroup != null) { lGrpAccMoney = (isComputeEx1) ? treeGroup.GetRealAccMoney() : treeGroup.GetAccMoney(); lGrpMaxMoney = treeGroup.GetMaxMoney(); if (lGrpMaxMoney != GlobalDefs.DEF_UNDEFINED_VALUE) { money = Math.Min(lGrpMaxMoney - lGrpAccMoney, money); } treeGroup = GetGroupParent(treeGroup.GetGrpId()); } trace?.Write(TraceLevel.Info, $"Money left for branch of group {groupId}: {money}"); } catch (Exception error) { trace?.Write(TraceLevel.Error, error.ToLogString()); fnResult = false; } return(fnResult); }