Example #1
0
        public ActionResult Index2(RegionCondition Condition)
        {
            ListRegionModel model = new ListRegionModel();

            int totalRecord = 0;

            model.ListRegion = regionService.List(Condition.CityId, Condition.DistrictId, Condition.SearchText, Condition.Page, Condition.PageSize, out totalRecord);
            model.ListCity   = placeService.ListPlaceItemByParent(0);
            model.ListCity.Insert(0, new Entities.Item()
            {
                Id = 0, Text = "Chọn tỉnh, thành phố"
            });
            if (Condition.CityId > 0)
            {
                model.ListDistrict = placeService.ListPlaceItemByParent(Condition.CityId);
            }
            else
            {
                model.ListDistrict = new List <Entities.Item>();
            }
            model.ListDistrict.Insert(0, new Entities.Item()
            {
                Id = 0, Text = "Chọn quận huyện"
            });
            model.Condition = Condition;
            Paging(Condition.Page, totalRecord);
            return(View(model));
        }
Example #2
0
        //選取多個region(縣市)
        public void SelectMultiRegion_Expect_Success()
        {
            var searchCondition = new RegionCondition();

            searchCondition.Region.Add(Helper.GetLocationIdByName("台北市"));
            searchCondition.Region.Add(Helper.GetLocationIdByName("新北市"));
            var generator = new UrlGenerator();
            var result    = generator.ConvertFilterConditionToRegionList(searchCondition);

            Assert.IsTrue(result.Count == 2);
        }
Example #3
0
        //只有選擇捷運站
        public void OnlyChooseMrtCoods()
        {
            var searchCondition = new RegionCondition();

            searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("鳳山國中"));
            var generator = new UrlGenerator();
            var result    = generator.ConvertFilterConditionToRegionList(searchCondition);

            Assert.IsTrue(result.Count == 1);
            Assert.IsTrue(result.First(x => x.txt == "高雄市").mrt.mrtline.First().station.First().name == "鳳山國中");
        }
Example #4
0
        //只有選擇鄉鎮
        public void OnlyChooseSection()
        {
            var searchCondition = new RegionCondition();

            searchCondition.Section.Add(Helper.GetLocationIdByName("國姓鄉"));
            var generator = new UrlGenerator();
            var result    = generator.ConvertFilterConditionToRegionList(searchCondition);

            Assert.IsTrue(result.Count == 1);
            Assert.IsTrue(result.First(x => x.txt == "南投縣").section.First().name == "國姓鄉");
        }
Example #5
0
        //如果鄉鎮不在該縣市底下,會選擇該縣市及該鄉鎮
        public void CrossRegionSection_Expect_Success()
        {
            var searchCondition = new RegionCondition();

            searchCondition.Region.Add(Helper.GetLocationIdByName("高雄市"));
            searchCondition.Section.Add(Helper.GetLocationIdByName("安平區"));
            var generator = new UrlGenerator();
            var result    = generator.ConvertFilterConditionToRegionList(searchCondition);

            Assert.IsTrue(result.Count == 2);
            Assert.IsTrue(result.First(x => x.txt == "高雄市").section.Count == 0);
            Assert.IsTrue(result.First(x => x.txt == "台南市").section.Count == 1);
        }
Example #6
0
        //只選一個縣市
        public void OnlySelectRegion_Expect_Success()
        {
            var searchCondition = new RegionCondition();

            searchCondition.Region.Add(Helper.GetLocationIdByName("台北市"));
            var generator = new UrlGenerator();
            var result    = generator.ConvertFilterConditionToRegionList(searchCondition);

            Assert.IsTrue(result.First().txt == "台北市");

//            var urlResult = generator.GenerateUrlBySearchModel(searchCondition);
//            Assert.IsTrue(urlResult.Count>1);
        }
Example #7
0
        //捷運線不在縣市底下, 會略過
        public void CrossRegionMrtLine_Expect_Success()
        {
            var searchCondition = new RegionCondition();

            searchCondition.Region.Add(Helper.GetLocationIdByName("台北市"));
            searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("凱旋"));
            searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("三多商圈"));
            var generator = new UrlGenerator();
            var result    = generator.ConvertFilterConditionToRegionList(searchCondition);

            Assert.IsTrue(result.Count == 2);
            Assert.IsTrue(result.First(x => x.txt == "台北市").mrt == null);
            Assert.IsTrue(result.First(x => x.txt == "高雄市").mrt.mrtline.First().name == "紅線");
        }
