public override object Execute(Dictionary <string, object> arguments) { var currentUser = SecurityContext.CurrentUser; if (currentUser == null) { return(null); } var userOpenTasks = new List <EntityRecord>(); var searchQuery = (string)arguments["search_query"]; { var eqlCommand = "SELECT * from task WHERE owner_id = @userId AND (start_date >= @currentDate OR x_billable_minutes > 0 OR x_nonbillable_minutes > 0) "; var eqlParams = new List <EqlParameter>() { new EqlParameter("userId", currentUser.Id) }; eqlParams.Add(new EqlParameter("currentDate", new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0))); if (!String.IsNullOrWhiteSpace(eqlCommand)) { eqlCommand += " AND x_search CONTAINS @search"; eqlParams.Add(new EqlParameter("search", searchQuery)); } userOpenTasks = new EqlCommand(eqlCommand, eqlParams).Execute(); } var userTimelogs = new List <EntityRecord>(); { var eqlCommand = "SELECT * from timelog WHERE created_by = @userId"; var eqlParams = new List <EqlParameter>() { new EqlParameter("userId", currentUser.Id) }; userTimelogs = new EqlCommand(eqlCommand, eqlParams).Execute(); } foreach (var task in userOpenTasks) { task.Properties.Add("logged_minutes", (int)0); task.Properties.Add("last_logged_on", (DateTime)DateTime.MinValue); var taskTimelogs = userTimelogs.FindAll(x => (x["l_related_records"] == null ? "" : (string)x["l_related_records"]).Contains(task["id"].ToString())).ToList(); if (taskTimelogs.Count > 0) { task["logged_minutes"] = (int)(taskTimelogs.Select(x => (decimal)x["minutes"]).Aggregate(func: (aggrResult, x) => aggrResult + x)); var lastLog = taskTimelogs.OrderByDescending(x => (DateTime)x["created_on"]).FirstOrDefault(); if (lastLog != null) { task["last_logged_on"] = (DateTime)lastLog["created_on"]; } } } return(userOpenTasks.OrderByDescending(x => (DateTime?)x["timelog_started_on"]).ThenByDescending(x => (DateTime)x["last_logged_on"]).ToList()); }