/// <summary> /// 出退勤時間モデル生成 /// </summary> /// <param name="dbModel">V200出退勤時間ビューモデル</param> /// <returns>出退勤時間モデル</returns> private AttendanceTimeModel CreateAttendanceTimeModel(object dbModel) { // Dbモデルから出退勤時間モデルにコピーする var model = (AttendanceTimeModel)ModelUtil.CopyModelToModel(dbModel, new AttendanceTimeModel()); // キー情報の設定 AttendanceTimeKeyInputModel keyModel = new AttendanceTimeKeyInputModel() { UserId = model.UserId, WorkYear = model.WorkYear.ToString(), WorkMonth = model.WorkMonth.ToString(), WorkDay = model.WorkDay.ToString(), WorkNo = model.WorkNo.ToString() }; // キーの設定 model.KeyValueJSon = Json.Encode(keyModel); // 曜日の設定 model.WeekDay = Constants.WEEK_DAY_KANJI[(int)new DateTime(model.WorkYear, model.WorkMonth, model.WorkDay).DayOfWeek]; // 楽観ロック用の更新日時 model.UpdateDttmStr = DateConvUtil.ConvertDateToStrDtmm(model.UpdateDttm); return(model); }
/// <summary> /// 時刻形式チェック /// </summary> /// <param name="value"></param> /// <returns></returns> public override bool IsValid(object value) { if (string.IsNullOrEmpty((string)value)) { // nullの場合はチェックしない return(true); } // 時刻整形する if (DateConvUtil.FormatTimeStr((string)value) != null) { return(true); } return(false); }
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); }