/// <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)); }
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 })); }
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(); }
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); }
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); }
/// <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); }
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分"); }
public bool IsReserved(int id, ReservationTime time) { return(reservationRepository.GetReservations() .Where(r => r.AppartmentId == id) .Any(r => r.StartTime <= time && r.EndTime >= time)); }