Example #8
0
        public void SelectRegionAndMrtLineAndMrtCoods_Expect_Success()
        {
            var searchCondition = new RegionCondition();

            //紅線底下的捷運站
            searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("高雄國際機場"));
            searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("凱旋"));
            searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("三多商圈"));
            var generator = new UrlGenerator();
            var result    = generator.ConvertFilterConditionToRegionList(searchCondition);

            Assert.IsTrue(result.First().txt == "高雄市");
            Assert.IsTrue(result.First().mrt.mrtline.First().station.Count == 3);
        }
Example #9
0
        //如果該region底下沒東西,也要組出url
        //如果有選捷運,依據捷運線所屬哪個捷運,組出mrt參數(對應到region 桃捷=6 北捷=1 高雄捷運=17)
        public List <string> GenerateUrlBySearchModel(RegionCondition regionCondition)
        {
            var conditionQueryString = new List <string>();


            //依據region,將搜尋條件group by
            var conditionList = ConvertFilterConditionToRegionList(regionCondition);

            //loop每個縣市
            foreach (var region in conditionList)
            {
                var regionQs = $"region={region.id}";
                //loop每個租屋類型
                foreach (var kind in regionCondition.kind)
                {
                    var kindQs = $"kind={kind}";
                    if (region.section.Any())
                    {
                        var sectionQs = regionQs + "&" + kindQs + "&" +
                                        $"section={String.Join(",", region.section.Select(x => x.id))}";
                        conditionQueryString.Add(sectionQs);
                    }

                    //如果這縣市有捷運
                    if (region.mrt != null)
                    {
                        var mrtQs = $"MrtRegionId={region.mrt.MrtRegionId}";
                        foreach (var mrtline in region.mrt.mrtline)
                        {
                            var mrtlineQs   = $"mrtline={mrtline.sid}";
                            var mrtStaionQs = regionQs + "&" + kindQs + "&" + mrtQs + "&" + mrtlineQs + "&" +
                                              $"section={String.Join(",", mrtline.station.Select(x => x.nid))}";
                            conditionQueryString.Add(mrtStaionQs);
                        }
                    }



                    if (region.section.Count == 0 && (region.mrt == null || region.mrt.mrtline.Count == 0))
                    {
                        //組出region的url region + kind
                        conditionQueryString.Add(regionQs + "&" + kindQs);
                    }
                }
            }

            return(conditionQueryString);
        }
Example #10
0
        //測試跨捷運線的捷運站
        public void CrossMrtLineStation_Expect_Success()
        {
            var searchCondition = new RegionCondition();

            //台北市
            searchCondition.Region.Add(Helper.GetLocationIdByName("台北市"));
            searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("南港展覽館"));
            searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("大湖公園"));
            searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("台北小巨蛋"));

            var generator = new UrlGenerator();
            var result    = generator.ConvertFilterConditionToRegionList(searchCondition);

            Assert.IsTrue(result.Count > 0);
            Assert.IsTrue(result.First().mrt.mrtline.First(x => x.name == "文湖線").station.Count == 2);
            Assert.IsTrue(result.First().mrt.mrtline.First(x => x.name == "松山新店線").station.Count == 1);
        }
Example #11
0
        //選取多個鄉鎮
        public void SelectMultipleSection_Expect_Success()
        {
            var searchCondition = new RegionCondition();

            searchCondition.Section.Add(Helper.GetLocationIdByName("旗津區"));
            searchCondition.Section.Add(Helper.GetLocationIdByName("鳳山區"));
            searchCondition.Section.Add(Helper.GetLocationIdByName("銅鑼鄉"));
            searchCondition.Section.Add(Helper.GetLocationIdByName("東勢區"));
            searchCondition.Section.Add(Helper.GetLocationIdByName("霧峰區"));
            searchCondition.Section.Add(Helper.GetLocationIdByName("烏日區"));
            var generator = new UrlGenerator();
            var result    = generator.ConvertFilterConditionToRegionList(searchCondition);

            Assert.IsTrue(result.Count > 0);
            Assert.IsTrue(result.First(x => x.txt == "高雄市").section.Count == 2);
            Assert.IsTrue(result.First(x => x.txt == "苗栗縣").section.Count == 1);
            Assert.IsTrue(result.First(x => x.txt == "台中市").section.Count == 3);
        }
