public ActionResult DeleteDetail(AttendanceTimeKeyInputModel keyModel) { // 入力エラーがない場合 AttendanceTimeModel viewModel = null; if (ModelState.IsValid) { viewModel = this._ControllerSupport.InvokeServiceAndSetMessage( _AttendanceTimeService, m => m.DeleteDetail(keyModel), _SessionManager.GetUserInfoModel(), string.Empty); } if (ModelState.IsValid) { return(Json(viewModel)); } else { // エラー時は先頭のメッセージを返却する string errorMessage = "削除は失敗しました。"; foreach (KeyValuePair <string, ModelState> keyVal in ModelState.ToList()) { if (keyVal.Value.Errors.Count > 0) { errorMessage = keyVal.Value.Errors[0].ErrorMessage; break; } } return(Json(new { ErrorMessage = errorMessage })); } }
public ActionResult RegistDetail(AttendanceTimeInputModel detailModel) { // 入力エラーがない場合 AttendanceTimeModel viewModel = null; if (ModelState.IsValid) { viewModel = this._ControllerSupport.InvokeServiceAndSetMessage( _AttendanceTimeService, m => m.UpdateDetail(detailModel), _SessionManager.GetUserInfoModel(), string.Empty); viewModel.ProcBtn = detailModel.ProcBtn; } if (ModelState.IsValid) { return(Json(viewModel)); } else { // エラー時はリダイレクトする this._ControllerSupport.SaveMessageForRedirect(); AttendanceTimeKeyInputModel keyInputModel = new AttendanceTimeKeyInputModel(); ModelUtil.CopyModelToModel(detailModel, keyInputModel); return(RedirectToAction("DetailInputIndex", keyInputModel)); } }
public ActionResult ReDrowDetail(AttendanceTimeKeyInputModel inputModel) { AttendanceTimeModel viewModel = null; if (!ModelState.IsValid) { // 通常の方法では入力エラーにならないため例外を発生させる throw new ArgumentException(); } viewModel = this._ControllerSupport.InvokeServiceAndSetMessage( _AttendanceTimeService, m => m.GetDetail(inputModel), _SessionManager.GetUserInfoModel(), string.Empty); ModelState.Clear(); return(PartialView("ListRow", viewModel)); }
/// <summary> /// 出退勤時間検索(存在しないときは新規作成して返却) /// </summary> /// <param name="condition">対象ユーザーと対象年月</param> /// <param name="today">システム日付</param> /// <returns>出退勤時間リスト</returns> private List <AttendanceTimeModel> SearchWithMakeAttendanceTime(AttendanceTimeConditionModel condition, DateTime today) { // 検索条件で出退勤時間を検索する List <V200AttendanceTime> resultList = this._V200Repository.GetAttendanceTimeList(condition); // 結果が該当なしの場合は新規に作成する if (resultList.Count == 0) { int daysInMonth = DateTime.DaysInMonth(condition.WorkYear, condition.WorkMonth); for (int i = 1; i <= daysInMonth; i++) { AttendanceTimeKeyInputModel keyModel = new AttendanceTimeKeyInputModel() { UserId = condition.UserId, WorkYear = condition.WorkYear.ToString(), WorkMonth = condition.WorkMonth.ToString(), WorkDay = i.ToString(), WorkNo = "1" }; // 空行作成 T200AttendanceTime newData = CreateEmptyDetail(keyModel, today); this._T200Repository.InsertAttendanceTime(newData); } // Dbに登録 if (!this.SaveChangeFunc()) { // 失敗時はエラーを表示 this.ServiceMessage.AddErrorMessage(null, Resources.MEP0004); } // 成功しても失敗しても再度検索する(結果0件なら0件で表示する) resultList = this._V200Repository.GetAttendanceTimeList(condition); } var attendanceTimeList = new List <AttendanceTimeModel>(); // コピー foreach (var dbModel in resultList) { // Dbモデルから出退勤モデルを生成する AttendanceTimeModel model = CreateAttendanceTimeModel(dbModel); // リストに追加 attendanceTimeList.Add(model); } return(attendanceTimeList); }
/// <summary> /// 出退勤画面入力画面表示 /// </summary> /// <param name="keyModel">キー情報</param> /// <returns>ビューモデル</returns> public AttendanceTimeDetailViewModel InitDetail(AttendanceTimeKeyInputModel keyModel) { AttendanceTimeDetailViewModel model = new AttendanceTimeDetailViewModel(); AttendanceTimeModel detailModel = this.GetDetail(keyModel); // コピー ModelUtil.CopyModelToModel(detailModel, model); // リストボックス用のデータを取得する // 勤務区分 model.OptionWorkKind = new List <SelectListItem>(); // 空行追加 model.OptionWorkKind.Add(new SelectListItem()); List <M201CodeMst> workKindList = this._M201CodeMstRepository.GetCodeMstList(M201CodeMstRepository.CD_KIND_WORK_KIND); foreach (var dbItem in workKindList) { SelectListItem item = new SelectListItem() { Value = dbItem.Cd, Text = dbItem.Name }; model.OptionWorkKind.Add(item); } // 休日区分 model.OptionHolidayKind = new List <SelectListItem>(); List <M201CodeMst> holidayKindList = this._M201CodeMstRepository.GetCodeMstList(M201CodeMstRepository.CD_KIND_HOLIDAY_KIND); foreach (var dbItem in holidayKindList) { SelectListItem item = new SelectListItem() { Value = dbItem.Cd, Text = dbItem.Name }; model.OptionHolidayKind.Add(item); } return(model); }
public ActionResult AddEmptyDetail(AttendanceTimeKeyInputModel keyModel) { // 入力エラーがない場合 AttendanceTimeModel viewModel = null; if (ModelState.IsValid) { viewModel = this._ControllerSupport.InvokeServiceAndSetMessage( _AttendanceTimeService, m => m.AddEmptyDetail(keyModel), _SessionManager.GetUserInfoModel(), string.Empty); } if (ModelState.IsValid) { return(Json(viewModel)); } else { // エラー時はメッセージを返却する return(Json(new { ErrorMessage = "登録に失敗しました。" })); } }
/// <summary> /// 明細情報取得 /// </summary> /// <param name="keyModel">キー情報</param> /// <returns>ビューモデル</returns> public AttendanceTimeModel GetDetail(AttendanceTimeKeyInputModel keyModel) { // キーに対する出退勤情報を取得する AttendanceTimeConditionModel condition = new AttendanceTimeConditionModel() { UserId = this.UserInfoModel.UserId, WorkYear = int.Parse(keyModel.WorkYear), WorkMonth = int.Parse(keyModel.WorkMonth), WorkDay = int.Parse(keyModel.WorkDay), WorkNo = int.Parse(keyModel.WorkNo) }; V200AttendanceTime dbModel = this._V200Repository.GetAttendanceTimeByKey(condition); // 結果がnullの場合は通常のルートではありえないので、引数エラーとして例外を発生させ、エラー画面に遷移させる if (dbModel == null) { throw new ArgumentException("keyModel"); } // Dbモデルから出退勤モデルを生成する AttendanceTimeModel model = CreateAttendanceTimeModel(dbModel); return(model); }
public AttendanceTimeModel DeleteDetail(AttendanceTimeKeyInputModel keyModel) { // 現在日時を取得する DateTime today = DateTime.Now; // 入力モデルのチェック // 更新の許可は、本人と経理のみ if (keyModel.UserId != this.UserInfoModel.UserId && !Constants.ROLE_ACT.Split(',').Contains(this.UserInfoModel.CurrentPositionCd)) { // 不正アクセスのため例外 throw new ArgumentException("keyModel"); } // キーに対する出退勤情報を取得する AttendanceTimeConditionModel condition = new AttendanceTimeConditionModel() { UserId = this.UserInfoModel.UserId, WorkYear = int.Parse(keyModel.WorkYear), WorkMonth = int.Parse(keyModel.WorkMonth), WorkDay = int.Parse(keyModel.WorkDay) }; List <T200AttendanceTime> sourceList = this._T200Repository.GetAttendanceTimeList(condition); int workNo = int.Parse(keyModel.WorkNo); T200AttendanceTime source = sourceList.Where(m => m.WorkNo == workNo).FirstOrDefault(); // 該当データがない場合はすでに削除されたと判断する if (sourceList.Count == 0 || source == null) { this.ServiceMessage.AddErrorMessage(null, string.Format(Resources.MEP0004, "出退勤")); } else if (sourceList.Count == 1) { // 対象の日の中で最後の1件の場合は削除できない this.ServiceMessage.AddErrorMessage(null, Resources.MEP0009); } // 削除に関しては楽観ロックを考慮しない。 // 画面表示→他のユーザーが更新→削除の場合を許容する // エラーがない場合は削除処理を行う if (this.ServiceMessage.IsValid) { this._T200Repository.DeleteAttendanceTime(source); // Dbに登録 if (!this.SaveChangeFunc()) { // 失敗時はエラーを表示 this.ServiceMessage.AddErrorMessage(null, Resources.MEP0004); } } // エラーがない場合は削除情報を返却する if (this.ServiceMessage.IsValid) { // Dbモデルから出退勤モデルを生成する AttendanceTimeModel model = CreateAttendanceTimeModel(source); return(model); } else { return(null); } }
public AttendanceTimeModel AddEmptyDetail(AttendanceTimeKeyInputModel keyModel) { // 現在日時を取得する DateTime today = DateTime.Now; // 入力モデルのチェック // 更新の許可は、本人と経理のみ if (keyModel.UserId != this.UserInfoModel.UserId && !Constants.ROLE_ACT.Split(',').Contains(this.UserInfoModel.CurrentPositionCd)) { // 不正アクセスのため例外 throw new ArgumentException("keyModel"); } // 年月日に対する行情報を取得する AttendanceTimeConditionModel condition = new AttendanceTimeConditionModel() { UserId = this.UserInfoModel.UserId, WorkYear = int.Parse(keyModel.WorkYear), WorkMonth = int.Parse(keyModel.WorkMonth), WorkDay = int.Parse(keyModel.WorkDay) }; List <T200AttendanceTime> source = this._T200Repository.GetAttendanceTimeList(condition); // 該当なしの場合は不正アクセス if (source.Count == 0) { // 不正アクセスのため例外 throw new ArgumentException("keyModel"); } T200AttendanceTime maxDetail = source.OrderByDescending(m => m.WorkNo).First(); // 最大行+1で新しい行を作成する AttendanceTimeKeyInputModel newKeyModel = new AttendanceTimeKeyInputModel(); ModelUtil.CopyModelToModel(keyModel, newKeyModel); newKeyModel.WorkNo = (maxDetail.WorkNo + 1).ToString(); T200AttendanceTime newData = CreateEmptyDetail(newKeyModel, today); this._T200Repository.InsertAttendanceTime(newData); // Dbに登録 if (!this.SaveChangeFunc()) { // 失敗時はエラーを表示 this.ServiceMessage.AddErrorMessage(null, Resources.MEP0004); } // エラーがない場合は追加情報を返却する if (this.ServiceMessage.IsValid) { // Dbモデルから出退勤モデルを生成する AttendanceTimeModel model = CreateAttendanceTimeModel(newData); return(model); } else { return(null); } }
public AttendanceTimeModel UpdateDetail(AttendanceTimeInputModel inputModel) { // 現在日時を取得する DateTime today = DateTime.Now; // 入力モデルのチェック // 更新の許可は、本人と経理のみ if (inputModel.UserId != this.UserInfoModel.UserId && !Constants.ROLE_ACT.Split(',').Contains(this.UserInfoModel.CurrentPositionCd)) { // 不正アクセスのため例外 throw new ArgumentException("inputModel"); } // キーに対する出退勤情報を取得する AttendanceTimeConditionModel condition = new AttendanceTimeConditionModel() { UserId = this.UserInfoModel.UserId, WorkYear = int.Parse(inputModel.WorkYear), WorkMonth = int.Parse(inputModel.WorkMonth), WorkDay = int.Parse(inputModel.WorkDay), WorkNo = int.Parse(inputModel.WorkNo) }; T200AttendanceTime source = this._T200Repository.GetAttendanceTimeByKey(condition); // 該当データがない場合はすでに削除されたと判断する if (source == null) { this.ServiceMessage.AddErrorMessage(null, string.Format(Resources.MEP0004, "出退勤")); } else { // データが存在し、表示時の更新日時と異なる場合は、他のユーザーが更新したと判断する。 if (source.UpdateDttm != DateConvUtil.ConvertDtmStrToDate(inputModel.UpdateDttmStr) || source.UpdateUserId != inputModel.UpdateUserId) { this.ServiceMessage.AddErrorMessage(null, string.Format(Resources.MEP0004, "出退勤")); } } T200AttendanceTime result = null; // エラーがない場合は更新処理を行う if (this.ServiceMessage.IsValid) { T200AttendanceTime updModel = new T200AttendanceTime() { WorkKind = inputModel.WorkKind, HolidayKind = inputModel.HolidayKind, StartTime = DateConvUtil.ConvertTimeStrHmToTimeSpan(inputModel.StartTime), EndTime = DateConvUtil.ConvertTimeStrHmToTimeSpan(inputModel.EndTime), RestTime = DateConvUtil.ConvertTimeStrHmToTimeSpan(inputModel.RestTime), Remarks = inputModel.Remarks, UpdateUserId = this.UserInfoModel.UserId, UpdateDttm = today }; result = this._T200Repository.UpdateAttendanceTime(source, updModel); // Db確定 if (!this.SaveChangeFunc()) { // 失敗時は楽観ロックエラー扱いとする this.ServiceMessage.AddErrorMessage(null, string.Format(Resources.MEP0004, "出退勤")); } } // 更新失敗時はnullを返却する if (!this.ServiceMessage.IsValid) { return(null); } // 成功時は更新データを返却する // Dbモデルから出退勤モデルを生成する AttendanceTimeModel model = CreateAttendanceTimeModel(result); return(model); }