public async Task <ServiceResponse <object> > GetGroupChatMessages(List <string> userIds, int groupId, bool forSignal = false) { string UserIdds = string.Join(',', userIds); List <GroupMessageForListByTimeDto> Messages = new List <GroupMessageForListByTimeDto>(); if (!forSignal) { List <UserForDetailedDto> UserToDetails = new List <UserForDetailedDto>(); var Users = await _context.Users.Where(m => userIds.Contains(m.Id.ToString())).ToListAsync(); UserToDetails = Users.Count > 0 ? _mapper.Map <List <UserForDetailedDto> >(Users) : new List <UserForDetailedDto>(); var SentMessages = _context.GroupMessages.Where(m => m.GroupId == groupId && m.CreatedDateTime.Date >= DateTime.UtcNow.AddDays(-7).Date&& ((m.MessageFromUserId == _LoggedIn_UserID && UserIdds.Contains(m.MessageToUserIds)) || (UserIdds.Contains(m.MessageFromUserId.ToString()) && m.MessageToUserIds.Contains(_LoggedIn_UserID.ToString())))) .Select(o => new GroupMessageForListDto { Id = o.Id, Time = DateFormat.FromUTCToPKFormat(o.CreatedDateTime), TimeToDisplay = DateFormat.ToTime(o.CreatedDateTime.TimeOfDay), MessageFromUserId = o.MessageFromUserId, MessageFromUser = o.MessageFromUser != null ? o.MessageFromUser.FullName : "", Comment = o.Comment, Attachment = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _fileRepo.AppendDocPath(_context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).AttachmentPath) : "", FileName = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileName : "", FileType = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileType : "", MessageToUserIdsStr = o.MessageToUserIds, Type = o.MessageFromUserId == _LoggedIn_UserID ? "1" : "2", // 1=Message, 2=Reply GroupId = o.GroupId, }).ToList(); var DateTimes = _context.GroupMessages.Where(m => m.GroupId == groupId && m.CreatedDateTime.Date >= DateTime.UtcNow.AddDays(-7).Date&& ((m.MessageFromUserId == _LoggedIn_UserID && UserIdds.Contains(m.MessageToUserIds)) || (UserIdds.Contains(m.MessageFromUserId.ToString()) && m.MessageToUserIds.Contains(_LoggedIn_UserID.ToString())))) .OrderBy(m => m.CreatedDateTime) .Select(m => DateFormat.ToDateTime(m.CreatedDateTime)).ToList(); DateTimes = DateTimes.Distinct().ToList(); for (var i = 0; i < DateTimes.Count(); i++) { var item = DateTimes[i]; var ToAdd = new GroupMessageForListByTimeDto(); DateTime dt = Convert.ToDateTime(item, CultureInfo.GetCultureInfo("ur-PK").DateTimeFormat); if (dt.Date == DateTime.UtcNow.Date) { ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == "Today") ? dt.ToString("hh:mm tt") : "Today"; } else if (dt.Date == DateTime.UtcNow.AddDays(-1).Date) { ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == "Yesterday") ? dt.ToString("hh:mm tt") : "Yesterday"; } else { ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == item) ? "" : item; } ToAdd.Messages = SentMessages.Where(m => m.Time.Date == dt.Date && m.Time.Hour == dt.Hour && m.Time.Minute == dt.Minute).OrderBy(m => m.Time).ToList(); Messages.Add(ToAdd); } _serviceResponse.Data = new { UserToDetails, Messages }; } else { var SingleSentMessage = _context.GroupMessages.Where(m => m.GroupId == groupId && m.CreatedDateTime.Date >= DateTime.UtcNow.AddDays(-7).Date&& ((m.MessageFromUserId == _LoggedIn_UserID && UserIdds.Contains(m.MessageToUserIds)) || (UserIdds.Contains(m.MessageFromUserId.ToString()) && m.MessageToUserIds.Contains(_LoggedIn_UserID.ToString())))) .Select(o => new GroupMessageForListDto { Id = o.Id, Time = DateFormat.FromUTCToPKFormat(o.CreatedDateTime), TimeToDisplay = DateFormat.ToTime(o.CreatedDateTime.TimeOfDay), MessageFromUserId = o.MessageFromUserId, MessageFromUser = o.MessageFromUser != null ? o.MessageFromUser.FullName : "", Comment = o.Comment, Attachment = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _fileRepo.AppendDocPath(_context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).AttachmentPath) : "", FileName = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileName : "", FileType = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileType : "", MessageToUserIdsStr = o.MessageToUserIds, Type = o.MessageFromUserId == _LoggedIn_UserID ? "1" : "2", // 1=Message, 2=Reply GroupId = o.GroupId, }).OrderByDescending(m => m.Id).FirstOrDefault(); //var SingleDateTime = _context.GroupMessages.Where(m => m.GroupId == groupId && m.CreatedDateTime.Date >= DateTime.UtcNow.AddDays(-7).Date && ((m.MessageFromUserId == _LoggedIn_UserID && UserIdds.Contains(m.MessageToUserIds)) //|| (UserIdds.Contains(m.MessageFromUserId.ToString()) && m.MessageToUserIds.Contains(_LoggedIn_UserID.ToString())))) // .OrderByDescending(m => m.CreatedDateTime) // .Select(m => DateFormat.ToDateTime(m.CreatedDateTime)).FirstOrDefault(); //DateTimes = DateTimes.Distinct().ToList(); //var item = SingalDateTime; var ToAdd = new GroupMessageForListByTimeDto(); //DateTime dt = Convert.ToDateTime(item, CultureInfo.GetCultureInfo("ur-PK").DateTimeFormat); //if (dt.Date == DateTime.UtcNow.Date) // ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == "Today") ? "" : "Today"; //else if (dt.Date == DateTime.UtcNow.AddDays(-1).Date) // ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == "Yesterday") ? "" : "Yesterday"; //else // ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == item) ? "" : item; ToAdd.Messages.Add(SingleSentMessage); Messages.Add(ToAdd); _serviceResponse.Data = Messages.FirstOrDefault(); } _serviceResponse.Success = true; return(_serviceResponse); }
public async Task <ServiceResponse <object> > GetChatMessages(List <string> userIds, bool forSignal = false) { int UserId = Convert.ToInt32(userIds.First()); List <GroupMessageForListByTimeDto> Messages = new List <GroupMessageForListByTimeDto>(); if (!forSignal) { var Users = await _context.Users.Where(m => userIds.Contains(m.Id.ToString())).ToListAsync(); var UserToDetails = Users.Count > 0 ? _mapper.Map <List <UserForDetailedDto> >(Users) : new List <UserForDetailedDto>(); var SentMessages = _context.Messages.Where(m => m.CreatedDateTime.Date >= DateTime.UtcNow.AddDays(-7).Date&& ((m.MessageFromUserId == _LoggedIn_UserID && UserId.Equals(m.MessageToUserId)) || (UserId.Equals(m.MessageFromUserId) && m.MessageToUserId.Equals(_LoggedIn_UserID)))) .Select(o => new GroupMessageForListDto { Id = o.Id, Time = DateFormat.FromUTCToPKFormat(o.CreatedDateTime), TimeToDisplay = DateFormat.ToTime(o.CreatedDateTime.TimeOfDay), MessageFromUserId = o.MessageFromUserId, MessageFromUser = o.MessageFromUser != null ? o.MessageFromUser.FullName : "", Comment = o.Comment, Attachment = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _fileRepo.AppendDocPath(_context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).AttachmentPath) : "", FileName = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileName : "", FileType = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileType : "", MessageToUserIdsStr = o.MessageToUserId.ToString(), Type = o.MessageFromUserId == _LoggedIn_UserID ? "1" : "2" // 1=Message, 2=Reply }).ToList(); var DateTimes = _context.Messages.Where(m => m.CreatedDateTime.Date >= DateTime.UtcNow.AddDays(-7).Date&& ((m.MessageFromUserId == _LoggedIn_UserID && UserId.Equals(m.MessageToUserId)) || (UserId.Equals(m.MessageFromUserId) && m.MessageToUserId.Equals(_LoggedIn_UserID)))) .OrderBy(m => m.CreatedDateTime) .Select(m => DateFormat.ToDateTime(m.CreatedDateTime)).ToList(); DateTimes = DateTimes.Distinct().ToList(); for (var i = 0; i < DateTimes.Count(); i++) { var item = DateTimes[i]; var ToAdd = new GroupMessageForListByTimeDto(); DateTime dt = Convert.ToDateTime(item, CultureInfo.GetCultureInfo("ur-PK").DateTimeFormat); var PKZone = TimeZoneInfo.FindSystemTimeZoneById("Pakistan Standard Time"); var Today = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, PKZone); if (dt.Date == Today.Date) { ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == "Today") ? dt.ToString("hh:mm tt") : "Today"; } else if (dt.Date == Today.AddDays(-1).Date) { ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == "Yesterday") ? dt.ToString("hh:mm tt") : "Yesterday"; } else { ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == item) ? "" : item; } ToAdd.Messages = SentMessages.Where(m => m.Time.Date == dt.Date && m.Time.Hour == dt.Hour && m.Time.Minute == dt.Minute).OrderBy(m => m.Time).ToList(); Messages.Add(ToAdd); } _serviceResponse.Data = new { UserToDetails, Messages }; } else { var SingleSentMessage = _context.Messages.Where(m => m.CreatedDateTime.Date >= DateTime.UtcNow.AddDays(-7).Date&& ((m.MessageFromUserId == _LoggedIn_UserID && UserId.Equals(m.MessageToUserId)) || (UserId.Equals(m.MessageFromUserId) && m.MessageToUserId.Equals(_LoggedIn_UserID)))) .Select(o => new GroupMessageForListDto { Id = o.Id, Time = DateFormat.FromUTCToPKFormat(o.CreatedDateTime), TimeToDisplay = DateFormat.ToTime(o.CreatedDateTime.TimeOfDay), MessageFromUserId = o.MessageFromUserId, MessageFromUser = o.MessageFromUser != null ? o.MessageFromUser.FullName : "", Comment = o.Comment, Attachment = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _fileRepo.AppendDocPath(_context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).AttachmentPath) : "", FileName = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileName : "", FileType = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileType : "", MessageToUserIdsStr = o.MessageToUserId.ToString(), Type = o.MessageFromUserId == _LoggedIn_UserID ? "1" : "2" // 1=Message, 2=Reply }).OrderByDescending(m => m.Id).FirstOrDefault(); var ToAdd = new GroupMessageForListByTimeDto(); ToAdd.Messages.Add(SingleSentMessage); Messages.Add(ToAdd); _serviceResponse.Data = Messages.FirstOrDefault(); } return(_serviceResponse); }