Beispiel #1
0
        public void ShouldFindDateTime_In_PrivateClassWithDateTimeNow()
        {
            //Arrange
            DateTimeChecker dateTimeChecker = new DateTimeChecker();
            Type            classType       = typeof(PrivateClassWrapper);
            string          methodToTest    = "System.Void PrivateClassWithDateTime::PrivateMethod()";

            //Act
            IEnumerable <string> methodNames = dateTimeChecker.MethodsContainingDateTimeInAssemblyOfType(classType);

            //Assert
            Assert.That(methodNames.Where(w => w == methodToTest), Is.Not.Empty);
        }
Beispiel #2
0
        public void ShouldFindDateTime_In_ClassWithDateTime_Now()
        {
            //Arrange
            DateTimeChecker dateTimeChecker = new DateTimeChecker();
            Type            classType       = typeof(ClassWithDateTime);
            string          methodToTest    = "System.Void ExampleClass.ClassWithDateTime::MethodWithDateTimeNow()";

            String methodName =
                classType.GetMethods()
                .Single(w => w.Name.Contains(methodToTest)).Name;

            //Act
            IEnumerable <string> methodNames = dateTimeChecker.MethodsContainingDateTimeInAssemblyOfType(classType);

            //Assert
            Assert.That(methodNames.Where(w => w == methodName), Is.Not.Empty);
        }
Beispiel #3
0
        internal static bool CommunicateOrderTmp(string userId, int QID, int OID, string seletedDateTimeStatus, string selecteddateTime, string channelAccessToken)
        {
            OrderTemp orderTmp            = new OrderTemp(userId);
            DateTime  dateTime            = Convert.ToDateTime(selecteddateTime);
            bool      BothTimeHasFilledIn = false;
            string    message             = "";

            if (DateTimeChecker.DateTimeCheckIsEarlierThanNow(dateTime))
            {
                message = "不要選擇過時的時間哦~";
            }
            else
            {
                switch (seletedDateTimeStatus)
                {
                case "start":

                    //先判斷有沒有比暫存結束時間晚
                    if (!DateTimeChecker.CompareIsLaterThanEndTime(dateTime, orderTmp))
                    {
                        orderTmp.StartTime = dateTime;
                        orderTmp.UpdateStartTime();
                        BothTimeHasFilledIn = orderTmp.CheckBothTimeHasFilledIn(orderTmp);
                        if (!BothTimeHasFilledIn)
                        {
                            message = $"訂單發出時間: {dateTime.ToString("yyyy-MM-dd HH:mm")}";
                        }
                        else
                        {
                            isRock.LineBot.Utility.PushMessage(userId, $"訂單發出時間: {dateTime.ToString("yyyy-MM-dd HH:mm")}", channelAccessToken);
                            message = "選擇時間完畢!";
                        }
                    }
                    else
                    {
                        message = "開始時間無法比結束時間晚哦~";
                    }
                    break;

                case "end":
                    //先判斷有沒有比暫存結束時間晚
                    if (!DateTimeChecker.CompareIsEarlierThanStartTime(dateTime, orderTmp))
                    {
                        orderTmp.EndTime = dateTime;
                        orderTmp.UpdateEndTime();
                        BothTimeHasFilledIn = orderTmp.CheckBothTimeHasFilledIn(orderTmp);
                        if (!BothTimeHasFilledIn)
                        {
                            message = $"訂單結束時間: {dateTime.ToString("yyyy-MM-dd HH:mm")}";
                        }
                        else
                        {
                            isRock.LineBot.Utility.PushMessage(userId, $"訂單結束時間: {dateTime.ToString("yyyy-MM-dd HH:mm")}", channelAccessToken);
                            message = "選擇時間完畢!";
                        }
                    }
                    else
                    {
                        message = "開始時間無法比結束時間晚哦~";
                    }
                    break;

                default:
                    break;
                }
            }
            isRock.LineBot.Utility.PushMessage(userId, message, channelAccessToken);
            return(BothTimeHasFilledIn);
        }
