/// <summary> /// 予定更新 /// </summary> /// <param name="scheduleRegistrationInfo">予定登録情報</param> /// <param name="scheduleUpdateType">更新種別</param> public void UpdateSchedule(ScheduleRegistrationInfo scheduleRegistrationInfo, ScheduleUpdateType scheduleUpdateType) { new ScheduleDBAccess().UpdateSchedule(scheduleRegistrationInfo, scheduleUpdateType); }
/// <summary> /// 入力された時間が正しいかをチェック /// </summary> /// <param name="scheduleUpdateType">更新種別</param> /// <returns>チェックの結果</returns> private bool CheckInput(ScheduleUpdateType scheduleUpdateType) { var selectedStartTime = new DateTime(); //入力された予定開始時間 var selectedEndTime = new DateTime(); //入力された予定終了時間 //ログインユーザーの登録済みの予定一覧を取得 var registeredScheduleList = new ScheduleLogic().GetRegisteredSchedule(this.UserInfo.UserID); //新規で追加するにチェックがあり、新規の予定のテキストボックスが空白の場合 if (checkBox1.Checked && textBox1.Text == "") { MessageBox.Show("追加する予定内容を入力してください。", "お知らせ"); return(false); } //新規で追加するにチェックがなく、予定内容が選択されていない場合 if (checkBox1.Checked == false && comboBox1.SelectedItem == null) { MessageBox.Show("予定内容を選択してください。", "お知らせ"); return(false); } //利用する施設が選択されていない場合 if (comboBox2.SelectedItem == null) { MessageBox.Show("利用する施設を選択してください。", "お知らせ"); return(false); } //コンボボックスで選択された開始時間の時、分をまとめる var selectedStartTimeOfDay = new TimeSpan(int.Parse((string)comboBox4.SelectedItem), int.Parse((string)comboBox5.SelectedItem), 0); //コンボボックスで選択された終了時間の時、分をまとめる var selectedEndTimeOfDay = new TimeSpan(int.Parse((string)comboBox6.SelectedItem), int.Parse((string)comboBox7.SelectedItem), 0); //選択された開始時間が終了時間より後になっていた場合 if (selectedStartTimeOfDay > selectedEndTimeOfDay) { MessageBox.Show("選択された開始時間が終了時間より後になっています。", "お知らせ"); return(false); } //コンボボックスで選択された利用開始時間が、施設の開放開始時間より前の場合 if (this.FacilityInfoList[comboBox2.SelectedIndex].OpeningStartTime.TimeOfDay > selectedStartTimeOfDay) { MessageBox.Show("選択された時間が施設の開放時間外です。", "お知らせ"); return(false); } //コンボボックスで選択された利用終了時間が、施設の開放終了時間より後の場合 if (this.FacilityInfoList[comboBox2.SelectedIndex].OpeningEndTime.TimeOfDay < selectedEndTimeOfDay) { MessageBox.Show("選択された時間が施設の開放時間外です。", "お知らせ"); return(false); } //入力された時間の書式が正しいかをチェックし、1つの変数にまとめる try { selectedStartTime = new DateTime( int.Parse((string)comboBox3.SelectedItem), int.Parse(textBox2.Text), int.Parse(textBox3.Text), int.Parse((string)comboBox4.SelectedItem), int.Parse((string)comboBox5.SelectedItem), 0); selectedEndTime = new DateTime( int.Parse((string)comboBox3.SelectedItem), int.Parse(textBox2.Text), int.Parse(textBox3.Text), int.Parse((string)comboBox6.SelectedItem), int.Parse((string)comboBox7.SelectedItem), 0); } catch (FormatException) { MessageBox.Show("正しい日付を入力してください。", "お知らせ"); return(false); } catch (ArgumentOutOfRangeException) { MessageBox.Show("正しい日付を入力してください。", "お知らせ"); return(false); } if (selectedStartTime.Date < DateTime.Now.Date) { MessageBox.Show("本日以降の日付を入力してください。", "お知らせ"); return(false); } //更新種別が編集の場合、編集対象の予定IDと同じ予定IDの要素を、登録済み予定一覧から削除する if (scheduleUpdateType == ScheduleUpdateType.Edit) { registeredScheduleList.RemoveAll(x => x.ScheduleID == this.ScheduleID); } //登録済み予定の時間と選択した時間が重なる場合 if (registeredScheduleList.Any(x => x.StartTime >= selectedStartTime && x.StartTime < selectedEndTime)) { MessageBox.Show("選択された時間には既に予定が登録されています。", "お知らせ"); return(false); } if (registeredScheduleList.Any(x => x.StartTime <= selectedStartTime && x.EndTime > selectedStartTime)) { MessageBox.Show("選択された時間には既に予定が登録されています。", "お知らせ"); return(false); } return(true); }
/// <summary> /// 予定更新 /// </summary> /// <param name="scheduleRegistrationInfo">予定登録情報</param> /// <param name="scheduleUpdateType">更新種別</param> public void UpdateSchedule(ScheduleRegistrationInfo scheduleRegistrationInfo, ScheduleUpdateType scheduleUpdateType) { string sql; //実行するsql文 //データベースに接続するための文字列を取得 string connString = new CommonDBAccess().MakeAccessString(); using (var conn = new NpgsqlConnection(connString)) { conn.Open(); //トランザクション開始 using (var transaction = conn.BeginTransaction()) { try { switch (scheduleUpdateType) { //新規予定追加の場合 case ScheduleUpdateType.Add: //予定情報を予定テーブルに追加 sql = @"insert into 予定テーブル(ユーザーid, 予定内容, 開始日時, 終了日時) values(:UserID, :ScheduleContents, :StartTime, :EndTime)"; var cmd = new NpgsqlCommand(sql, conn); cmd.Parameters.Add(new NpgsqlParameter("UserID", NpgsqlTypes.NpgsqlDbType.Varchar)); cmd.Parameters["UserID"].Value = scheduleRegistrationInfo.UserID; cmd.Parameters.Add(new NpgsqlParameter("ScheduleContents", NpgsqlTypes.NpgsqlDbType.Varchar)); cmd.Parameters["ScheduleContents"].Value = scheduleRegistrationInfo.ScheduleContents; cmd.Parameters.Add(new NpgsqlParameter("StartTime", NpgsqlTypes.NpgsqlDbType.Timestamp)); cmd.Parameters["StartTime"].Value = scheduleRegistrationInfo.StartTime; cmd.Parameters.Add(new NpgsqlParameter("EndTime", NpgsqlTypes.NpgsqlDbType.Timestamp)); cmd.Parameters["EndTime"].Value = scheduleRegistrationInfo.EndTime; cmd.ExecuteNonQuery(); //施設利用情報を施設利用状況テーブルに追加 sql = @"insert into 施設利用状況テーブル select :UserID, :FacilityID, 予定id from 予定テーブル where ユーザーid = :UserID and 開始日時 = :StartTime and 終了日時 = :EndTime"; cmd = new NpgsqlCommand(sql, conn); cmd.Parameters.Add(new NpgsqlParameter("UserID", NpgsqlTypes.NpgsqlDbType.Varchar)); cmd.Parameters["UserID"].Value = scheduleRegistrationInfo.UserID; cmd.Parameters.Add(new NpgsqlParameter("FacilityID", NpgsqlTypes.NpgsqlDbType.Smallint)); cmd.Parameters["FacilityID"].Value = scheduleRegistrationInfo.FacilityID; cmd.Parameters.Add(new NpgsqlParameter("StartTime", NpgsqlTypes.NpgsqlDbType.Timestamp)); cmd.Parameters["StartTime"].Value = scheduleRegistrationInfo.StartTime; cmd.Parameters.Add(new NpgsqlParameter("EndTime", NpgsqlTypes.NpgsqlDbType.Timestamp)); cmd.Parameters["EndTime"].Value = scheduleRegistrationInfo.EndTime; cmd.ExecuteNonQuery(); break; //予定編集の場合 case ScheduleUpdateType.Edit: //編集前のデータを予定テーブルから削除 sql = @"delete from 予定テーブル where 予定id = :ScheduleID"; cmd = new NpgsqlCommand(sql, conn); cmd.Parameters.Add(new NpgsqlParameter("ScheduleID", NpgsqlTypes.NpgsqlDbType.Smallint)); cmd.Parameters["ScheduleID"].Value = scheduleRegistrationInfo.ScheduleID; cmd.ExecuteNonQuery(); //編集前のデータを施設利用状況テーブルテーブルから削除 sql = @"delete from 施設利用状況テーブル where 予定id = :ScheduleID"; cmd = new NpgsqlCommand(sql, conn); cmd.Parameters.Add(new NpgsqlParameter("ScheduleID", NpgsqlTypes.NpgsqlDbType.Smallint)); cmd.Parameters["ScheduleID"].Value = scheduleRegistrationInfo.ScheduleID; cmd.ExecuteNonQuery(); //編集後のデータを予定テーブルに追加 sql = @"insert into 予定テーブル(ユーザーid, 予定内容, 開始日時, 終了日時) values(:UserID, :ScheduleContents, :StartTime, :EndTime)"; cmd = new NpgsqlCommand(sql, conn); cmd.Parameters.Add(new NpgsqlParameter("UserID", NpgsqlTypes.NpgsqlDbType.Varchar)); cmd.Parameters["UserID"].Value = scheduleRegistrationInfo.UserID; cmd.Parameters.Add(new NpgsqlParameter("ScheduleContents", NpgsqlTypes.NpgsqlDbType.Varchar)); cmd.Parameters["ScheduleContents"].Value = scheduleRegistrationInfo.ScheduleContents; cmd.Parameters.Add(new NpgsqlParameter("StartTime", NpgsqlTypes.NpgsqlDbType.Timestamp)); cmd.Parameters["StartTime"].Value = scheduleRegistrationInfo.StartTime; cmd.Parameters.Add(new NpgsqlParameter("EndTime", NpgsqlTypes.NpgsqlDbType.Timestamp)); cmd.Parameters["EndTime"].Value = scheduleRegistrationInfo.EndTime; cmd.ExecuteNonQuery(); //編集後のデータを施設利用状況テーブルに追加 sql = @"insert into 施設利用状況テーブル select :UserID, :FacilityID, 予定id from 予定テーブル where ユーザーid = :UserID and 開始日時 = :StartTime and 終了日時 = :EndTime"; cmd = new NpgsqlCommand(sql, conn); cmd.Parameters.Add(new NpgsqlParameter("UserID", NpgsqlTypes.NpgsqlDbType.Varchar)); cmd.Parameters["UserID"].Value = scheduleRegistrationInfo.UserID; cmd.Parameters.Add(new NpgsqlParameter("FacilityID", NpgsqlTypes.NpgsqlDbType.Smallint)); cmd.Parameters["FacilityID"].Value = scheduleRegistrationInfo.FacilityID; cmd.Parameters.Add(new NpgsqlParameter("StartTime", NpgsqlTypes.NpgsqlDbType.Timestamp)); cmd.Parameters["StartTime"].Value = scheduleRegistrationInfo.StartTime; cmd.Parameters.Add(new NpgsqlParameter("EndTime", NpgsqlTypes.NpgsqlDbType.Timestamp)); cmd.Parameters["EndTime"].Value = scheduleRegistrationInfo.EndTime; cmd.ExecuteNonQuery(); break; //予定削除の場合 case ScheduleUpdateType.Delete: //データを予定テーブルから削除 sql = @"delete from 予定テーブル where 予定id = :ScheduleID"; cmd = new NpgsqlCommand(sql, conn); cmd.Parameters.Add(new NpgsqlParameter("ScheduleID", NpgsqlTypes.NpgsqlDbType.Smallint)); cmd.Parameters["ScheduleID"].Value = scheduleRegistrationInfo.ScheduleID; cmd.ExecuteNonQuery(); //データを施設利用状況テーブルテーブルから削除 sql = @"delete from 施設利用状況テーブル where 予定id = :ScheduleID"; cmd = new NpgsqlCommand(sql, conn); cmd.Parameters.Add(new NpgsqlParameter("ScheduleID", NpgsqlTypes.NpgsqlDbType.Smallint)); cmd.Parameters["ScheduleID"].Value = scheduleRegistrationInfo.ScheduleID; cmd.ExecuteNonQuery(); break; } transaction.Commit(); } catch (NpgsqlException) { transaction.Rollback(); throw; } } } }
/// <summary> /// 押したボタン(保存、編集)に応じて、予定を保存、編集する /// </summary> /// <param name="scheduleUpdateType">更新種別</param> private void SettingSchedule(ScheduleUpdateType scheduleUpdateType) { string scheduleContens; //予定内容 var scheduleRegistrationInfo = new ScheduleRegistrationInfo(); //予定登録情報 if (CheckInput(scheduleUpdateType)) //情報が入力されており、入力された時間が適切かを確認 { if (checkBox1.Checked) { scheduleContens = textBox1.Text; //予定内容を新規で追加する場合 } else { scheduleContens = (string)comboBox1.SelectedItem; //予定内容をコンボボックスから選択する場合 } //画面に入力した情報をもとに、登録する情報のインスタンスを作成 try { //追加の場合 if (scheduleUpdateType == ScheduleUpdateType.Add) { scheduleRegistrationInfo = new ScheduleRegistrationInfo() { FacilityID = this.FacilityInfoList[comboBox2.SelectedIndex].FacilityID, UserID = this.UserInfo.UserID, ScheduleContents = scheduleContens, StartTime = new DateTime( int.Parse((string)comboBox3.SelectedItem), int.Parse(textBox2.Text), int.Parse(textBox3.Text), int.Parse((string)comboBox4.SelectedItem), int.Parse((string)comboBox5.SelectedItem), 0), EndTime = new DateTime( int.Parse((string)comboBox3.SelectedItem), int.Parse(textBox2.Text), int.Parse(textBox3.Text), int.Parse((string)comboBox6.SelectedItem), int.Parse((string)comboBox7.SelectedItem), 0) }; } //編集の場合 if (scheduleUpdateType == ScheduleUpdateType.Edit) { scheduleRegistrationInfo = new ScheduleRegistrationInfo() { ScheduleID = this.ScheduleID, FacilityID = this.FacilityInfoList[comboBox2.SelectedIndex].FacilityID, UserID = this.UserInfo.UserID, ScheduleContents = scheduleContens, StartTime = new DateTime( int.Parse((string)comboBox3.SelectedItem), int.Parse(textBox2.Text), int.Parse(textBox3.Text), int.Parse((string)comboBox4.SelectedItem), int.Parse((string)comboBox5.SelectedItem), 0), EndTime = new DateTime( int.Parse((string)comboBox3.SelectedItem), int.Parse(textBox2.Text), int.Parse(textBox3.Text), int.Parse((string)comboBox6.SelectedItem), int.Parse((string)comboBox7.SelectedItem), 0) }; } } catch (FormatException) { MessageBox.Show("正しい日付を入力してください。", "お知らせ"); return; } catch (ArgumentOutOfRangeException) { MessageBox.Show("正しい日付を入力してください。", "お知らせ"); return; } try { new ScheduleLogic().UpdateSchedule(scheduleRegistrationInfo, scheduleUpdateType); } catch (NpgsqlException) { if (scheduleUpdateType == ScheduleUpdateType.Add) { MessageBox.Show("予定の追加に失敗しました。", "お知らせ"); } if (scheduleUpdateType == ScheduleUpdateType.Edit) { MessageBox.Show("予定の編集に失敗しました。", "お知らせ"); } return; } if (scheduleUpdateType == ScheduleUpdateType.Add) { MessageBox.Show("予定の追加に成功しました。", "お知らせ"); } if (scheduleUpdateType == ScheduleUpdateType.Edit) { MessageBox.Show("予定の編集に成功しました。", "お知らせ"); } //予定フォームに戻る this.Hide(); new ScheduleForm(this.UserInfo, this.Location).Show(); this.Close(); } }