Пример #1
0
        public async Task <bool> Create(CreateNotifyParams entity)
        {
            try
            {
                var accessTokenLines = _context.Users.Where(x => entity.Users.Contains(x.ID)).Select(x => x.AccessTokenLineNotify).ToList();
                foreach (var token in accessTokenLines)
                {
                    await _lineService.SendMessage(new MessageParams { Message = entity.Message, Token = token });
                }
                var item = new Notification
                {
                    TaskID   = entity.TaskID,
                    Message  = entity.Message,
                    URL      = entity.URL,
                    Function = entity.AlertType.ToString()
                };
                if (entity.UserID == 0 || entity.UserID == null)
                {
                    item.UserID = ADMIN;
                }
                else
                {
                    item.UserID = entity.UserID.Value;
                }
                await _context.Notifications.AddAsync(item);

                await _context.SaveChangesAsync();

                if (entity.Users.Count > 0 || entity.Users != null)
                {
                    var details = new List <NotificationDetail>();
                    foreach (var user in entity.Users)
                    {
                        details.Add(new NotificationDetail
                        {
                            NotificationID = item.ID,
                            UserID         = user,
                            Seen           = false
                        });
                    }
                    await _context.AddRangeAsync(details);
                }
                await _context.SaveChangesAsync();

                return(true);
            }
            catch (Exception ex)
            {
                await _context.AddRangeAsync(new CheckTask { Function = entity.Message });

                await _context.SaveChangesAsync();

                return(false);
            }
        }
        public async Task <bool> Create(CreateNotifyParams entity)
        {
            try
            {
                var item = new Notification
                {
                    TaskID   = entity.TaskID,
                    UserID   = entity.UserID,
                    Message  = entity.Message,
                    URL      = entity.URL,
                    Function = entity.AlertType.ToString()
                };
                await _context.Notifications.AddAsync(item);

                await _context.SaveChangesAsync();

                if (entity.Users.Count > 0 || entity.Users != null)
                {
                    var details = new List <NotificationDetail>();
                    foreach (var user in entity.Users)
                    {
                        details.Add(new NotificationDetail
                        {
                            NotificationID = item.ID,
                            UserID         = user,
                            Seen           = false
                        });
                    }
                    await _context.AddRangeAsync(details);
                }
                await _context.SaveChangesAsync();

                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
        public async Task <Tuple <bool, string> > AddMember(AddMemberViewModel addMember)
        {
            try
            {
                var listUsers = new List <int>();

                if (addMember.Users.Length > 0)
                {
                    //get old member list
                    var oldMembers = await _teamMemberRepository.FindAll().Where(x => x.ProjectID == addMember.ProjectID).Select(x => x.UserID).ToArrayAsync();

                    //new member list from client
                    var newMembers = addMember.Users;
                    //get value of old members list without value in new member list
                    var withOutInOldMembers = newMembers.Except(oldMembers).ToArray();
                    if (withOutInOldMembers.Length > 0)
                    {
                        var members = new List <TeamMember>();
                        foreach (var pic in withOutInOldMembers)
                        {
                            members.Add(new TeamMember
                            {
                                UserID    = pic,
                                ProjectID = addMember.ProjectID
                            });
                        }
                        await _teamMemberRepository.AddMultipleAsync(members);

                        var project = await _projectRepository.FindByIdAsync(addMember.ProjectID);

                        var user = await _userRepository.FindByIdAsync(addMember.UserID);

                        string urlResult = $"/project-detail/{project.ID}";
                        var    message   = $"The {user.Username.ToTitleCase()} account has assigned you as member of {project.Name} project";

                        var notify = new CreateNotifyParams
                        {
                            AlertType = AlertType.Member,
                            Message   = message,
                            Users     = withOutInOldMembers.Distinct().ToList(),
                            URL       = urlResult,
                            UserID    = addMember.UserID
                        };
                        var addNotify = _mapper.Map <Notification>(notify);
                        await _notificationRepository.AddAsync(addNotify);

                        listUsers.AddRange(withOutInOldMembers);
                    }
                    else
                    {
                        //Day la userID se bi xoa
                        var withOutInNewMembers = oldMembers.Where(x => !newMembers.Contains(x)).ToArray();
                        var listDeleteMembers   = await _teamMemberRepository.FindAll().Where(x => withOutInNewMembers.Contains(x.UserID) && x.ProjectID.Equals(addMember.ProjectID)).ToListAsync();

                        _teamMemberRepository.RemoveMultiple(listDeleteMembers);
                    }
                }

                await _unitOfWork.Commit();

                return(Tuple.Create(true, string.Join(",", listUsers.Distinct().ToArray())));
            }
            catch (Exception)
            {
                return(Tuple.Create(false, ""));
            }
        }
Пример #4
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);
        }