public async Task <HttpResponseMessage> GetNotificationList(int UserID, int currentIndex, int maxRow)
        {
            try
            {
                NotificationDAL dal  = new NotificationDAL();
                NotiInfo        data = await dal.GetNotificationList(UserID, currentIndex, maxRow);

                if (data != null)
                {
                    return(Request.CreateResponse <NotiInfo>(HttpStatusCode.OK, data));
                }
                else
                {
                    return(Request.CreateErrorResponse(HttpStatusCode.NotFound, Constants.ErrorNotFound));
                }
            }
            catch (DbEntityValidationException ex)
            {
                var    controllerName = ControllerContext.RouteData.Values["controller"].ToString();
                var    actionName     = ControllerContext.RouteData.Values["action"].ToString();
                Logger log            = new Logger();
                log.ErrorLog(ex, controllerName, actionName);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, Constants.ErrorSysError));
            }
        }
Пример #2
0
        public Task <NotiInfo> GetNotificationList(int userID, int currentIndex, int maxRow)
        {
            return(Task.Run(() =>
            {
                using (MIUEntities db = new MIUEntities())
                {
                    NotiInfo Notifications = new NotiInfo();

                    try
                    {
                        User user = db.Users.Where(x => x.ID == userID && x.IsDelete != true).SingleOrDefault();
                        Notifications.NotiCount = 0;
                        var skip = (currentIndex - 1) * maxRow;

                        List <Notification> NotiList = (from n in db.Notifications
                                                        where n.NotiTypeId != 1 && (!db.NotiVisibilities.Any(nv => nv.NotiID == n.ID && nv.UserID == userID) || db.NotiVisibilities.Any(nv => nv.NotiID == n.ID && nv.UserID == userID))
                                                        select n).ToList();

                        List <Notification> SubscriptionList = (from n in db.Notifications
                                                                //join nv in db.NotiVisibilities.Where(nv => nv.UserID != userID) on n.ID equals nv.NotiID into noti from x in noti.DefaultIfEmpty()
                                                                join s in db.Subscribtions.Where(s => s.UserID == userID) on n.ID equals s.NotiID
                                                                where (!db.NotiVisibilities.Any(nv => nv.NotiID == n.ID && nv.UserID == userID) || db.NotiVisibilities.Any(nv => nv.NotiID == n.ID && nv.UserID == userID)) && n.NotiTypeId == 1
                                                                select n).ToList();

                        List <NotiVisibility> notiVisibilities = new List <NotiVisibility>();
                        List <NotiListInfo> NotiListInfo = new List <NotiListInfo>();

                        foreach (var data in NotiList)
                        {
                            NotiListInfo info = new NotiListInfo();
                            PropertyCopier <Notification, NotiListInfo> .Copy(data, info);

                            var NotiType = db.NotificationTypes.Where(x => x.ID == data.NotiTypeId).SingleOrDefault();

                            if (NotiType.ID == 1)
                            {
                                LeadNotification LeadNoti = new LeadNotification();
                                LeadNoti = db.LeadNotifications.Where(x => x.NotificationId == data.ID).FirstOrDefault();
                                if (LeadNoti != null)
                                {
                                    info.RelatedTableID = LeadNoti.LeadId;
                                    info.RelatedTableName = "Lead";
                                }
                            }
                            else if (NotiType.ID == 2)
                            {
                                NewsNoti NewNoti = new NewsNoti();
                                NewNoti = db.NewsNotis.Where(x => x.NotiID == data.ID).FirstOrDefault();
                                if (NewNoti != null)
                                {
                                    info.RelatedTableID = NewNoti.NewsID;
                                    info.RelatedTableName = "News";
                                }
                            }

                            //info.RelatedTableID = db.
                            NotiListInfo.Add(info); //Get Notification List

                            NotiVisibility notiVisibility = new NotiVisibility();
                            notiVisibilities = db.NotiVisibilities.Where(x => x.UserID == userID && x.NotiID == data.ID).ToList();
                            if (notiVisibilities.Count == 0)
                            {
                                notiVisibility.NotiID = data.ID;
                                notiVisibility.UserID = userID;
                                notiVisibility.IsSeen = false;
                                db.NotiVisibilities.Add(notiVisibility);
                            }
                            else
                            {
                                foreach (var notiVis in notiVisibilities)
                                {
                                    foreach (var NotiListing in NotiListInfo)
                                    {
                                        if (NotiListing.UserId != null && NotiListing.ID == notiVis.NotiID && NotiListing.UserId == notiVis.UserID && notiVis.IsSeen == true)
                                        {
                                            NotiListing.IsSeen = true;
                                        }
                                        else if (NotiListing.ID == notiVis.NotiID && notiVis.IsSeen == true)
                                        {
                                            NotiListing.IsSeen = true;
                                        }
                                    }
                                }
                            }
                        }

                        foreach (var data in SubscriptionList)
                        {
                            NotiListInfo info = new NotiListInfo();
                            PropertyCopier <Notification, NotiListInfo> .Copy(data, info);

                            var NotiType = db.NotificationTypes.Where(x => x.ID == data.NotiTypeId).SingleOrDefault();

                            if (NotiType.ID == 1)
                            {
                                LeadNotification LeadNoti = db.LeadNotifications.Where(x => x.NotificationId == data.ID).FirstOrDefault();
                                if (LeadNoti != null)
                                {
                                    info.RelatedTableID = LeadNoti.LeadId;
                                    info.RelatedTableName = "Lead";
                                }
                            }
                            else if (NotiType.ID == 2)
                            {
                                NewsNoti NewNoti = db.NewsNotis.Where(x => x.NotiID == data.ID).FirstOrDefault();
                                if (NewNoti != null)
                                {
                                    info.RelatedTableID = NewNoti.NewsID;
                                    info.RelatedTableName = "News";
                                }
                            }

                            //info.RelatedTableID = db.
                            NotiListInfo.Add(info); //Get Notification List

                            NotiVisibility notiVisibility = new NotiVisibility();
                            notiVisibilities = db.NotiVisibilities.Where(x => x.UserID == userID && x.NotiID == data.ID).ToList();
                            if (notiVisibilities.Count == 0)
                            {
                                notiVisibility.NotiID = data.ID;
                                notiVisibility.UserID = userID;
                                notiVisibility.IsSeen = false;
                                db.NotiVisibilities.Add(notiVisibility);
                            }
                            else
                            {
                                foreach (var notiVis in notiVisibilities)
                                {
                                    foreach (var NotiListing in NotiListInfo)
                                    {
                                        if (NotiListing.ID == notiVis.NotiID && NotiListing.UserId == notiVis.UserID && notiVis.IsSeen == true)
                                        {
                                            NotiListing.IsSeen = true;
                                            //NotiListInfo.Add(NotiListing);
                                        }
                                    }
                                }
                            }
                        }

                        List <NotiListInfo> WebNotiList = new List <NotiListInfo>();
                        WebNotiList = GetWebNotification(userID);

                        NotiListInfo.AddRange(WebNotiList);

                        NotiListInfo.ForEach(x => { if (x.UpdatedDate == null)
                                                    {
                                                        x.UpdatedDate = x.CreatedDate; x.UpdatedBy = x.CreatedBy;
                                                    }
                                             });                                                                                                // if updated date is null set updated date value from created date.

                        Notifications.NotiList = NotiListInfo.OrderByDescending(x => x.CreatedDate).Skip(skip).Take(maxRow).ToList();
                        db.SaveChanges(); //Add to IsSeenNotification Table

                        int TotalNotiCount = db.Notifications.Where(x => x.NotiTypeId != 1).Count();
                        int IsSeenNotiCount = db.NotiVisibilities.Where(x => x.UserID == userID).Count();

                        Notifications.NotiCount = 0;
                    }
                    catch (System.Exception ex)
                    {
                        //throw ex;
                    }

                    return Notifications;
                }
            }));
        }