/// <summary> /// The mark subject form as read only. /// </summary> /// <param name="formId"> /// The form id. /// </param> /// <param name="subjectId"> /// The subject id. /// </param> /// <param name="appUserId"> /// The app user id. /// </param> /// <param name="lockFor"> /// The lock for. /// </param> public void MarkSubjectFormAsReadOnly(int formId, int subjectId, int appUserId, int lockFor = 30) { var lockedForm = _context.FormInProcesses.FirstOrDefault(f => f.FormId == formId && f.SubjectId == subjectId); if (lockedForm == null) { lockedForm = new FormInProcess(); _context.FormInProcesses.Add(lockedForm); } lockedForm.FormId = formId; lockedForm.SubjectId = subjectId; lockedForm.AppUserId = appUserId; lockedForm.IsLocked = true; lockedForm.MaxLockTimeMin = lockFor; lockedForm.OpenendOn = DateTime.UtcNow; }
/// <summary> /// The unlock form from read only. /// </summary> /// <param name="formId"> /// The form id. /// </param> /// <param name="subjectId"> /// The subject id. /// </param> /// <param name="appUserId"> /// The app user id. /// </param> public void UnlockFormFromReadOnly(int formId, int subjectId, int appUserId) { var lockedForm = _context.FormInProcesses.FirstOrDefault(f => f.FormId == formId && f.SubjectId == subjectId); if (lockedForm == null) { lockedForm = new FormInProcess(); _context.FormInProcesses.Add(lockedForm); } lockedForm.FormId = formId; lockedForm.SubjectId = subjectId; lockedForm.AppUserId = 0; lockedForm.IsLocked = false; lockedForm.ReleasedOn = DateTime.UtcNow; lockedForm.UnlockedByAppUserId = appUserId; }
/// <summary> /// The can open form to write for subject. /// </summary> /// <param name="formId"> /// The form id. /// </param> /// <param name="subjectId"> /// The subject id. /// </param> /// <param name="appUserId"> /// The app user id. /// </param> /// <returns> /// The <see cref="bool"/> . /// </returns> public bool CanOpenFormToWriteForSubject(int formId, int subjectId, int appUserId) { var lockedForm = _context.FormInProcesses.FirstOrDefault(f => f.FormId == formId && f.SubjectId == subjectId); if (lockedForm == null) { lockedForm = new FormInProcess { AppUserId = 0, FormId = formId, SubjectId = subjectId, IsLocked = false, MaxLockTimeMin = 0 }; _context.Commit(); } if (lockedForm.IsLocked) { if ((DateTime.UtcNow - lockedForm.OpenendOn).Minutes > lockedForm.MaxLockTimeMin || lockedForm.AppUserId == appUserId) { UnlockFormFromReadOnly(formId, subjectId, appUserId); _context.Commit(); } } return(lockedForm.IsLocked); }