public ActionResult DeleteConfirmed(DateTime?Date, int?No) { T_DailyClassesByTrainer t_DailyClassesByTrainer = db.DailyClassesByTrainer.Find(Date, No); db.DailyClassesByTrainer.Remove(t_DailyClassesByTrainer); db.SaveChanges(); return(RedirectToAction("List", new { Date = Date })); }
/// <summary> /// 指導員登録用の設定を行う /// </summary> /// <param name="Date">指定日付</param> /// <returns>登録画面へ遷移</returns> public ActionResult Create(DateTime?Date) { // 引数が空であればエラー if (Date == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } // 指導員登録用インスタンス T_DailyClassesByTrainer dailyClassesByTrainer = new T_DailyClassesByTrainer() { Date = Date, No = 0 }; return(View(dailyClassesByTrainer)); }
/// <summary> /// 削除画面表示 /// </summary> /// <param name="Date">指定日付</param> /// <param name="No">指導員別コマ数クラスのNo</param> /// <returns></returns> public ActionResult Delete(DateTime?Date, int?No) { // nullチェック if (No == null || Date == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } // 削除対象のデータを取得 T_DailyClassesByTrainer t_DailyClassesByTrainer = db.DailyClassesByTrainer.Find(Date, No); if (t_DailyClassesByTrainer == null) { return(HttpNotFound()); } return(View(t_DailyClassesByTrainer)); }
public ActionResult Create([Bind(Include = "Date,No,TrainerName,Classes")] T_DailyClassesByTrainer dailyClassesByTrainer) { // nullチェック if (dailyClassesByTrainer.Date == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } // 入力チェック bool validation = true; if (ModelState.IsValid) { // コマ数入力チェック // [20210205リリース対応] Mod Start コマ数の0許容 //if (dailyClassesByTrainer.Classes <= 0) //{ // ViewBag.ErrorMessage = "コマ数に0以下は設定できません。"; // validation = false; //} if (dailyClassesByTrainer.Classes < 0) { ViewBag.ErrorMessage = "コマ数に0未満は設定できません。"; validation = false; } // [20210205リリース対応] Mod End } else { // エラーメッセージ生成 ViewBag.ErrorMessage = new Utility().GetErrorMessage(ModelState); validation = false; } if (validation == true) { // 日別予測条件(親データ)の存在チェック if (db.DailyClasses.Where(x => ((DateTime)x.Date).Equals((DateTime)dailyClassesByTrainer.Date)).Count() == 0) { // 日付を指定してデータを登録 db.DailyClasses.Add(new T_DailyClasses() { Date = dailyClassesByTrainer.Date }); } // データ追加のため対象日のNoを取得してインクリメント(データが0件の場合は1を設定) List <T_DailyClassesByTrainer> trainerList = db.DailyClassesByTrainer.Where(item => ((DateTime)item.Date).Equals((DateTime)dailyClassesByTrainer.Date)).ToList(); int nextNum = trainerList.Count() > 0 ? trainerList.Select(s => s.No).Max() + 1 : 1; // 追加するデータ(No) dailyClassesByTrainer.No = nextNum; // データ追加 db.DailyClassesByTrainer.Add(dailyClassesByTrainer); db.SaveChanges(); // 指導員一覧画面へ遷移 return(RedirectToAction("List", new { Date = dailyClassesByTrainer.Date })); } return(View(dailyClassesByTrainer)); }
public ActionResult Import(string cmd, HttpPostedFileBase postedFile, [Bind(Include = "Date,No,TrainerName,Classes")] List <T_DailyClassesByTrainer> importList) { Trace.WriteLine("POST /InstractorImport/Import"); // 読込ボタンが押下された場合 if (AppConstant.CMD_READ.Equals(cmd)) { // ステータスをクリア ModelState.Clear(); // 指導員コマ数クラスを初期化 importList = new List <T_DailyClassesByTrainer>(); if (postedFile != null) { // 拡張子チェック string extension = Path.GetExtension(postedFile.FileName); if (!".csv".Equals(extension) && !".CSV".Equals(extension)) { // エラーメッセージ ViewBag.ErrorMessage = "ファイルはcsv形式を指定してください。"; return(View(importList)); } // アップロード先ディレクトリ string uploadDir = AppDomain.CurrentDomain.BaseDirectory + @"Uploads\"; // ディレクトリが存在しない場合は作成 if (!Directory.Exists(uploadDir)) { Directory.CreateDirectory(uploadDir); } // ファイルをサーバーに保存 string filepath = uploadDir + Path.GetFileName(postedFile.FileName); postedFile.SaveAs(filepath); // 項目数 int itemCnt = 0; // テキストを全行読み込み using (StreamReader sr = new StreamReader(filepath, Encoding.GetEncoding("shift_jis"))) { int row = 0; while (!sr.EndOfStream) { row++; // CSVファイルの一行を読み込む string line = sr.ReadLine(); // 読み込んだ一行をカンマ毎に分けて配列に格納 string[] values = line.Split(','); // ヘッダ行 if (row == 1) { // 項目数を取得 itemCnt = values.Count(); // スキップ continue; } // 空行チェック(全ての項目が空) if (values.Where(x => string.IsNullOrEmpty(x)).Count() == values.Count()) { break; } // CSV項目数チェック if (values.Count() != itemCnt) { ViewBag.ErrorMessage = "csvの項目数に誤りがあるため、読み込みを途中で終了しました。 " + row + "行目"; break; } // 対象日 DateTime dailyClassesDate; // No // [20210205リリース対応] Mod Start int?→intに変更 //int? dailyClassesNo; //int dailyClassesNoInt; int dailyClassesNo; // [20210205リリース対応] Mod End // 指導員名 string dailyClassesTrainerName; // コマ数 double dailyClassesNum; // ----- 対象日 ----- // 必須チェック if (string.IsNullOrEmpty(values[0])) { ViewBag.ErrorMessage = "対象日が未設定のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // 日付整合性チェック if (!DateTime.TryParse(values[0], out dailyClassesDate)) { ViewBag.ErrorMessage = "対象日の設定が不正のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // ----- No ----- // null許容 if (string.IsNullOrEmpty(values[1])) { // [20210205リリース対応] Mod Start nullを許容しない //dailyClassesNo = null; ViewBag.ErrorMessage = "Noが未設定のため、読み込みを途中で終了しました。 " + row + "行目"; break; // [20210205リリース対応] Mod End } else { // 数値整合性チェック // [20210205リリース対応] Mod Start 変数の変更 //if (!int.TryParse(values[1], out dailyClassesNoInt)) //{ // ViewBag.ErrorMessage = "Noの設定が不正のため、読み込みを途中で終了しました。 " + row + "行目"; // break; //} //if (dailyClassesNoInt <= 0) //{ // ViewBag.ErrorMessage = "Noの設定が不正のため、読み込みを途中で終了しました。 " + row + "行目"; // break; //} if (!int.TryParse(values[1], out dailyClassesNo)) { ViewBag.ErrorMessage = "Noの設定が不正のため、読み込みを途中で終了しました。 " + row + "行目"; break; } if (dailyClassesNo <= 0) { ViewBag.ErrorMessage = "Noの設定が不正のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // [20210205リリース対応] Mod End // [20210205リリース対応] Del Start //if (db.DailyClassesByTrainer.Where(x => ((DateTime)x.Date).Equals(dailyClassesDate) && ((int)x.No).Equals(dailyClassesNoInt)).Count() == 0) //{ // ViewBag.ErrorMessage = "Noの設定が不正のため、読み込みを途中で終了しました。Noはすでに登録済の値のみ指定できます。 " + row + "行目"; // break; //} //dailyClassesNo = dailyClassesNoInt; // [20210205リリース対応] Del End } // ----- 指導員名 ----- // 必須チェック if (string.IsNullOrEmpty(values[2])) { ViewBag.ErrorMessage = "指導員名が未設定のため、読み込みを途中で終了しました。 " + row + "行目"; break; } dailyClassesTrainerName = values[2]; // ----- コマ数 ----- // 必須チェック if (string.IsNullOrEmpty(values[3])) { ViewBag.ErrorMessage = "コマ数が未設定のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // 数値整合性チェック if (!double.TryParse(values[3], out dailyClassesNum)) { ViewBag.ErrorMessage = "コマ数の設定が不正のため、読み込みを途中で終了しました。 " + row + "行目"; break; } T_DailyClassesByTrainer t_DailyClassesByTrainer = new T_DailyClassesByTrainer() { Date = dailyClassesDate, No = dailyClassesNo, TrainerName = dailyClassesTrainerName, Classes = dailyClassesNum }; // リストに追加 importList.Add(t_DailyClassesByTrainer); } } // 重複チェック // [20210205リリース対応] Mod Start Noをint?型からint型に変更したため、Nullは存在しない //int repeatedNum = importList.Where(x => x.No != null).GroupBy(x => new { x.Date, x.No }) // .Select(x => new { Count = x.Count() }).Where(x => x.Count != 1).Count(); int repeatedNum = importList.GroupBy(x => new { x.Date, x.No }) .Select(x => new { Count = x.Count() }).Where(x => x.Count != 1).Count(); // [20210205リリース対応] Mod End if (repeatedNum > 0) { ViewBag.ErrorMessage = "日付、No.の重複データがあります。(同じ日に同じNoのデータを複数登録することはできません。)ファイルを修正して再度読み込みを行ってください。"; return(View(new List <T_DailyClassesByTrainer>())); } } else { ViewBag.ErrorMessage = "ファイルを選択してください。"; } } // 登録ボタンが押下された場合 else if (AppConstant.CMD_REGIST.Equals(cmd)) { // [20210205リリース対応] Del Start 採番処理の削除 //// 未採番のデータがある場合(採番処理) //if (importList.Where(x => x.No == null).Count() > 0) //{ //// ステータスをクリア //ModelState.Clear(); //// ソート(日付、No(設定済)、No(未設定)) //importList = importList.OrderBy(x => x.Date).ThenBy(x => x.No == null ? 1 : 0).ThenBy(x => x.No).ToList(); //// 前レコードの日付 //DateTime? beforeDate = null; //// 新規採番No //int nextNum = 0; //// 未設定のNoを採番 //foreach (T_DailyClassesByTrainer dailyClassesByTrainer in importList.Where(x => x.No == null)) //{ // // 前レコードの日付がnullもしくは対象レコードと異なる場合 // if (beforeDate == null || beforeDate != dailyClassesByTrainer.Date) // { // // 最大値を取得 // int? maxNum = db.DailyClassesByTrainer.Where(x => ((DateTime)x.Date).Equals((DateTime)dailyClassesByTrainer.Date)).Select(x => x.No).Max(); // // 最大値を加算(最大値がnullの場合は1) // nextNum = maxNum == null ? 1 : (int)maxNum + 1; // } // else // { // // Noを加算 // nextNum++; // } // // 採番された番号を設定 // dailyClassesByTrainer.No = nextNum; // // 日付を保持 // beforeDate = dailyClassesByTrainer.Date; //} //ViewBag.CompMessage = "Noの新規採番が完了しました。再度登録ボタンを押してください。"; //} //// 未採番のデータがない場合(登録・更新処理) //else //{ // [20210205リリース対応] Del End // 入力チェック bool validation = true; if (ModelState.IsValid) { // コマ数チェック // [20210205リリース対応] Mod Start コマ数の0許容 //if (importList.Where(x => x.Classes <= 0).Count() > 0) //{ // ViewBag.ErrorMessage = "コマ数に0以下は設定できません。"; // validation = false; //} if (importList.Where(x => x.Classes < 0).Count() > 0) { ViewBag.ErrorMessage = "コマ数に0未満は設定できません。"; validation = false; } // [20210205リリース対応] Mod End } else { // エラーメッセージ生成 ViewBag.ErrorMessage = new Utility().GetErrorMessage(ModelState); validation = false; } if (validation == true) { // [20210205リリース対応] Add Start 既存データ削除 // 削除対象の日付を取得 List <DateTime?> dateList = importList.Select(x => x.Date).Distinct().ToList(); // 対象データを全て削除 db.DailyClassesByTrainer.RemoveRange( db.DailyClassesByTrainer.Where(x => dateList.Contains(x.Date))); // [20210205リリース対応] Add End // 登録済み日別予測条件(親データ)を取得 List <T_DailyClasses> addedDailyClasses = db.DailyClasses.Where(x => dateList.Contains(x.Date)).ToList(); foreach (T_DailyClassesByTrainer dailyClassesByTrainer in importList) { // 日別予測条件(親データ)の存在チェック if (addedDailyClasses.Where(x => ((DateTime)x.Date).Equals((DateTime)dailyClassesByTrainer.Date)).Count() == 0) { // 日別予測条件を生成 T_DailyClasses addDailyClasses = new T_DailyClasses() { Date = dailyClassesByTrainer.Date }; // 日付を指定してデータを登録 db.DailyClasses.Add(addDailyClasses); // 追加済みとする addedDailyClasses.Add(addDailyClasses); } // [20210205リリース対応] Mod Start 存在チェックを削除 //// 存在チェック //if (db.DailyClassesByTrainer.Where(x => ((DateTime)x.Date).Equals((DateTime)dailyClassesByTrainer.Date) // && ((int)x.No).Equals((int)dailyClassesByTrainer.No)).Count() == 0) //{ // // 登録処理 // db.DailyClassesByTrainer.Add(dailyClassesByTrainer); //} //else //{ // // 更新処理 // db.Entry(dailyClassesByTrainer).State = EntityState.Modified; //} // 登録処理 db.DailyClassesByTrainer.Add(dailyClassesByTrainer); // [20210205リリース対応] Mod End } db.SaveChanges(); // 完了メッセージ ViewBag.CompMessage = "インポートが完了しました。"; // 表示データを初期化 importList = new List <T_DailyClassesByTrainer>(); } // [20210205リリース対応] Del Start //} // [20210205リリース対応] Del End } // その他 else { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } return(View(importList)); }