/// <summary> /// 主キーによる出退勤時間取得 /// </summary> /// <param name="key">主キー</param> /// <returns>出退勤時間(該当なしはnull)</returns> public T200AttendanceTime GetAttendanceTimeByKey(AttendanceTimeConditionModel key) { IQueryable <T200AttendanceTime> query = this._DbContext.T200_ATTENDANCE_TIME.Where( m => m.UserId == key.UserId && m.WorkYear == key.WorkYear && m.WorkMonth == key.WorkMonth && m.WorkDay == key.WorkDay && m.WorkNo == key.WorkNo); T200AttendanceTime result = query.Select(m => m).FirstOrDefault(); return(result); }
/// <summary> /// 出退勤時間更新 /// </summary> /// <param name="org">元データ</param> /// <param name="upd">更新データ</param> /// <returns>更新後データ</returns> public T200AttendanceTime UpdateAttendanceTime(T200AttendanceTime org, T200AttendanceTime upd) { org.WorkKind = upd.WorkKind; org.StartTime = upd.StartTime; org.EndTime = upd.EndTime; org.RestTime = upd.RestTime; org.HolidayKind = upd.HolidayKind; org.Remarks = upd.Remarks; org.UpdateDttm = upd.UpdateDttm; org.UpdateUserId = upd.UpdateUserId; return(org); }
/// <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> /// <param name="processDate">処理日時</param> /// <returns>空行用の出退勤時間データ</returns> private T200AttendanceTime CreateEmptyDetail(AttendanceTimeKeyInputModel keyModel, DateTime processDate) { int year = int.Parse(keyModel.WorkYear); int month = int.Parse(keyModel.WorkMonth); int day = int.Parse(keyModel.WorkDay); DateTime loopDay = new DateTime(year, month, day); // 週の初めの日を算出(月曜日が週の初め) DateTime weekStartDate = new DateTime(year, month, day); if ((int)loopDay.DayOfWeek == 0) { // 日曜日の場合 weekStartDate = weekStartDate.AddDays(-6); } else { weekStartDate = weekStartDate.AddDays(-((int)loopDay.DayOfWeek - 1)); } T200AttendanceTime model = new T200AttendanceTime() { WorkYear = year, WorkMonth = month, WorkDay = day, WorkNo = int.Parse(keyModel.WorkNo), WorkKind = null, WeekStartDate = weekStartDate, UserId = keyModel.UserId, StartTime = null, EndTime = null, RestTime = null, HolidayKind = Constants.HOLIDAY_KIND_NORMAL, Remarks = null, UpdateUserId = keyModel.UserId, CreateDttm = processDate, UpdateDttm = processDate, DeleteFlg = Constants.DELETE_FLG_NORMAL, DepartmentCd = this.UserInfoModel.CurrentDepartmentCd }; 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); }
/// <summary> /// 出退勤時間追加 /// </summary> /// <param name="data">追加データ</param> /// <returns>更新後データ</returns> public T200AttendanceTime InsertAttendanceTime(T200AttendanceTime data) { this._DbContext.T200_ATTENDANCE_TIME.Add(data); return(data); }
/// <summary> /// 出退勤時間削除 /// </summary> /// <param name="data">削除データ</param> /// <returns>削除後データ</returns> public T200AttendanceTime DeleteAttendanceTime(T200AttendanceTime data) { this._DbContext.T200_ATTENDANCE_TIME.Remove(data); return(data); }