public ActionResult LoadScroll(PinFilterDTO pinFilter)
        {
            try
            {
                if (!string.IsNullOrEmpty(pinFilter.Url))
                {
                    NameValueCollection QueryString = CommonHelper.GetQueryParameters(pinFilter.Url);
                    var _Key   = QueryString["BoardID"] ?? "";
                    var _Group = QueryString["GroupID"] ?? "";

                    if (!string.IsNullOrEmpty(_Key))
                    {
                        pinFilter.LstBoardID.Add(_Key);
                    }
                    if (!string.IsNullOrEmpty(_Group))
                    {
                        pinFilter.LstGroupBoardID.Add(_Group);

                        var _lstKeywords = getListBoardByGroud(_Group);
                        pinFilter.LstBoardID.AddRange(_lstKeywords);
                    }
                }

                if (pinFilter.LstBoardID != null && pinFilter.LstBoardID.Count > 0)
                {
                    if (string.IsNullOrEmpty(pinFilter.LstBoardID[0]))
                    {
                        pinFilter.LstBoardID = null;
                    }
                }

                if (pinFilter.LstBoardID == null || pinFilter.LstBoardID.Count == 0)
                {
                    pinFilter.LstBoardID = getListBoard().Select(o => o.Value).ToList();
                }

                var modelCrawler = new CMS_CrawlerModels();
                if (pinFilter.LstBoardID != null && pinFilter.LstBoardID.Count > 0)
                {
                    var _pinModels = new List <PinsModels>();
                    var msg        = "";
                    pinFilter.PageSize = Commons.PageSize;
                    int totalPin = 0;
                    var result   = _fac.GetPin(ref _pinModels, ref totalPin, pinFilter, ref msg);
                    if (result)
                    {
                        modelCrawler.Pins = _pinModels;
                    }
                }

                return(PartialView("_ListItem", modelCrawler));
            }
            catch (Exception) { }
            return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
        }
        public ActionResult Search()
        {
            try
            {
                var FilterModel = new PinFilterDTO();
                FilterModel.PageIndex       = Commons.PageIndex;
                FilterModel.PageSize        = Commons.PageSize;
                FilterModel.CreatedDateFrom = null;
                FilterModel.CreatedDateTo   = null;
                // var _Key = Request["Key"] ?? "";
                var TypeTime = Request["TypeTime"] ?? "2";
                //var Sort1 = Request["Sort1"] ?? "";
                var Sort2 = Request["Sort2"] ?? "2";

                //  var TypePin = Request["TypePin"] ?? "";
                var _TypeQuantity = Request["TypeQuantity"];
                int TypeQuantity  = -1;
                if (!string.IsNullOrEmpty(_TypeQuantity))
                {
                    TypeQuantity = Convert.ToInt16(_TypeQuantity);
                }
                var    Keywords    = Request["listKeywords"] ?? null;
                char[] separator   = new char[] { ',' };
                var    ListKeyword = CommonHelper.ParseStringToList(Keywords, separator);
                var    _FromDate   = Convert.ToDateTime(Request["FromDate"]);
                var    _ToDate     = Convert.ToDateTime(Request["ToDate"]);
                #region "comment"
                //cache data
                //Response.Cookies["TypeTime"].Value = TypeTime.ToString();
                //Response.Cookies["TypeTime"].Expires = DateTime.Now.AddYears(1); // add expiry time

                //Response.Cookies["TypePin"].Value = TypePin.ToString();
                //Response.Cookies["TypePin"].Expires = DateTime.Now.AddYears(1); // add expiry time

                //Response.Cookies["FromDate"].Value = _FromDate.ToString();
                //Response.Cookies["FromDate"].Expires = DateTime.Now.AddYears(1); // add expiry time
                //Response.Cookies["ToDate"].Value = _ToDate.ToString();
                //Response.Cookies["ToDate"].Expires = DateTime.Now.AddYears(1); // add expiry time
                //if(TypeQuantity != 0)
                //{
                //    Response.Cookies["TypeQuantity"].Value = TypeQuantity.ToString();
                //    Response.Cookies["TypeQuantity"].Expires = DateTime.Now.AddYears(1); // add expiry time
                //}
                #endregion
                FilterModel.CreatedAtFrom = _FromDate;
                FilterModel.CreatedAtTo   = _ToDate;

                var _Group = Request["GroupID"] ?? "";
                if (!string.IsNullOrEmpty(_Group))
                {
                    FilterModel.LstGroupID.Add(_Group);

                    var _lstKeywords = getListKeyWordByGroup(_Group);
                    FilterModel.LstKeyWordID.AddRange(_lstKeywords);
                }

                if (TypeQuantity.ToString() == Commons.EQuantityType.ZeroToOne.ToString("d"))
                {
                    FilterModel.PinCountFrom = 0;
                    FilterModel.PinCountTo   = 100;
                }
                if (TypeQuantity.ToString() == Commons.EQuantityType.OneToTwo.ToString("d"))
                {
                    FilterModel.PinCountFrom = 100;
                    FilterModel.PinCountTo   = 200;
                }
                if (TypeQuantity.ToString() == Commons.EQuantityType.TwoToThree.ToString("d"))
                {
                    FilterModel.PinCountFrom = 200;
                    FilterModel.PinCountTo   = 300;
                }
                if (TypeQuantity.ToString() == Commons.EQuantityType.ThreeToFour.ToString("d"))
                {
                    FilterModel.PinCountFrom = 300;
                    FilterModel.PinCountTo   = 400;
                }
                if (TypeQuantity.ToString() == Commons.EQuantityType.FourToFive.ToString("d"))
                {
                    FilterModel.PinCountFrom = 400;
                    FilterModel.PinCountTo   = 500;
                }
                if (TypeQuantity.ToString() == Commons.EQuantityType.MoreFive.ToString("d"))
                {
                    FilterModel.PinCountFrom = 500;
                }

                if (ListKeyword != null && ListKeyword.Count > 0)
                {
                    FilterModel.LstKeyWordID = ListKeyword;
                    // Response.Cookies["Keywords"].Value = Keywords.ToString();
                    //  Response.Cookies["Keywords"].Expires = DateTime.Now.AddYears(1); // add expiry time
                }

                FilterModel.TypeTime = TypeTime;
                var tmp = 0;
                int.TryParse(TypeTime, out tmp);
                FilterModel.Sort1 = tmp;
                int.TryParse(Sort2, out tmp);
                FilterModel.Sort2 = tmp;

                var modelCrawler = new CMS_CrawlerModels();
                var _pinModels   = new List <PinsModels>();
                var msg          = "";
                int totalPin     = 0;
                var result       = _fac.GetPin(ref _pinModels, ref totalPin, FilterModel, ref msg);
                if (result)
                {
                    modelCrawler.Pins = _pinModels;
                }
                return(PartialView("_ListItem", modelCrawler));
            }
            catch (Exception ex) { }
            return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
        }
        // GET: Admin/CMSCategories
        public ActionResult Index()
        {
            CMS_ProductsModels model = new CMS_ProductsModels();

            try
            {
                var _Key        = Request["keywordID"] ?? "";
                var _Group      = Request["GroupID"] ?? "";
                var FilterModel = new PinFilterDTO();
                FilterModel.PageIndex = Commons.PageIndex;
                FilterModel.PageSize  = Commons.PageSize;
                FilterModel.TypeTime  = Commons.ESortType1.TimeCreatedAtDecrease.ToString("d");
                model.TypeTime        = int.Parse(Commons.ESortType1.TimeCreatedAtDecrease.ToString("d"));
                FilterModel.Sort1     = (byte)Commons.ESortType1.TimeCreatedAtDecrease;
                model.Sort1           = (byte)Commons.ESortType1.TimeCreatedAtDecrease;
                FilterModel.Sort2     = (byte)Commons.ESortType2.ReactionDecrease;
                model.Sort2           = (byte)Commons.ESortType2.ReactionDecrease;
                model.Index           = int.Parse(Commons.EIndex.LikeReduce.ToString("d"));
                #region "Comment"
                //if (Request.Cookies["FromDate"] != null)
                //{
                //    var _FromDate = Convert.ToDateTime(Request.Cookies["FromDate"].Value);
                //    FilterModel.CreatedAtFrom = _FromDate;
                //}
                //if(Request.Cookies["ToDate"] != null)
                //{
                //    var _ToDate = Convert.ToDateTime(Request.Cookies["ToDate"].Value);
                //    FilterModel.CreatedAtTo = _ToDate;
                //}
                //string TypeTime = "", TypePin = "";
                //if (Request.Cookies["TypeTime"] != null)
                //{
                //    TypeTime = Request.Cookies["TypeTime"].Value;
                //    model.TypeTime = Convert.ToInt16(TypeTime);
                //}
                //if (Request.Cookies["TypePin"] != null)
                //{
                //    TypePin = Request.Cookies["TypePin"].Value;
                //    model.TypePin = Convert.ToInt16(TypePin);
                //}

                //if (Request.Cookies["TypeQuantity"] != null)
                //{
                //    var RepinCount = Request.Cookies["TypeQuantity"].Value.ToString();
                //    if(RepinCount == Commons.EQuantityType.ZeroToOne.ToString("d"))
                //    {
                //        FilterModel.PinCountFrom = 0;
                //        FilterModel.PinCountTo = 100;
                //    }

                //    if (RepinCount == Commons.EQuantityType.OneToTwo.ToString("d"))
                //    {
                //        FilterModel.PinCountFrom = 100;
                //        FilterModel.PinCountTo = 200;
                //    }
                //    if (RepinCount == Commons.EQuantityType.TwoToThree.ToString("d"))
                //    {
                //        FilterModel.PinCountFrom = 200;
                //        FilterModel.PinCountTo = 300;
                //    }
                //    if (RepinCount == Commons.EQuantityType.ThreeToFour.ToString("d"))
                //    {
                //        FilterModel.PinCountFrom = 300;
                //        FilterModel.PinCountTo = 400;
                //    }
                //    if (RepinCount == Commons.EQuantityType.FourToFive.ToString("d"))
                //    {
                //        FilterModel.PinCountFrom = 400;
                //        FilterModel.PinCountTo = 500;
                //    }
                //    if (RepinCount == Commons.EQuantityType.MoreFive.ToString("d"))
                //    {
                //        FilterModel.PinCountFrom = 500;
                //    }
                //    model.TypeQuantity = Convert.ToInt16(RepinCount);
                //}

                //if(Request.Cookies["Keywords"] != null)
                //{
                //    var Keywords = Request.Cookies["Keywords"].Value;
                //    char[] separator = new char[] { ',' };
                //    var ListKeyword = CommonHelper.ParseStringToList(Keywords, separator);
                //    FilterModel.lstKeyWordID = ListKeyword;
                //    model.listKeywords = ListKeyword;
                //}
                #endregion
                model.ListTime     = getListTime();
                model.ListQuantity = getListQuantity();
                model.ListIndex    = getListIndex();
                model.ListSort2    = getListSort2();
                // model.ListRePin = getListRepinCount();
                ViewBag.Keywords         = getListKeyword();
                ViewBag.ListGroupFanpage = getListGroupKeyword();
                if (!string.IsNullOrEmpty(_Key))
                {
                    FilterModel.LstKeyWordID.Add(_Key);
                    model.listKeywords.Add(_Key);
                }
                if (!string.IsNullOrEmpty(_Group))
                {
                    FilterModel.LstGroupID.Add(_Group);

                    var _lstKeywords = getListKeyWordByGroup(_Group);
                    model.listKeywords.AddRange(_lstKeywords);
                }

                var _pinModels = new List <PinsModels>();
                var msg        = "";
                int totalPin   = 0;
                var result     = _fac.GetPin(ref _pinModels, ref totalPin, FilterModel, ref msg);
                if (result)
                {
                    model.Crawler.Pins = _pinModels.OrderBy(x => x.Created_At).ToList();
                    #region "Comment"
                    //if (TypeTime.Equals(Commons.ETimeType.TimeReduce.ToString("d")))
                    //{
                    //    model.Crawler.Pins = model.Crawler.Pins.OrderByDescending(x => x.Created_At).ToList();
                    //}
                    //else if (TypeTime.Equals(Commons.ETimeType.TimeIncrease.ToString("d")))
                    //{
                    //    model.Crawler.Pins = model.Crawler.Pins.OrderBy(x => x.Created_At).ToList();
                    //}
                    //else if (TypePin.Equals(Commons.ETimeType.PinReduce.ToString("d")))
                    //{
                    //    model.Crawler.Pins = model.Crawler.Pins.OrderByDescending(x => x.Repin_count).ToList();
                    //}
                    //else if (TypePin.Equals(Commons.ETimeType.PinIncrease.ToString("d")))
                    //{
                    //    model.Crawler.Pins = model.Crawler.Pins.OrderBy(x => x.Repin_count).ToList();
                    //}
                    #endregion
                }
            }
            catch (Exception ex)
            {
            }
            return(View(model));
        }
        public bool GetPin(ref List <PinsModels> lstPins, ref int totalPin, PinFilterDTO filter, ref string msg)
        {
            var result = true;

            lstPins = new List <PinsModels>();

            try
            {
                using (var _db = new CMS_Context())
                {
                    var query = _db.CMS_Pin.Where(o => o.Status != (byte)Commons.EStatus.Deleted);

                    if (filter != null)
                    {
                        /* filter by list GROUP key words */
                        if (filter.LstGroupID != null)
                        {
                            if (filter.LstGroupID.Count > 0)
                            {
                                var lstKeyID = _db.CMS_R_GroupKey_KeyWord.Where(o => filter.LstGroupID.Contains(o.GroupKeyID) && o.Status != (byte)Commons.EStatus.Deleted).Select(o => o.KeyWordID).ToList();
                                if (lstKeyID.Count > 0)
                                {
                                    if (filter.LstKeyWordID == null)
                                    {
                                        filter.LstKeyWordID = new List <string>();
                                    }
                                    filter.LstKeyWordID.AddRange(lstKeyID);
                                }
                            }
                        }

                        /* filter by list KEY WORD */
                        if (filter.LstKeyWordID != null)
                        {
                            if (filter.LstKeyWordID.Count > 0)
                            {
                                var lstPinID = _db.CMS_R_KeyWord_Pin.Where(o => filter.LstKeyWordID.Contains(o.KeyWordID)).Select(o => o.PinID).ToList();
                                query = query.Where(o => lstPinID.Contains(o.ID));
                            }
                        }

                        /* filter by list GROUP BOARD */
                        if (filter.LstGroupBoardID != null)
                        {
                            if (filter.LstGroupBoardID.Count > 0)
                            {
                                var lstBoardID = _db.CMS_R_GroupBoard_Board.Where(o => filter.LstGroupBoardID.Contains(o.GroupBoardID) && o.Status != (byte)Commons.EStatus.Deleted).Select(o => o.BoardID).ToList();
                                if (lstBoardID.Count > 0)
                                {
                                    if (filter.LstBoardID == null)
                                    {
                                        filter.LstBoardID = new List <string>();
                                    }
                                    filter.LstBoardID.AddRange(lstBoardID);
                                }
                            }
                        }

                        /* filter by list BOARD */
                        if (filter.LstBoardID != null)
                        {
                            if (filter.LstBoardID.Count > 0)
                            {
                                var lstPinID = _db.CMS_R_Board_Pin.Where(o => filter.LstBoardID.Contains(o.BoardID)).Select(o => o.PinID).ToList();
                                query = query.Where(o => lstPinID.Contains(o.ID));
                            }
                        }

                        /* filter by create date */
                        if (filter.CreatedDateFrom != filter.CreatedDateTo && filter.CreatedDateTo != null)
                        {
                            query = query.Where(o => DbFunctions.TruncateTime(o.CreatedDate) >= DbFunctions.TruncateTime(filter.CreatedDateFrom) &&
                                                DbFunctions.TruncateTime(o.CreatedDate) <= DbFunctions.TruncateTime(filter.CreatedDateTo));
                        }

                        /* filter by create at */
                        if (filter.CreatedAtFrom != filter.CreatedAtTo && filter.CreatedAtTo != null)
                        {
                            query = query.Where(o => DbFunctions.TruncateTime(o.Created_At) >= DbFunctions.TruncateTime(filter.CreatedAtFrom) &&
                                                DbFunctions.TruncateTime(o.Created_At) <= DbFunctions.TruncateTime(filter.CreatedAtTo));
                        }

                        /* filter by pin count */
                        if (filter.PinCountFrom != null)
                        {
                            query = query.Where(o => o.Repin_count >= filter.PinCountFrom);
                        }

                        if (filter.PinCountTo != null)
                        {
                            query = query.Where(o => o.Repin_count <= filter.PinCountTo);
                        }

                        /* get total pin */
                        totalPin = query.Count();

                        /* order data */
                        if (filter.TypeTime.Equals(Commons.ETimeType.TimeReduce.ToString("d")))
                        {
                            query = query.OrderByDescending(x => x.Created_At).ThenBy(o => o.ID);
                        }
                        else if (filter.TypeTime.Equals(Commons.ETimeType.TimeIncrease.ToString("d")))
                        {
                            query = query.OrderBy(x => x.Created_At).ThenBy(o => o.ID);
                        }
                        else if (filter.TypeTime.Equals(Commons.ETimeType.PinReduce.ToString("d")))
                        {
                            query = query.OrderByDescending(x => x.Repin_count).ThenBy(o => o.ID);
                        }
                        else if (filter.TypeTime.Equals(Commons.ETimeType.PinIncrease.ToString("d")))
                        {
                            query = query.OrderBy(x => x.Repin_count).ThenBy(o => o.ID);
                        }
                        else if (filter.TypeTime.Equals(Commons.ETimeType.ToolReduce.ToString("d")))
                        {
                            query = query.OrderByDescending(x => x.CreatedDate).ThenBy(o => o.ID);
                        }
                        else if (filter.TypeTime.Equals(Commons.ETimeType.ToolIncrease.ToString("d")))
                        {
                            query = query.OrderBy(x => x.CreatedDate).ThenBy(o => o.ID);
                        }

                        /* get by page size - page index */
                        query = query.Skip((filter.PageIndex - 1) * filter.PageSize).Take(filter.PageSize);
                    }

                    lstPins = query.Select(o => new PinsModels()
                    {
                        ID          = o.ID,
                        Link        = o.Link,
                        Domain      = o.Domain,
                        Repin_count = o.Repin_count ?? 0,
                        Images      = new List <ImageModels>()
                        {
                            new ImageModels()
                            {
                                url = o.ImageUrl,
                            },
                        },
                        Created_At  = o.Created_At ?? DateTime.MinValue,
                        CreatedDate = o.CreatedDate ?? DateTime.MinValue,
                        UpdateDate  = o.UpdatedDate ?? DateTime.MinValue,
                        Board       = new CMS_BoardModels()
                        {
                            id   = o.BoardID,
                            name = o.BoardName,
                            url  = o.BoardUrl,
                        }
                        //LastTime = CommonHelper.GetDurationFromNow(o.UpdatedDate),
                    }).ToList();
                }
            }
            catch (Exception ex)
            {
                msg    = "CreateOrUpdate Pin with exception.";
                result = false;
            }
            finally
            {
            }
            return(result);
        }
        // GET: Admin/CMSCategories
        public ActionResult Index()
        {
            CMS_ProductsModels model = new CMS_ProductsModels();

            try
            {
                var _Key        = Request["BoardID"] ?? "";
                var _Group      = Request["GroupID"] ?? "";
                var FilterModel = new PinFilterDTO();
                FilterModel.PageIndex = Commons.PageIndex;
                FilterModel.PageSize  = Commons.PageSize;
                FilterModel.TypeTime  = Commons.ETimeType.TimeReduce.ToString("d");
                model.ListTime        = getListTime();
                model.ListQuantity    = getListQuantity();
                // model.ListRePin = getListRepinCount();
                var lstBoard = getListBoard();
                ViewBag.Keywords = lstBoard;
                if (!string.IsNullOrEmpty(_Key))
                {
                    FilterModel.LstBoardID.Add(_Key);
                    model.listBoards.Add(_Key);
                }
                if (!string.IsNullOrEmpty(_Group))
                {
                    FilterModel.LstGroupBoardID.Add(_Group);

                    var _lstKeywords = getListBoardByGroud(_Group);
                    FilterModel.LstBoardID = _lstKeywords;
                    model.listBoards.AddRange(_lstKeywords);
                }

                if (FilterModel.LstBoardID.Count == 0)
                {
                    FilterModel.LstBoardID = lstBoard.Select(o => o.Value).ToList();
                }

                if (FilterModel.LstBoardID != null && FilterModel.LstBoardID.Count > 0)
                {
                    var _pinModels = new List <PinsModels>();
                    var msg        = "";
                    int totalPin   = 0;
                    var result     = _fac.GetPin(ref _pinModels, ref totalPin, FilterModel, ref msg);
                    if (result)
                    {
                        model.Crawler.Pins = _pinModels.OrderBy(x => x.Created_At).ToList();
                        #region "Comment"
                        //if (TypeTime.Equals(Commons.ETimeType.TimeReduce.ToString("d")))
                        //{
                        //    model.Crawler.Pins = model.Crawler.Pins.OrderByDescending(x => x.Created_At).ToList();
                        //}
                        //else if (TypeTime.Equals(Commons.ETimeType.TimeIncrease.ToString("d")))
                        //{
                        //    model.Crawler.Pins = model.Crawler.Pins.OrderBy(x => x.Created_At).ToList();
                        //}
                        //else if (TypePin.Equals(Commons.ETimeType.PinReduce.ToString("d")))
                        //{
                        //    model.Crawler.Pins = model.Crawler.Pins.OrderByDescending(x => x.Repin_count).ToList();
                        //}
                        //else if (TypePin.Equals(Commons.ETimeType.PinIncrease.ToString("d")))
                        //{
                        //    model.Crawler.Pins = model.Crawler.Pins.OrderBy(x => x.Repin_count).ToList();
                        //}
                        #endregion
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return(View(model));
        }