예제 #1
0
        /// <summary>
        /// 施設予約
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override Task <ReservationTime> Reserve(ReservationTime request, ServerCallContext context)
        {
            //リクエストパラメータを取得する
            DateTimeOffset requestDateTimeUtc = request.Time.ToDateTimeOffset();
            //TimeSpan requestTimeZone = request.TimeZone.ToTimeSpan();
            TimeSpan requestTimeZone        = TimeSpan.Zero;
            TimeSpan requestCountryTimeZone = request.CountryTimeZone.ToTimeSpan();

            DateTimeOffset requestDateTimeOffset =
                new DateTimeOffset(requestDateTimeUtc.DateTime, requestTimeZone);
            DateTimeOffset requestCountryDateTimeOffset =
                new DateTimeOffset(requestDateTimeUtc.ToOffset(requestCountryTimeZone).DateTime, requestCountryTimeZone);

            TimeSpan requestTimeSpan = request.Duration.ToTimeSpan();

            //日程調整
            requestCountryDateTimeOffset = ScheduleAdjustment(requestCountryDateTimeOffset, requestTimeSpan);

            //予約日時を設定する。
            ReservationTime reservation = new ReservationTime();

            reservation.Subject = request.Subject;
            //reservation.Time = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTimeOffset(requestDateTimeOffset);
            reservation.Time            = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTimeOffset(requestCountryDateTimeOffset);
            reservation.Duration        = Google.Protobuf.WellKnownTypes.Duration.FromTimeSpan(requestTimeSpan);
            reservation.TimeZone        = request.TimeZone;
            reservation.CountryTimeZone = Google.Protobuf.WellKnownTypes.Duration.FromTimeSpan(requestCountryTimeZone);

            //予約日時を返す。
            return(Task.FromResult(reservation));
        }
예제 #2
0
        public ActionResult Reserve(int apartmentId, DateTime startTime, DateTime endTime)
        {
            for (var dt = startTime; dt <= endTime; dt = dt.AddMonths(1))
            {
                var rt = new ReservationTime {
                    Month = dt.Month, Year = dt.Year
                };
                if (reservationService.IsReserved(apartmentId, rt))
                {
                    return(RedirectToAction("Error", new { message = "This period is reserved" }));
                }
            }

            var resevation = new Reservation
            {
                AppartmentId = apartmentId,
                StartTime    = new ReservationTime {
                    Month = startTime.Month, Year = startTime.Year
                },
                EndTime = new ReservationTime {
                    Month = endTime.Month, Year = endTime.Year
                },
                TenantId = _tenant.Id
            };
            var reservation = reservationService.Create(resevation);

            return(RedirectToAction("ReservationDetails", new { reservationId = reservation.Id }));
        }
예제 #3
0
        private void ChangeTZButtonButton_Click(object sender, RoutedEventArgs e)
        {
            //選択していない場合は無視する。
            if (this.xSampleDatePicker.SelectedDate == null)
            {
                return;
            }

            if (this.xSampleTimeSpanComboBox.SelectedValue == null)
            {
                return;
            }

            //時間を文字列から数値に変換する。
            int hour, minute;

            if (int.TryParse(this.xSampleHourTextBox.Text, out hour) == false)
            {
                return;
            }

            if (hour >= 24)
            {
                this.xSampleHourTextBox.Text = "×24超";
                return;
            }

            if (int.TryParse(this.xSampleMinuteTextBox.Text, out minute) == false)
            {
                return;
            }

            if (minute >= 60)
            {
                this.xSampleMinuteTextBox.Text = "×60超";
                return;
            }

            //タイムゾーンを設定
            DateTime date     = this.xSampleDatePicker.SelectedDate.Value;
            TimeSpan timeZone = ((KeyValuePair <string, TimeSpan>) this.xSampleTimeSpanComboBox.SelectedValue).Value;

            DateTime dateTime = new DateTime(date.Year, date.Month, date.Day, hour, minute, 0, DateTimeKind.Utc);

            //ReservationTime 作成
            ReservationTime reservationTime = new ReservationTime();

            reservationTime.Time     = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(dateTime);
            reservationTime.TimeZone = Google.Protobuf.WellKnownTypes.Duration.FromTimeSpan(timeZone);

            // gRPC サービスを呼び出す。
            var reply = this.grpcClient.GreeterClient.ChangeTimeZone(reservationTime);

            // 時差日を表示する。
            DateTime replyDateTime = reply.Time.ToDateTime();
            TimeSpan timeSpan      = reply.TimeZone.ToTimeSpan();

            this.xChangeTextBox.Text = replyDateTime.ToString("yyyy年MM月dd日 H時m分") + " / TimeZone = " + timeSpan.ToString();
        }
