public ActionResult Edit(string cmd, [Bind(Include = "Trainee")] V_TraineeLodgingEdt traineeEdt) { Trace.WriteLine("POST /TraineeLodging/Edit/" + traineeEdt.Trainee.TraineeId); // 確認ボタンが押下された場合 if (AppConstant.CMD_CONFIRM.Equals(cmd)) { // 入力チェック bool validation = true; if (ModelState.IsValid) { // 入校予定日、仮免予定日の比較 if (traineeEdt.Trainee.EntrancePlanDate >= traineeEdt.Trainee.TmpLicencePlanDate) { ViewBag.ErrorMessage = "仮免予定日は入校予定日より後に設定してください。"; validation = false; } // 仮免予定日、卒業予定日の比較 if (validation == true && traineeEdt.Trainee.TmpLicencePlanDate >= traineeEdt.Trainee.GraduatePlanDate) { ViewBag.ErrorMessage = "卒業予定日は仮免予定日より後に設定してください。"; validation = false; } } else { // エラーメッセージを生成 ViewBag.ErrorMessage = new Utility().GetErrorMessage(ModelState); validation = false; } if (validation == true) { // 確認モードに設定 traineeEdt.EditMode = AppConstant.EditMode.Confirm; // 入校予定日-10日(TODO:いったん-10日としている) DateTime dateFrom = ((DateTime)traineeEdt.Trainee.EntrancePlanDate).AddDays(-10); // 卒業予定日+10日(TODO:いったん+10日としている) DateTime dateTo = ((DateTime)traineeEdt.Trainee.GraduatePlanDate).AddDays(10); // 表データを作成 traineeEdt.ChartData = new Utility().GetChartData(db, dateFrom, dateTo, new List <T_TraineeLodging> { traineeEdt.Trainee }, null); } else { // 編集モードに変更 traineeEdt.EditMode = AppConstant.EditMode.Edit; } } // 戻るボタンが押下された場合 else if (AppConstant.CMD_RETURN.Equals(cmd)) { // 編集モードに変更 traineeEdt.EditMode = AppConstant.EditMode.Edit; } // 更新ボタンが押下された場合 else if (AppConstant.CMD_UPDATE.Equals(cmd)) { // マスタは更新しないため、データをクリア(TODO:他に良い方法があるか…?) traineeEdt.Trainee.TrainingCourse = null; traineeEdt.Trainee.LodgingFacility = null; // 更新処理 db.Entry(traineeEdt.Trainee).State = EntityState.Modified; db.SaveChanges(); // 一覧へリダイレクト return(RedirectToAction("List")); } // 仮免・卒業日設定ボタンが押下された場合 else if (AppConstant.CMD_SET_TMP_GRD.Equals(cmd)) { // ステータスをクリア ModelState.Clear(); // 編集モードを設定 traineeEdt.EditMode = AppConstant.EditMode.Edit; // 教習コース、入校予定日の必須チェック if (!string.IsNullOrEmpty(traineeEdt.Trainee.TrainingCourseCd) && traineeEdt.Trainee.EntrancePlanDate != null) { // カレンダーテーブルから取得 M_EntGrdCalendar calendar = db.EntGrdCalendar.Where( x => x.TrainingCourseCd.Equals(traineeEdt.Trainee.TrainingCourseCd) && ((DateTime)x.EntrancePlanDate).Equals((DateTime)traineeEdt.Trainee.EntrancePlanDate)).FirstOrDefault(); if (calendar != null) { // 仮免予定日 traineeEdt.Trainee.TmpLicencePlanDate = calendar.TmpLicencePlanDate; // 卒業予定日 traineeEdt.Trainee.GraduatePlanDate = calendar.GraduatePlanDate; } else { // エラー ViewBag.ErrorMessage = "入校予定日の日付が入卒カレンダーに登録されていません。"; } } else { // エラー ViewBag.ErrorMessage = "教習コース、入校予定日を設定してください。"; } } // その他 else { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } // ドロップダウンリストの選択肢を設定 this.SetSelectItem(traineeEdt); return(View(traineeEdt)); }
public ActionResult List(string cmd, int?index, [Bind(Include = "Year,Month,CalendarList")] V_EntGrdCalendarEdt entGrdCalendarEdt) { Trace.WriteLine("POST /Calendar/List"); // 更新ボタンが押下された場合 if (AppConstant.CMD_UPDATE.Equals(cmd)) { if (ModelState.IsValid) { foreach (M_EntGrdCalendar calendar in entGrdCalendarEdt.CalendarList) { if (calendar.DeleteFlg == false) { // 更新(ステータスを修正に設定) db.Entry(calendar).State = EntityState.Modified; } else { // 削除対象を取得 M_EntGrdCalendar target = db.EntGrdCalendar.Find(calendar.TrainingCourseCd, calendar.EntrancePlanDate); if (target != null) { // 削除処理 db.EntGrdCalendar.Remove(target); } } } db.SaveChanges(); // 年と月を指定してカレンダーを取得 entGrdCalendarEdt.CalendarList = db.EntGrdCalendar.Where( x => ((DateTime)x.EntrancePlanDate).Year.ToString().Equals(entGrdCalendarEdt.Year) && ((DateTime)x.EntrancePlanDate).Month.ToString().Equals(entGrdCalendarEdt.Month)) .OrderBy(x => x.EntrancePlanDate).ThenBy(x => x.TrainingCourseCd).ToList(); // 削除フラグをfalseに設定 entGrdCalendarEdt.CalendarList.ForEach(x => x.DeleteFlg = false); // 完了メッセージ ViewBag.CompMessage = "データを更新しました。"; } else { // エラーメッセージを生成 ViewBag.ErrorMessage = new Utility().GetErrorMessage(ModelState); } } // 削除ボタンが押下された場合 else if (AppConstant.CMD_REMOVE.Equals(cmd)) { // ステータスをクリア ModelState.Clear(); // インデックスを元にカレンダーを削除 int i = (int)index; entGrdCalendarEdt.CalendarList[i].DeleteFlg = true; } // その他 else { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } // 外部キーのマスタを設定 this.SetForeignMaster(entGrdCalendarEdt.CalendarList); return(View(entGrdCalendarEdt)); }
public ActionResult Regist(string cmd, int?index, [Bind(Include = "TraineeList")] V_TraineeLodgingReg traineeReg) { Trace.WriteLine("POST /TraineeLodging/Regist"); // 確認ボタンが押下された場合(TODO:本来はDBに一時登録データを持つべき?) if (AppConstant.CMD_CONFIRM.Equals(cmd)) { // 入力チェック bool validation = true; if (ModelState.IsValid) { // 日付比較 foreach (T_TraineeLodging trainee in traineeReg.TraineeList) { // 入校予定日、仮免予定日の比較 if (trainee.EntrancePlanDate >= trainee.TmpLicencePlanDate) { ViewBag.ErrorMessage = "仮免予定日は入校予定日より後に設定してください。"; validation = false; break; } // 仮免予定日、卒業予定日の比較 if (validation == true && trainee.TmpLicencePlanDate >= trainee.GraduatePlanDate) { ViewBag.ErrorMessage = "卒業予定日は仮免予定日より後に設定してください。"; validation = false; break; } } } else { // エラーメッセージを生成 ViewBag.ErrorMessage = new Utility().GetErrorMessage(ModelState); validation = false; } if (validation == true) { // 確認モードに変更 traineeReg.EditMode = AppConstant.EditMode.Confirm; // 入校予定日の最小値-10日(TODO:いったん-10日としている) DateTime minEntDate = (DateTime)traineeReg.TraineeList.Select(x => x.EntrancePlanDate).Min(); DateTime dateFrom = minEntDate.AddDays(-10); // 卒業予定日の最大値+10日(TODO:いったん+10日としている) DateTime maxGrdDate = (DateTime)traineeReg.TraineeList.Select(x => x.GraduatePlanDate).Max(); DateTime dateTo = maxGrdDate.AddDays(10); // 表データを作成 traineeReg.ChartData = new Utility().GetChartData(db, dateFrom, dateTo, traineeReg.TraineeList, null); } else { // 編集モードに変更 traineeReg.EditMode = AppConstant.EditMode.Edit; } } // 戻るボタンが押下された場合 else if (AppConstant.CMD_RETURN.Equals(cmd)) { // 編集モードに変更 traineeReg.EditMode = AppConstant.EditMode.Edit; } // 登録ボタンが押下された場合 else if (AppConstant.CMD_REGIST.Equals(cmd)) { // グループIDの最大値+1を取得 int groupId = db.TraineeLodging.Count() > 0 ? db.TraineeLodging.Select(x => x.GroupId).Max() + 1 : 1; // 外部キーマスタのリセット&グループIDの設定 traineeReg.TraineeList.ForEach(x => { x.GroupId = groupId; x.TrainingCourse = null; x.LodgingFacility = null; }); // 登録処理 db.TraineeLodging.AddRange(traineeReg.TraineeList); db.SaveChanges(); // 一覧へリダイレクト return(RedirectToAction("List")); } // 仮免・卒業日設定ボタンが押下された場合 else if (AppConstant.CMD_SET_TMP_GRD.Equals(cmd)) { // ステータスをクリア ModelState.Clear(); // 編集モードを設定 traineeReg.EditMode = AppConstant.EditMode.Edit; // インデックスを元に教習生を取得 int i = (int)index; T_TraineeLodging trainee = traineeReg.TraineeList[i]; // 教習コース、入校予定日の必須チェック if (!string.IsNullOrEmpty(trainee.TrainingCourseCd) && trainee.EntrancePlanDate != null) { // カレンダーテーブルから取得 M_EntGrdCalendar calendar = db.EntGrdCalendar.Where( x => x.TrainingCourseCd.Equals(trainee.TrainingCourseCd) && ((DateTime)x.EntrancePlanDate).Equals((DateTime)trainee.EntrancePlanDate)).FirstOrDefault(); if (calendar != null) { // 仮免予定日 traineeReg.TraineeList[i].TmpLicencePlanDate = calendar.TmpLicencePlanDate; // 卒業予定日 traineeReg.TraineeList[i].GraduatePlanDate = calendar.GraduatePlanDate; } else { // エラー ViewBag.ErrorMessage = "入校予定日の日付が入卒カレンダーに登録されていません。"; } } else { // エラー ViewBag.ErrorMessage = "教習コース、入校予定日を設定してください。"; } } // 追加ボタンが押下された場合 else if (AppConstant.CMD_ADD.Equals(cmd)) { // ステータスをクリア ModelState.Clear(); // 編集モードを設定 traineeReg.EditMode = AppConstant.EditMode.Edit; // インデックスを元に教習生を追加 int i = (int)index; traineeReg.TraineeList.Insert(i + 1, new T_TraineeLodging(traineeReg.TraineeList[i])); // 教習者名をクリア traineeReg.TraineeList[i + 1].TraineeName = ""; // キャンセルフラグをクリア traineeReg.TraineeList[i + 1].CancelFlg = false; } // 削除ボタンが押下された場合 else if (AppConstant.CMD_REMOVE.Equals(cmd)) { // ステータスをクリア ModelState.Clear(); // 編集モードを設定 traineeReg.EditMode = AppConstant.EditMode.Edit; // インデックスを元に教習生を削除 int i = (int)index; traineeReg.TraineeList.RemoveAt(i); } // その他 else { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } // ドロップダウンリストの選択肢を設定 this.SetSelectItem(traineeReg); return(View(traineeReg)); }
public ActionResult Import(string cmd, HttpPostedFileBase postedFile, [Bind(Include = "TrainingCourseCd,EntrancePlanDate,TmpLicencePlanDate,GraduatePlanDate")] List <M_EntGrdCalendar> calendarList) { Trace.WriteLine("POST /Calendar/Import"); // 読込ボタンが押下された場合 if (AppConstant.CMD_READ.Equals(cmd)) { // ステータスをクリア ModelState.Clear(); // カレンダーを初期化 calendarList = new List <M_EntGrdCalendar>(); if (postedFile != null) { // 拡張子チェック string extension = Path.GetExtension(postedFile.FileName); if (!".csv".Equals(extension) && !".CSV".Equals(extension)) { // エラーメッセージ ViewBag.ErrorMessage = "ファイルはcsv形式を指定してください。"; return(View(calendarList)); } // 教習コースマスタ取得 List <M_TrainingCourse> trainingCourse = db.TrainingCourse.ToList(); // アップロード先ディレクトリ 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 entrancePlanDate; // 教習コースコード string trainingCourseCd; // 仮免予定日 DateTime tmpLicencePlanDate; // 卒業予定日 DateTime graduatePlanDate; // ----- 入校予定日 ----- // 必須チェック if (string.IsNullOrEmpty(values[0])) { ViewBag.ErrorMessage = "入校予定日が未設定のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // 日付整合性チェック if (!DateTime.TryParse(values[0], out entrancePlanDate)) { ViewBag.ErrorMessage = "入校予定日の設定が不正のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // ----- 教習コース ----- // 必須チェック if (string.IsNullOrEmpty(values[1])) { ViewBag.ErrorMessage = "教習コースが未設定のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // 左0埋め trainingCourseCd = values[1].PadLeft(2, '0'); // マスタ存在チェック if (trainingCourse.Where(x => x.TrainingCourseCd.Equals(trainingCourseCd)).Count() == 0) { ViewBag.ErrorMessage = "教習コースの設定が不正のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // ----- 仮免予定日 ----- // 必須チェック if (string.IsNullOrEmpty(values[2])) { ViewBag.ErrorMessage = "仮免予定日が未設定のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // 日付整合性チェック if (!DateTime.TryParse(values[2], out tmpLicencePlanDate)) { ViewBag.ErrorMessage = "仮免予定日の設定が不正のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // ----- 卒業予定日 ----- // 必須チェック if (string.IsNullOrEmpty(values[3])) { ViewBag.ErrorMessage = "卒業予定日が未設定のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // 日付整合性チェック if (!DateTime.TryParse(values[3], out graduatePlanDate)) { ViewBag.ErrorMessage = "卒業予定日の設定が不正のため、読み込みを途中で終了しました。 " + row + "行目"; break; } // 各項目を設定 M_EntGrdCalendar calendar = new M_EntGrdCalendar() { EntrancePlanDate = entrancePlanDate, TrainingCourseCd = trainingCourseCd, TmpLicencePlanDate = tmpLicencePlanDate, GraduatePlanDate = graduatePlanDate }; // リストに追加 calendarList.Add(calendar); } } } else { ViewBag.ErrorMessage = "ファイルを選択してください。"; } } // 登録ボタンが押下された場合 else if (AppConstant.CMD_REGIST.Equals(cmd)) { // 入力チェック bool validation = true; if (ModelState.IsValid) { // 重複チェック int repeatedNum = calendarList.GroupBy(x => new { x.EntrancePlanDate, x.TrainingCourseCd }) .Select(x => new { Count = x.Count() }).Where(x => x.Count != 1).Count(); if (repeatedNum > 0) { ViewBag.ErrorMessage = "入校予定日、教習コースの重複データがあります。(同じ日に同じ教習コースのデータを登録することはできません。)"; validation = false; } } else { // エラーメッセージを生成 ViewBag.ErrorMessage = new Utility().GetErrorMessage(ModelState); validation = false; } if (validation == true) { // データの登録/更新 foreach (M_EntGrdCalendar calendar in calendarList) { // 存在チェック if (db.EntGrdCalendar.Where(x => x.TrainingCourseCd.Equals(calendar.TrainingCourseCd) && ((DateTime)x.EntrancePlanDate).Equals((DateTime)calendar.EntrancePlanDate)).Count() == 0) { // 登録処理 db.EntGrdCalendar.Add(calendar); } else { // 更新処理 db.Entry(calendar).State = EntityState.Modified; } } db.SaveChanges(); // 完了メッセージ ViewBag.CompMessage = "インポートが完了しました。"; // 表示データを初期化 calendarList = new List <M_EntGrdCalendar>(); } } // その他 else { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } // ドロップダウンリストの選択肢を設定 this.SetSelectItem(calendarList); return(View(calendarList)); }