public IEnumerable <TreeViewTask> GetListTree(List <Data.Models.Task> listTasks) { var tasks = new List <TreeViewTask>(); foreach (var item in listTasks) { var levelItem = new TreeViewTask(); levelItem.ID = item.ID; levelItem.Level = item.Level; levelItem.ParentID = item.ParentID; tasks.Add(levelItem); } List <TreeViewTask> hierarchy = new List <TreeViewTask>(); hierarchy = tasks.Where(c => c.ParentID == 0) .Select(c => new TreeViewTask { ID = c.ID, Level = c.Level, ParentID = c.ParentID, children = GetChildren(tasks, c.ID) }) .ToList(); HieararchyWalk(hierarchy); return(hierarchy); }
public async Task <IEnumerable <TreeViewTask> > GetListTree(int parentID, int id) { var listTasks = await _context.Tasks .Where(x => (x.Status == false && x.FinishedMainTask == false) || (x.Status == true && x.FinishedMainTask == false)) //.Include(x => x.User) .OrderBy(x => x.Level).ToListAsync(); var tasks = new List <TreeViewTask>(); foreach (var item in listTasks) { var beAssigneds = _context.Tags.Where(x => x.TaskID == item.ID) .Include(x => x.User) .Select(x => new BeAssigned { ID = x.User.ID, Username = x.User.Username }).ToList(); var levelItem = new TreeViewTask { ID = item.ID, Level = item.Level, ParentID = item.ParentID }; tasks.Add(levelItem); } List <TreeViewTask> hierarchy = new List <TreeViewTask>(); hierarchy = tasks.Where(c => c.ID == id && c.ParentID == parentID) .Select(c => new TreeViewTask { ID = c.ID, JobName = c.JobName, Level = c.Level, ProjectID = c.ProjectID, CreatedBy = c.CreatedBy, CreatedDate = c.CreatedDate, From = c.From, ProjectName = c.ProjectName, state = c.state, FromWho = c.FromWho, FromWhere = c.FromWhere, PIC = c.PIC, PriorityID = c.PriorityID, Priority = c.Priority, BeAssigneds = c.BeAssigneds, Follow = c.Follow, DueDate = c.DueDate, children = GetChildren(tasks, c.ID) }) .ToList(); return(hierarchy); }
private string Message(Data.Enum.PeriodType periodType, TreeViewTask item) { var mes = string.Empty; switch (periodType) { case Data.Enum.PeriodType.Daily: mes = $"You are late for the task name: '{item.JobName}' on {item.DueDateDaily.ToStringFormatISO(formatDaily)}"; break; case Data.Enum.PeriodType.Weekly: mes = $"You are late for the task name: '{item.JobName}' on {item.DateOfWeekly.ToStringFormatISO(formatDaily)}"; break; case Data.Enum.PeriodType.Monthly: var dateofmonthly = new DateTime(DateTime.Now.Year, item.DueDateMonthly.ToInt(), 1).ToParseDatetimeToStringISO8061(); mes = $"You are late for the task name: '{item.JobName}' on {dateofmonthly.ToStringFormatISO(formatDaily)}"; break; case Data.Enum.PeriodType.Quarterly: var dateofquarterly = (item.DueDateQuarterly.Split(",")[1].Trim() + ", " + DateTime.Now.Year).ToParseStringDateTime().ToParseDatetimeToStringISO8061(); mes = $"You are late for the task name: '{item.JobName}' on {dateofquarterly.ToStringFormatISO(formatDaily)}"; break; case Data.Enum.PeriodType.Yearly: mes = $"You are late for the task name: '{item.JobName}' on {item.DueDateYearly.ToStringFormatISO(formatDaily)}"; break; case Data.Enum.PeriodType.SpecificDate: mes = $"You are late for the task name: '{item.JobName}' on {item.SpecificDate.ToStringFormatISO(formatDaily)}"; break; default: break; } return(mes); }
public async Task <IEnumerable <TreeViewTask> > GetListTree(int parentID, int id) { var listTasks = await _context.Tasks .Where(x => (x.Status == false && x.FinishedMainTask == false) || (x.Status == true && x.FinishedMainTask == false)) //.Include(x => x.User) .OrderBy(x => x.Level).ToListAsync(); var tasks = new List <TreeViewTask>(); foreach (var item in listTasks) { var beAssigneds = _context.Tags.Where(x => x.TaskID == item.ID) .Include(x => x.User) .Select(x => new BeAssigned { ID = x.User.ID, Username = x.User.Username }).ToList(); var levelItem = new TreeViewTask(); levelItem.ID = item.ID; //levelItem.PIC = string.Join(" , ", _context.Tags.Where(x => x.TaskID == item.ID).Include(x => x.User).Select(x => x.User.Username).ToArray()); //levelItem.ProjectName = item.ProjectID == 0 ? "#N/A" : _context.Projects.Find(item.ProjectID).Name; //levelItem.ProjectID = item.ProjectID; //levelItem.Deadline = String.Format("{0:s}", item.DueDate); //levelItem.BeAssigneds = beAssigneds; levelItem.Level = item.Level; levelItem.ParentID = item.ParentID; //levelItem.Priority = CastPriority(item.Priority); //levelItem.PriorityID = item.Priority; //levelItem.Description = item.Description; //levelItem.DueDate = String.Format("{0:MMM d, yyyy}", item.DueDate); //levelItem.CreatedDate = String.Format("{0:MMM d, yyyy}", item.CreatedDate); //levelItem.User = item.User; //levelItem.FromWhere = _context.OCs.Where(x => x.ID == item.OCID).Select(x => new FromWhere { ID = x.ID, Name = x.Name }).FirstOrDefault(); //levelItem.FromWho = _context.Users.Where(x => x.ID == item.FromWhoID).Select(x => new BeAssigned { ID = x.ID, Username = x.Username }).FirstOrDefault(); //levelItem.JobName = item.JobName.IsNotAvailable(); //levelItem.state = item.Status == false ? "Undone" : "Done"; //levelItem.Remark = item.Remark.IsNotAvailable(); //levelItem.From = item.OCID > 0 ? _context.OCs.Find(item.OCID).Name : _context.Users.Find(item.FromWhoID).Username.IsNotAvailable(); tasks.Add(levelItem); } List <TreeViewTask> hierarchy = new List <TreeViewTask>(); hierarchy = tasks.Where(c => c.ID == id && c.ParentID == parentID) .Select(c => new TreeViewTask { ID = c.ID, JobName = c.JobName, Level = c.Level, Remark = c.Remark, Description = c.Description, ProjectID = c.ProjectID, CreatedBy = c.CreatedBy, CreatedDate = c.CreatedDate, From = c.From, ProjectName = c.ProjectName, state = c.state, FromWho = c.FromWho, FromWhere = c.FromWhere, PIC = c.PIC, PriorityID = c.PriorityID, Priority = c.Priority, BeAssigneds = c.BeAssigneds, Follow = c.Follow, DueDateDaily = c.DueDateDaily, DueDateWeekly = c.DueDateWeekly, DueDateMonthly = c.DueDateMonthly, DueDateQuarterly = c.DueDateQuarterly, DueDateYearly = c.DueDateYearly, SpecificDate = c.SpecificDate, children = GetChildren(tasks, c.ID) }) .ToList(); HieararchyWalk(hierarchy); return(hierarchy); }
private List <TreeViewTask> GetListTreeViewTask(List <Data.Models.Task> listTasks, int userid) { var tasks = new List <TreeViewTask>(); var ocModel = _context.OCs; var userModel = _context.Users; var subModel = _context.Follows; var tagModel = _context.Tags; var deputyModel = _context.Deputies; foreach (var item in listTasks) { var beAssigneds = _context.Tags.Where(x => x.TaskID == item.ID) .Include(x => x.User) .Select(x => new BeAssigned { ID = x.User.ID, Username = x.User.Username }).ToList(); var deputiesList = _context.Deputies.Where(x => x.TaskID == item.ID) .Join(_context.Users, de => de.UserID, user => user.ID, (de, user) => new { user.ID, user.Username }) .Select(x => new BeAssigned { ID = x.ID, Username = x.Username }).ToList(); var statusTutorial = _context.Tutorials.Any(x => x.TaskID == item.ID); var tutorialModel = _context.Tutorials.FirstOrDefault(x => x.TaskID == item.ID); //var tasksTree = await GetListTree(item.ParentID, item.ID); var arrTasks = FindParentByChild(listTasks, item.ID); var levelItem = new TreeViewTask(); //Primarykey levelItem.Follow = subModel.Any(x => x.TaskID == item.ID && x.UserID == userid) ? "Yes" : "No"; levelItem.ID = item.ID; levelItem.PriorityID = item.Priority; levelItem.ProjectName = item.ProjectID == 0 ? "" : _context.Projects.Find(item.ProjectID).Name; levelItem.JobName = item.JobName.IsNotAvailable(); levelItem.From = item.DepartmentID > 0 ? levelItem.From = ocModel.Find(item.DepartmentID).Name : levelItem.From = userModel.Find(item.FromWhoID).Username; levelItem.PIC = tagModel.Where(x => x.TaskID == item.ID).Include(x => x.User).Select(x => x.User.Username).ToArray().ToJoin().IsNotAvailable(); levelItem.DeputiesList = deputiesList; levelItem.DeputyName = deputiesList.Select(x => x.Username).ToArray().ToJoin(" , ").IsNotAvailable(); //DateTime levelItem.CreatedDate = item.CreatedDate.ToStringFormat(formatCreatedDate).IsNotAvailable(); levelItem.DueDateDaily = item.DueDateDaily.ToStringFormatISO(formatDaily).IsNotAvailable(); levelItem.DueDateWeekly = item.DueDateWeekly.IsNotAvailable(); levelItem.DueDateMonthly = item.DueDateMonthly.FindShortDatesOfMonth().IsNotAvailable(); levelItem.DueDateQuarterly = item.DueDateQuarterly.IsNotAvailable(); levelItem.DueDateYearly = item.DueDateYearly.ToStringFormatISO(formatYearly).IsNotAvailable(); levelItem.SpecificDate = item.SpecificDate.ToStringFormatISO(formatSpecificDate).IsNotAvailable(); levelItem.DateOfWeekly = item.DateOfWeekly; levelItem.periodType = item.periodType; levelItem.User = item.User; levelItem.Level = item.Level; levelItem.ProjectID = item.ProjectID; levelItem.ParentID = item.ParentID; levelItem.state = item.Status == false ? "Undone" : "Done"; levelItem.Priority = CastPriority(item.Priority); levelItem.PICs = tagModel.Where(x => x.TaskID == arrTasks).Select(x => x.UserID).ToList(); levelItem.BeAssigneds = beAssigneds; levelItem.Deputies = deputiesList.Select(_ => _.ID).ToList(); levelItem.FromWhere = ocModel.Where(x => x.ID == item.OCID).Select(x => new FromWhere { ID = x.ID, Name = x.Name }).FirstOrDefault() ?? new FromWhere(); levelItem.FromWho = userModel.Where(x => x.ID == item.FromWhoID).Select(x => new BeAssigned { ID = x.ID, Username = x.Username }).FirstOrDefault() ?? new BeAssigned(); levelItem.CreatedDateForEachTask = item.CreatedDateForEachTask.ToStringFormat(formatCreatedDate).IsNotAvailable(); levelItem.JobTypeID = item.JobTypeID; levelItem.periodType = item.periodType; levelItem.VideoStatus = statusTutorial; levelItem.Tutorial = tutorialModel; levelItem.VideoLink = statusTutorial ? tutorialModel.URL : ""; tasks.Add(levelItem); } return(tasks.OrderByDescending(x => x.ID).ToList()); }
private async System.Threading.Tasks.Task <string> PeriodType(TreeViewTask item, bool isProject) { string mes = Message(item.periodType, item); string belate = Data.Enum.AlertType.BeLate.ToSafetyString(); var task = await _context.Tasks.FindAsync(item.ID); switch (item.periodType) { case Data.Enum.PeriodType.Daily: var dateDaily = item.DueDateDaily.ToParseIso8601().AddDays(1); if (!CompareDate(dateDaily) && !BeAlert(item.ID, belate)) { await AlertTasksIsLate(item, mes, isProject); } break; case Data.Enum.PeriodType.Weekly: var dateWeekly = PeriodWeekly(task).ToParseStringDateTime(); if (!CompareDate(dateWeekly) && !BeAlert(item.ID, belate)) { await AlertTasksIsLate(item, mes, isProject); } break; case Data.Enum.PeriodType.Monthly: var dateofmonthly = PeriodMonthly(task).ToParseStringDateTime(); if (!CompareDate(dateofmonthly) && !BeAlert(item.ID, belate)) { await AlertTasksIsLate(item, mes, isProject); } break; case Data.Enum.PeriodType.Quarterly: var dateofquarterly = (PeriodQuarterly(task).Split(",")[1].Trim() + ", " + DateTime.Now.Year).ToParseStringDateTime(); if (!CompareDate(dateofquarterly) && !BeAlert(item.ID, belate)) { await AlertTasksIsLate(item, mes, isProject); } break; case Data.Enum.PeriodType.Yearly: var dateyearly = PeriodYearly(task).ToParseStringDateTime(); if (!CompareDate(dateyearly) && !BeAlert(item.ID, belate)) { await AlertTasksIsLate(item, mes, isProject); } break; case Data.Enum.PeriodType.SpecificDate: var specific = item.SpecificDate.ToParseIso8601(); if (!TimeComparator(specific) && !BeAlert(item.ID, belate)) { return(await AlertTasksIsLate(item, mes, isProject)); } break; default: break; } return(""); }
private async Task <string> AlertTasksIsLate(TreeViewTask item, string message, bool isProject) { var mes = string.Empty; var notifyParams = new CreateNotifyParams { TaskID = item.ID, Users = GetListUserRelateToTask(item.ID, isProject), Message = message, URL = "", AlertType = Data.Enum.AlertType.BeLate }; var update = await _context.Tasks.FindAsync(item.ID); if (update.periodType != Data.Enum.PeriodType.SpecificDate) { update.Status = false; update.FinishedMainTask = false; await _context.SaveChangesAsync(); } var history = new History { TaskID = item.ID, Status = false }; switch (item.periodType) { case Data.Enum.PeriodType.Daily: history.Deadline = update.DueDateDaily; break; case Data.Enum.PeriodType.Weekly: history.Deadline = update.DateOfWeekly; break; case Data.Enum.PeriodType.Monthly: history.Deadline = update.DateOfMonthly; break; case Data.Enum.PeriodType.Quarterly: history.Deadline = update.DueDateQuarterly; break; case Data.Enum.PeriodType.Yearly: history.Deadline = update.DueDateYearly + ", " + DateTime.Now.Year; break; default: break; } if (notifyParams.Users.Count > 0) { await PushTaskToHistory(history); await Create(notifyParams); if (update.periodType != Data.Enum.PeriodType.SpecificDate) { mes = $"{update.JobName}<br/>{update.SpecificDate.ToParseStringDateTime().ToStringFormat("{0:f}")}"; } } return(mes); }