예제 #4
0
        private void BtnAddReservation_Click(object sender, RoutedEventArgs e)
        {
            Tuple <int, int> selectedStartTime = (Tuple <int, int>)ComboBoxStartTime.SelectedItem;
            DateTime         startTime         = new DateTime(1900, 1, 1, selectedStartTime.Item1, selectedStartTime.Item2, 0);

            Tuple <int, int> selectedEndTime = (Tuple <int, int>)ComboBoxEndTime.SelectedItem;
            DateTime         endTime         = new DateTime(1900, 1, 1, selectedEndTime.Item1, selectedEndTime.Item2, 0);

            ReservationTime rt = new ReservationTime()
            {
                Date = (DateTime)DTPickerDateOfReservation.SelectedDate, StartTime = startTime, EndTime = endTime
            };

            res.ReservationTimes.Add(rt);
        }
예제 #5
0
        public List <ReservationTime> GetReservedTimes(int id, DateTime startTime, DateTime endTime)
        {
            var result = new List <ReservationTime>();

            while (startTime < endTime)
            {
                var rt = new ReservationTime {
                    Month = startTime.Month, Year = startTime.Year
                };
                if (IsReserved(id, rt))
                {
                    result.Add(rt);
                }
                startTime = startTime.AddMonths(1);
            }
            return(result);
        }
예제 #6
0
        /// <summary>
        /// 時差の変更
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override Task <ReservationTime> ChangeTimeZone(ReservationTime request, ServerCallContext context)
        {
            //リクエストパラメータを取得する
            DateTime requestDateTime = request.Time.ToDateTime();
            TimeSpan timeZone        = request.TimeZone.ToTimeSpan();

            //時差を変更する
            DateTime changeDateTime = requestDateTime.Add(timeZone);

            //時差を変更した日時を設定する。
            ReservationTime reservation = new ReservationTime();

            reservation.Time     = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(changeDateTime);
            reservation.TimeZone = request.TimeZone;

            //時差を変更した日時を返す。
            return(Task.FromResult(reservation));
        }
        public IEnumerable <ReservationTime> GetMinReservationTime(int granularity)
        {
            // Load Hours
            var result = new List <ReservationTime>();

            for (int i = 1; i <= 6; i++)
            {
                double   minReservTime = i * granularity;
                TimeSpan ts = TimeSpan.FromMinutes(minReservTime);
                double   day, hour, minute;

                //hour = Math.Floor(minReservTime / 60);
                //minute = minReservTime % 60;
                day    = ts.Days;
                hour   = ts.Hours;
                minute = ts.Minutes;

                string text = string.Empty;

                if (day > 0)
                {
                    text += string.Format("{0} day ", day);
                }
                if (hour > 0)
                {
                    text += string.Format("{0} hr ", hour);
                }
                if (minute > 0)
                {
                    text += string.Format("{0} min ", minute);
                }

                result.Add(ReservationTime.Create(minReservTime, text.Trim()));
            }

            return(result);
        }
