public AttendanceTimeViewModel Init() { // 初期表示は、当月分のログインユーザーの出退勤時間を表示する DateTime today = DateTime.Now; AttendanceTimeViewModel viewModel = new AttendanceTimeViewModel(); string targetUserId = this.UserInfoModel.UserId; int targetYear = today.Year; int targetMonth = today.Month; // 当月分のデータを検索する AttendanceTimeConditionModel condition = new AttendanceTimeConditionModel() { UserId = targetUserId, WorkYear = targetYear, WorkMonth = targetMonth }; viewModel.AttendanceTimeList = this.SearchWithMakeAttendanceTime(condition, today); viewModel.WorkYear = targetYear; viewModel.WorkMonth = targetMonth; viewModel.UserId = targetUserId; viewModel.UserName = this.UserInfoModel.UserName; return(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); }
public AttendanceTimeViewModel SelectMonth(AttendanceTimeSelectMonthInputModel inputModel) { // 初期表示は、当月分のログインユーザーの出退勤時間を表示する DateTime today = DateTime.Now; AttendanceTimeViewModel viewModel = new AttendanceTimeViewModel(); string targetUserId = inputModel.UserId; int targetYear = int.Parse(inputModel.WorkYear); int targetMonth = int.Parse(inputModel.WorkMonth); if (inputModel.MonthBtn == "1") { targetMonth -= 1; if (targetMonth == 0) { targetMonth = 12; targetYear -= 1; } } else { targetMonth += 1; if (targetMonth == 13) { targetMonth = 1; targetYear += 1; } } // 指定月分のデータを検索する AttendanceTimeConditionModel condition = new AttendanceTimeConditionModel() { UserId = targetUserId, WorkYear = targetYear, WorkMonth = targetMonth }; viewModel.AttendanceTimeList = this.SearchWithMakeAttendanceTime(condition, today); viewModel.WorkYear = targetYear; viewModel.WorkMonth = targetMonth; viewModel.UserId = targetUserId; viewModel.UserName = this._UserInfoRepository.GetUserInfo(targetUserId).UserName; return(viewModel); }
/// <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); }