Beispiel #1
0
 /// <summary>
 /// 予定更新
 /// </summary>
 /// <param name="scheduleRegistrationInfo">予定登録情報</param>
 /// <param name="scheduleUpdateType">更新種別</param>
 public void UpdateSchedule(ScheduleRegistrationInfo scheduleRegistrationInfo, ScheduleUpdateType scheduleUpdateType)
 {
     new ScheduleDBAccess().UpdateSchedule(scheduleRegistrationInfo, scheduleUpdateType);
 }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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;
                    }
                }
            }
        }
Beispiel #4
0
        /// <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();
            }
        }