Beispiel #4
0
        internal static bool CommunicatePeriodOrderTmpForDate(string userId, int QID, int OID, string seletedDateTimeStatus, string selecteddateTime, string channelAccessToken)
        {
            PeriodOrderTmp periodOrderTmp      = new PeriodOrderTmp(userId);
            DateTime       dateTime            = Convert.ToDateTime(selecteddateTime);
            bool           BothTimeHasFilledIn = false;
            string         message             = "";

            if (DateTimeChecker.DateTimeCheckIsEarlierThanNowForPeriod(dateTime))
            {
                message = "不要選擇過時的時間哦~";
            }

            else
            {
                switch (seletedDateTimeStatus)
                {
                case "start":

                    //先判斷有沒有比暫存結束時間晚
                    if (!DateTimeChecker.DateTimeCompareIsLaterThanEndTime(dateTime, periodOrderTmp))
                    {
                        periodOrderTmp.StartDate = dateTime;
                        periodOrderTmp.UpdateStartDate();
                        BothTimeHasFilledIn = periodOrderTmp.CheckBothDateHasFilledIn(periodOrderTmp);
                        if (!BothTimeHasFilledIn)
                        {
                            message = $"週期開始日期: {dateTime.ToShortDateString()}";
                        }
                        else
                        {
                            isRock.LineBot.Utility.PushMessage(userId, $"週期開始日期: {dateTime.ToShortDateString()}", channelAccessToken);
                            message = "選擇時間完畢!";
                        }
                    }
                    else
                    {
                        message = "開始時間無法比結束時間晚~";
                    }
                    break;

                case "end":
                    //先判斷有沒有比暫存結束時間晚
                    if (!DateTimeChecker.DateTimeCompareIsEarlierThanStartTime(dateTime, periodOrderTmp))
                    {
                        periodOrderTmp.EndDate = dateTime;
                        periodOrderTmp.UpdateEndDate();
                        BothTimeHasFilledIn = periodOrderTmp.CheckBothDateHasFilledIn(periodOrderTmp);
                        if (!BothTimeHasFilledIn)
                        {
                            message = $"週期結束日期: {dateTime.ToShortDateString()}";
                        }
                        else
                        {
                            isRock.LineBot.Utility.PushMessage(userId, $"週期結束日期: {dateTime.ToShortDateString()}", channelAccessToken);
                            message = "選擇時間完畢!";
                        }
                    }
                    else
                    {
                        message = "開始時間無法比結束時間晚哦~";
                    }
                    break;

                default:
                    break;
                }
            }
            isRock.LineBot.Utility.PushMessage(userId, message, channelAccessToken);
            return(BothTimeHasFilledIn);
        }
Beispiel #5
0
        internal static string MyPeriodOrderCommunicate(string userId, int QID, int OID, string OrderName, string channelAccessToken)
        {
            PeriodOrderTmp periodOrderTmp = new PeriodOrderTmp(userId);

            periodOrderTmp.SelectAllByUserID();
            OrderInfo orderinfo = new OrderInfo(); //準備輸入SQL

            switch (QID)                           //根據QID不同初始化clubOrderAndMyOrder
            {
            case 211:
                orderinfo = new OrderInfo(userId, OrderName);
                break;

            default:
                break;
            }


            //切割週期時間
            DateTime st1 = periodOrderTmp.StartDate.Add(periodOrderTmp.StartTime); //第一次開單時間點
            DateTime et1 = periodOrderTmp.EndDate.Add(periodOrderTmp.StartTime);   //最後一次開單時間點
            DateTime st2 = periodOrderTmp.StartDate.Add(periodOrderTmp.EndTime);   //第一次收單時間點
            DateTime et2 = periodOrderTmp.EndDate.Add(periodOrderTmp.EndTime);     //最後一次收單時間點

            if (DateTimeChecker.DateTimeCheckIsEarlierThanNow(st1))                //週期單開始時間點若是比現在時間點早則往後一天
            {
                st1 = st1.AddDays(1);
                st2 = st2.AddDays(1);
            }


            List <string> weekList = new List <string>();

            if (periodOrderTmp.Monday == "Y")
            {
                weekList.Add("Monday");
            }
            if (periodOrderTmp.Tuesday == "Y")
            {
                weekList.Add("Tuesday");
            }
            if (periodOrderTmp.Wednesday == "Y")
            {
                weekList.Add("Wednesday");
            }
            if (periodOrderTmp.Thursday == "Y")
            {
                weekList.Add("Thursday");
            }
            if (periodOrderTmp.Friday == "Y")
            {
                weekList.Add("Friday");
            }
            if (periodOrderTmp.Saturday == "Y")
            {
                weekList.Add("Saturday");
            }
            if (periodOrderTmp.Sunday == "Y")
            {
                weekList.Add("Sunday");
            }
            List <DateTime> dateTimes  = PeriodSplitter.Cut(st1, et1, weekList); //得到每次的開單時間點
            List <DateTime> dateTimes2 = PeriodSplitter.Cut(st2, et2, weekList); //得到每次的收單時間點

            //
            orderinfo.OrderType   = "Period";
            orderinfo.OrderStatus = "wait";

            //開始撈取使用者選擇的複數商店
            ShopListTemp        shopListTemp        = new ShopListTemp(userId);
            List <ShopListTemp> shopListTemps       = shopListTemp.SelectByUserID(); //選取的商店清單
            List <ShopListTemp> randomshopListTemps = new List <ShopListTemp>();     //準備一個要裝進符合選取天數的清單

            //將randomshopListTemps打亂
            while (randomshopListTemps.Count <= dateTimes.Count)
            {
                for (int i = 0; i < shopListTemps.Count; i++)
                {
                    Swap(shopListTemps);
                }
                for (int i = 0; i < shopListTemps.Count; i++)
                {
                    randomshopListTemps.Add(shopListTemps[i]);
                }
            }
            //

            int    result = 0;
            int    count  = 0; //用來檢查迴圈有沒有跑完
            string OrderID;

            switch (QID)
            {
            case 211:
                OrderID = orderinfo.OrderID;
                for (int i = 0; i < dateTimes.Count; i++)
                {
                    orderinfo.StartTime        = dateTimes[i];
                    orderinfo.EndTime          = dateTimes2[i];
                    orderinfo.ShopID           = randomshopListTemps[i].ShopID;
                    orderinfo.OrderPartitionID = "MOP" + OrderID + $"-{ dateTimes[i].ToString("yyyyMMdd")}";
                    result = orderinfo.InserMyOrderTableToSQL();
                    if (result <= 0)
                    {
                        break;
                    }
                    count++;
                }

                break;

            default:
                break;
            }
            if (count == dateTimes.Count)
            {
                UserStatus userStatus = new UserStatus(userId);
                userStatus.InitializeUserStatusByUserID();
                periodOrderTmp = new PeriodOrderTmp(userId);
                periodOrderTmp.UpdateInitialPeriodOrderTmp();
                orderinfo.InsertOrdeUserTable();
                shopListTemp.DeleteByUserID();

                isRock.LineBot.Utility.PushMessage(userId, orderinfo.OrderID, channelAccessToken);
                // string orderCreateMessage = "上面是你的訂單參加碼,可以將此參加碼分享給其他人,讓其他人加入你的訂單喔~";
                // isRock.LineBot.Utility.PushMessage(userId, orderCreateMessage, channelAccessToken);

                return("訂單建立成功喔~~\n上面是你的訂單參加碼,可以將此參加碼分享給其他人,讓其他人加入你的訂單喔~");
            }
            else
            {
                return("訂單建立失敗");
            }
        }
