Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        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);
        }