public bool IsEnable(object Sender, object Element) { bool retval = true; if (Element is CommandParameters) { CommandParameters cp = (CommandParameters)Element; DateTime startDate = DateTime.Parse(cp.CommandArguments["primaryKeyId"], CultureInfo.InvariantCulture); WeekItemInfo[] mas = Mediachase.IBN.Business.TimeTracking.GetWeekItemsForCurrentUser(startDate, startDate.AddDays(6)); if (mas.Length > 0) { WeekItemInfo wii = mas[0]; if (wii.Status == WeekItemStatus.NotCompleted) { return(false); } } } return(retval); }
private static void CalculateDayTotal(DateTime currentWeekStart, WeekItemInfo item, TimeTrackingBlock[] userBlocks) { DateTime currentWeekEnd = currentWeekStart.AddDays(7); foreach (TimeTrackingBlock block in userBlocks) { // Process if block.StartDate IN [currentWeekStart, currentWeekStart) if (block.StartDate < currentWeekStart) continue; if (block.StartDate >= currentWeekEnd) continue; item.Day1 += block.Day1; item.Day2 += block.Day2; item.Day3 += block.Day3; item.Day4 += block.Day4; item.Day5 += block.Day5; item.Day6 += block.Day6; item.Day7 += block.Day7; } }
/// <summary> /// Gets the week items for user. /// </summary> /// <param name="from">From.</param> /// <param name="to">To.</param> /// <param name="userId">The user id.</param> /// <returns></returns> public static WeekItemInfo[] GetWeekItemsForUser(DateTime from, DateTime to, int userId) { List<WeekItemInfo> retVal = new List<WeekItemInfo>(); // Load User TT blocks TimeTrackingBlock[] userBlocks = TimeTrackingBlock.List(FilterElement.EqualElement("OwnerId", userId), new IntervalFilterElement("StartDate", from, to)); // Sort Block By Start Date Array.Sort<TimeTrackingBlock>(userBlocks, CompareTimeTrackingBlockByStartDate); // Create Week Item Info list DateTime currentWeekStart = GetRealWeekStart(from); // TODO: Current while (currentWeekStart < to) { // Calculate aggregated status of all blocks WeekItemStatus status = CalculateWeekStatusByBlocks(currentWeekStart, userBlocks); WeekItemInfo item = new WeekItemInfo(currentWeekStart, Iso8601WeekNumber.GetWeekNumber(currentWeekStart.AddDays(3)), status); CalculateDayTotal(currentWeekStart, item, userBlocks); retVal.Add(item); // Go to next week currentWeekStart = currentWeekStart.AddDays(7); } return retVal.ToArray(); }