Beispiel #6
0
        internal static bool CommunicatePeriodOrderTmpTime(string userId, int QID, int OID, string seletedDateTimeStatus, string selecteddateTime, string channelAccessToken)
        {
            PeriodOrderTmp periodOrderTmp      = new PeriodOrderTmp(userId);
            TimeSpan       dateTime            = TimeSpan.Parse(selecteddateTime);
            bool           BothTimeHasFilledIn = false;
            string         message             = "";

            switch (seletedDateTimeStatus)
            {
            case "start":

                //先判斷有沒有比暫存結束時間晚
                if (!DateTimeChecker.TimeCompareIsLaterThanEndTime(dateTime, periodOrderTmp))
                {
                    periodOrderTmp.StartTime = dateTime;
                    periodOrderTmp.UpdateStartTime();
                    BothTimeHasFilledIn = periodOrderTmp.CheckBothTimeHasFilledIn(periodOrderTmp);
                    if (!BothTimeHasFilledIn)
                    {
                        message = $"每次開單時間: {dateTime.ToString(@"hh\:mm")}";
                    }
                    else
                    {
                        isRock.LineBot.Utility.PushMessage(userId, $"每次開單時間: {dateTime.ToString(@"hh\:mm")}", channelAccessToken);
                        message = "選擇時間完畢!";
                    }
                }
                else
                {
                    message = "開始時間無法比結束時間晚~";
                }
                break;

            case "end":
                //先判斷有沒有比暫存結束時間晚
                if (!DateTimeChecker.TimeCompareIsEarlierThanStartTime(dateTime, periodOrderTmp))
                {
                    periodOrderTmp.EndTime = dateTime;
                    periodOrderTmp.UpdateEndTime();
                    BothTimeHasFilledIn = periodOrderTmp.CheckBothTimeHasFilledIn(periodOrderTmp);
                    if (!BothTimeHasFilledIn)
                    {
                        message = $"每次結單時間: {dateTime.ToString(@"hh\:mm")}";
                    }
                    else
                    {
                        isRock.LineBot.Utility.PushMessage(userId, $"每次結單時間: {dateTime.ToString(@"hh\:mm")}", channelAccessToken);
                        message = "選擇時間完畢!";
                    }
                }
                else
                {
                    message = "開單時間無法比結單時間晚哦~";
                }
                break;

            default:
                break;
            }
            isRock.LineBot.Utility.PushMessage(userId, message, channelAccessToken);
            return(BothTimeHasFilledIn);
        }