// OPERATIONS /// <summary> /// Returns the maximum minutes that a user can spend in a branch without overflowing the maximum money constraint in any group /// </summary> /// <param name="groupId"></param> /// <param name="minutes"></param> /// <returns>bool</returns> public bool GetBranchMaxAvailableMinutes(long groupId, ref long minutes, 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 lGrpAccMinutes = 0; long lGrpMaxMinutes = 0; minutes = 999999999; while (treeGroup != null) { if (isComputeEx1) { lGrpAccMinutes = treeGroup.GetRealAccMinutes(); } else { lGrpAccMinutes = treeGroup.GetAccMinutes(); } lGrpMaxMinutes = treeGroup.GetMaxMinutes(); if (lGrpMaxMinutes != GlobalDefs.DEF_UNDEFINED_VALUE) { minutes = Math.Min(lGrpMaxMinutes - lGrpAccMinutes, minutes); } treeGroup = GetGroupParent(treeGroup.GetGrpId()); } trace?.Write(TraceLevel.Info, $"Minutes left for branch of group {groupId}: {minutes}"); } catch (Exception error) { trace?.Write(TraceLevel.Error, error.ToLogString()); fnResult = false; } return(fnResult); }