Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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());
        }
Пример #6
0
        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("");
        }
Пример #7
0
        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);
        }