Example #12
0
        //選取多個縣市及底下的鄉鎮
        public void SelectRegionsAndSection_Expect_Success()
        {
            var searchCondition = new RegionCondition();

            searchCondition.Region.Add(Helper.GetLocationIdByName("高雄市"));
            searchCondition.Section.Add(Helper.GetLocationIdByName("鼓山區"));
            searchCondition.Section.Add(Helper.GetLocationIdByName("楠梓區"));

            searchCondition.Region.Add(Helper.GetLocationIdByName("南投縣"));
            searchCondition.Section.Add(Helper.GetLocationIdByName("埔里鎮"));
            searchCondition.Section.Add(Helper.GetLocationIdByName("中寮鄉"));
            searchCondition.Section.Add(Helper.GetLocationIdByName("仁愛鄉"));
            var generator = new UrlGenerator();
            var result    = generator.ConvertFilterConditionToRegionList(searchCondition);

            Assert.IsTrue(result.Count > 0);
            Assert.IsTrue(result.First(x => x.txt == "高雄市").section.Count == 2);
            Assert.IsTrue(result.First(x => x.txt == "南投縣").section.Count == 3);
        }
Example #13
0
 public void NoSelectRegion_Mrt_Section_Expect_Exception()
 {
     var searchCondition = new RegionCondition();
     var generator       = new UrlGenerator();
     var result          = generator.ConvertFilterConditionToRegionList(searchCondition);
 }
Example #14
0
        public List <Region> ConvertFilterConditionToRegionList(RegionCondition condition)
        {
            //取出region跟mrt對照表
            var locationEntity = LocationJson.GetInstance();

            if (condition.Region.Count == 0 && condition.mrtcoods.Count == 0 && condition.Section.Count == 0)
            {
                throw new InvalidSettingException("Please choose Region or MrtCoods or Section in settings.conf");
            }
            //取出所選擇的縣市
            var regionList = locationEntity.regionEntity.region
                             .ToList()
                             .DeepClone <List <Region> >();


            for (int i = regionList.Count - 1; i >= 0; i--)
            {
                var currentRegion = regionList[i];
                //如果搜尋條件有指定此縣市底下的鄉鎮
                if (condition.Section.Intersect(currentRegion.section.Select(x => x.id)).Any())
                {
                    //移除其他沒被指定到的鄉鎮
                    currentRegion.section.RemoveAll(x => !condition.Section.Contains(x.id));
                }
                else
                {
                    //如果沒指定代表全選,刪掉所有鄉鎮,這樣才不會loop到
                    currentRegion.section.Clear();
                }

                //如果這縣市有捷運 再做捷運站判斷
                if (currentRegion.mrt != null)
                {
                    if (condition.mrtcoods.Count > 0)
                    {
                        //loop每個捷運線
                        for (int k = currentRegion.mrt.mrtline.Count - 1; k >= 0; k--)
                        {
                            //如果有選擇此捷運線的捷運站,刪掉其他沒選擇到的捷運站
                            var currentMrtLine = currentRegion.mrt.mrtline[k];
                            if (condition.mrtcoods.Intersect(currentMrtLine.station.Select(x => x.nid)).Any())
                            {
                                currentMrtLine.station.RemoveAll(x => !condition.mrtcoods.Contains(x.nid));
                            }
                            else
                            {
                                //刪掉此捷運線
                                currentRegion.mrt.mrtline.Remove(currentMrtLine);
                            }
                        }
                        //代表選擇的捷運站不在此捷運底下
                        if (currentRegion.mrt.mrtline.Count == 0)
                        {
                            currentRegion.mrt = null;
                        }
                    }
                    else
                    {
                        //沒選捷運站 直接拿掉此region的捷運
                        currentRegion.mrt = null;
                    }
                }

                //如果沒有選擇此region,又沒有選在這region底下的捷運或鄉鎮,就刪掉這個region
                if (currentRegion.section.Count == 0 && currentRegion.mrt == null &&
                    !condition.Region.Contains(currentRegion.id))
                {
                    regionList.Remove(currentRegion);
                }
            }
            return(regionList);
        }