예제 #8
0
        private void ReserveButton_Click(object sender, RoutedEventArgs e)
        {
            //選択していない場合は無視する。
            if (this.xDatePicker.SelectedDate == null)
            {
                return;
            }

            if (this.xTimeSpanComboBox.SelectedValue == null)
            {
                return;
            }

            if (this.xCountryTimeSpanComboBox.SelectedValue == null)
            {
                return;
            }

            //時間を文字列から数値に変換する。
            int hour, minute, span;

            if (int.TryParse(this.xHourTextBox.Text, out hour) == false)
            {
                return;
            }

            if (hour >= 24)
            {
                this.xHourTextBox.Text = "×24超";
                return;
            }

            if (int.TryParse(this.xMinuteTextBox.Text, out minute) == false)
            {
                return;
            }

            if (minute >= 60)
            {
                this.xMinuteTextBox.Text = "×60超";
                return;
            }

            if (int.TryParse(this.xSpanTextBox.Text, out span) == false)
            {
                return;
            }

            //クライアント側のタイムゾーンを設定
            DateTime dateTime     = this.xDatePicker.SelectedDate.Value;
            string   timeZoneText = ((KeyValuePair <string, TimeSpan>) this.xTimeSpanComboBox.SelectedValue).Key;
            TimeSpan timeZone     = ((KeyValuePair <string, TimeSpan>) this.xTimeSpanComboBox.SelectedValue).Value;

            //予約先施設側のタイムゾーンを設定s
            string   countryTimeZoneText = ((KeyValuePair <string, TimeSpan>) this.xCountryTimeSpanComboBox.SelectedValue).Key;
            TimeSpan countryTimeZone     = ((KeyValuePair <string, TimeSpan>) this.xCountryTimeSpanComboBox.SelectedValue).Value;

            //予約時間
            TimeSpan duration = new TimeSpan(0, span, 0);

            //クライアント側のタイムゾーンを反映した日付型を作成する。
            DateTimeOffset dateTimeOffset = new DateTimeOffset(dateTime.Year, dateTime.Month, dateTime.Day, hour, minute, 0, 0, timeZone);

            //ReservationTime 作成
            ReservationTime reservationTime = new ReservationTime();

            reservationTime.Subject         = "打合せ予約";
            reservationTime.Time            = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTimeOffset(dateTimeOffset);
            reservationTime.Duration        = Google.Protobuf.WellKnownTypes.Duration.FromTimeSpan(duration);
            reservationTime.TimeZone        = Google.Protobuf.WellKnownTypes.Duration.FromTimeSpan(timeZone);
            reservationTime.CountryTimeZone = Google.Protobuf.WellKnownTypes.Duration.FromTimeSpan(countryTimeZone);

            // gRPC サービスを呼び出す。
            var reply = this.grpcClient.GreeterClient.Reserve(reservationTime);

            // リプライ日付をクライアント側のタイムゾーンに変換する。
            DateTimeOffset replyDateTime = reply.Time.ToDateTimeOffset().ToOffset(timeZone);

            DateTimeOffset replyCountryDateTime = reply.Time.ToDateTimeOffset().ToOffset(countryTimeZone);


            // 予約日を表示する。
            this.xReserveTextBox.Text    = replyDateTime.ToString("yyyy年MM月dd日 H時m分") + " / 時間 = " + reply.Duration.ToTimeSpan().ToString() + " / TimeZone = " + reply.TimeZone.ToTimeSpan().ToString();
            this.xCountryTextBox.Text    = replyCountryDateTime.DateTime.ToString("yyyy年MM月dd日 H時m分") + " / TimeZone = " + countryTimeZone.ToString();
            this.xReserveUtcTextBox.Text = reply.Time.ToDateTimeOffset().ToString("yyyy年MM月dd日 H時m分");
        }
예제 #9
0
 public bool IsReserved(int id, ReservationTime time)
 {
     return(reservationRepository.GetReservations()
            .Where(r => r.AppartmentId == id)
            .Any(r => r.StartTime <= time && r.EndTime >= time));
 }