/// <summary> /// 取得預設點名紀錄資料(預設狀態:缺席) /// </summary> /// <param name="creatorId">建立者編號</param> /// <param name="memberIds">成員memberId陣列</param> private List <ActRollCallLog> GetInitLogs(int creatorId, int[] memberIds) { // 產生成員預設出缺勤資料 var logs = new List <ActRollCallLog>(); foreach (var man in memberIds) { var log = new ActRollCallLog() { StudId = man, Status = AttendanceState.Absence, CreateUser = creatorId, Created = TimeData.Create(DateTime.UtcNow), Updated = TimeData.Create(DateTime.UtcNow), Deleted = TimeData.Create(null) }; logs.Add(log); } return(logs); }
/// <summary> /// 更新點名活動簽到狀態 /// </summary> /// <param name="memId"></param> /// <param name="eventId"></param> /// <param name="studId"></param> /// <param name="status"></param> public Infrastructure.ValueObject.SignInLog UpdateLog(int memId, Guid eventId, int studId, string status) { var dt = DateTime.UtcNow; var rtn = new Infrastructure.ValueObject.SignInLog(); try { #region //1. 更新點名log var db = _uow.DbContext; var rollCallInfo = db.ActRollCall.FirstOrDefault(x => x.EventId == eventId); var log = db.ActRollCallLog.FirstOrDefault(x => x.RollCallId == rollCallInfo.Id && x.StudId == studId); if (log == null) { var newLogEntity = new ActRollCallLog() { RollCallId = rollCallInfo.Id, StudId = studId, Status = status, Created = TimeData.Create(DateTime.UtcNow), Deleted = TimeData.Create(null), Updated = TimeData.Create(null), CreateUser = memId }; var newAttendanceRecord = new AttendanceRecord() { LearningId = rollCallInfo.LearningId, EventId = rollCallInfo.EventId, StudId = studId, Status = status, UpdateTime = DateTime.UtcNow }; db.AttendanceRecord.Add(newAttendanceRecord); db.ActRollCallLog.Add(newLogEntity); log = newLogEntity; } var oldState = log.Status; if (log.Time.HasValue == false) { log.Time = dt; //第一次因參與活動而改變狀態的時間 } log.Status = status; log.UpdateUser = memId; log.Updated = TimeData.Create(dt); #endregion #region //2. 更新核心出缺勤 var attend = db.AttendanceRecord.FirstOrDefault(x => x.EventId == eventId && x.StudId == studId); if (attend != null) { attend.Status = status; attend.UpdateTime = dt; } #endregion #region //2017-01-09 add by sophiee 狀態變更,也更新活動最後編輯時間 var act = db.Activitys.FirstOrDefault(x => x.OuterKey == eventId); if (act != null) { act.UpdateUser = memId; act.Updated = Infrastructure.Property.TimeData.Create(dt); } #endregion //查詢人員資訊 var creator = db.Members.FirstOrDefault(x => x.Id == log.CreateUser); // var stu = db.Members.Where(x => x.Id == studId).SingleOrDefault(); if (creator != null) { rtn.CreatorAccount = creator.Account; } //執行 db.SaveChanges(); var stu = db.Members.FirstOrDefault(t => t.Id == studId); #region // 3.回傳資訊 if (stu != null) { rtn.StuId = studId; rtn.StudId = stu.Account; rtn.StudName = stu.Name; rtn.StudPhoto = stu.Photo; } var learningInfo = db.LearningCircle.FirstOrDefault(t => t.LearningOuterKey == act.ToRoomId); if (learningInfo != null) { var leaveinfoYear = db.AttendanceLeave.Where(t => t.StudId == studId && t.LearningId == learningInfo.Id && t.LeaveDate.Year == act.StartDate.Value.Year); var leaveInfoMonth = leaveinfoYear.Where(t => t.LeaveDate.Month == act.StartDate.Value.Month); var leaveInfo = leaveInfoMonth.Where(t => t.LeaveDate.Day == act.StartDate.Value.Day); if (leaveInfo != null) { var _index = 0; foreach (var _leave in leaveInfo) { if (rtn.LeaveStatus == "10") { break; } else if (_leave.Status == "10") { rtn.LeaveStatus = _leave.Status; } else if (_index < leaveInfo.Count() && _leave.Status == "20") { rtn.LeaveStatus = _leave.Status; } else if (_index < leaveInfo.Count() && rtn.LeaveStatus == null) { rtn.LeaveStatus = _leave.Status; } rtn.LeaveEventId = _leave.EventId; _index++; } } } rtn.Status = status; rtn.OldState = int.Parse(oldState); rtn.Time = log.Time; rtn.UpdateDate_Utc = dt; #endregion } catch (Exception ex) { throw ex; } return(rtn); }