diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.csproj b/IRaCIS.Core.API/IRaCIS.Core.API.csproj
index 96ded117f..6f94ee5b8 100644
--- a/IRaCIS.Core.API/IRaCIS.Core.API.csproj
+++ b/IRaCIS.Core.API/IRaCIS.Core.API.csproj
@@ -115,12 +115,6 @@
Always
-
- Always
-
-
- Always
-
Always
diff --git a/IRaCIS.Core.API/wwwroot/EmailTemplate.rar b/IRaCIS.Core.API/wwwroot/EmailTemplate.rar
deleted file mode 100644
index 947adef16..000000000
Binary files a/IRaCIS.Core.API/wwwroot/EmailTemplate.rar and /dev/null differ
diff --git a/IRaCIS.Core.API/wwwroot/EmailTemplate.zip b/IRaCIS.Core.API/wwwroot/EmailTemplate.zip
deleted file mode 100644
index 39ac004c0..000000000
Binary files a/IRaCIS.Core.API/wwwroot/EmailTemplate.zip and /dev/null differ
diff --git a/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest.html b/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest.html
deleted file mode 100644
index 0d184d0a3..000000000
--- a/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
- Title
-
-
-
-
-
- 您好:
-
-
- 感谢您使用展影云平台。
-
-
- {0}。
-
-
-
-
祝您顺利!/Best Regards
-
上海展影医疗科技有限公司
-
-
-
-
-
diff --git a/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest_US.html b/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest_US.html
deleted file mode 100644
index 183b8a835..000000000
--- a/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest_US.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
- Title
-
-
-
-
-
- Dear:
-
-
- Thank you for using Extensive Imaging Cloud System.
-
-
- {0}。
-
-
-
-
Best Regards
-
Shanghai Extensive Imaging Medical Technology Co., LTD
-
-
-
-
-
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index ab840c866..ecee6e76d 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -9904,18 +9904,126 @@
- Site 调研 每个项目 需要处理的审批统计
+ 中心调研 每个项目 需要处理的审批统计
- 需要签署文件数量 系统级别的在第一行
+ 待签署的项目文件 需要签署文件数量 系统级别的在第一行
+
+
+ 一致性核查待处理
+
+
+
+
+
+
+
+ 重阅申请待审核
+
+
+
+
+
+
+ 阅片人筛选
+
+
+ vvv
+
+
+
+ 重阅审批
+
+
+
+
+
+
+ 临床数据
+
+
+
+
+
+
+
+ CRC影像质疑待处理
+
+
+
+
+
+
+
+ 核查质疑待处理
+
+
+
+
+
+
+
+ 影像重传
+
+
+
+
+
+
+
+ 加急影像提交
+
+
+
+
+
+
+
+ 影像质控 待领取 跟项目配置有关系 --未完成
+
+
+
+
+
+
+
+ QC 质疑
+
+
+
+
+
+
+
+ IR 影像阅片 待阅量 复杂 --未完成
+
+
+
+
+
+
+
+
+ IR医学反馈
+
+
+
+
+
+
+ MIM医学反馈
+
+
+
+
阅片信息签名验证接口
diff --git a/IRaCIS.Core.Application/Service/Common/MailService.cs b/IRaCIS.Core.Application/Service/Common/MailService.cs
index f6cf2a275..f784e4c89 100644
--- a/IRaCIS.Core.Application/Service/Common/MailService.cs
+++ b/IRaCIS.Core.Application/Service/Common/MailService.cs
@@ -398,7 +398,7 @@ namespace IRaCIS.Application.Services
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == sysUserInfo.Id, u => new User() { EmailToken = token });
- routeUrl = routeUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&access_token=" + token;
+ routeUrl = routeUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us?"en":"zh") + "&access_token=" + token;
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
@@ -512,7 +512,7 @@ namespace IRaCIS.Application.Services
{
var templateInfo = SourceReader.ReadToEnd();
- var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&access_token=" + token;
+ var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
@@ -576,7 +576,7 @@ namespace IRaCIS.Application.Services
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
- var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&access_token=" + token;
+ var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}";
@@ -694,7 +694,7 @@ namespace IRaCIS.Application.Services
{
var templateInfo = SourceReader.ReadToEnd();
- var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + userType.UserTypeShortName + "&access_token=" + token;
+ var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + userType.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
diff --git a/IRaCIS.Core.Application/Service/Management/UserTypeService.cs b/IRaCIS.Core.Application/Service/Management/UserTypeService.cs
index 8cf99be11..009323dfc 100644
--- a/IRaCIS.Core.Application/Service/Management/UserTypeService.cs
+++ b/IRaCIS.Core.Application/Service/Management/UserTypeService.cs
@@ -157,7 +157,7 @@ namespace IRaCIS.Core.Application.Contracts
public async Task> GetTrialUserTypeList()
{
var query = userTypeServiceRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
- //.Where(t => t.Type == UserTypeGroup.TrialUser)
+ .Where(t => !t.UserTypeGroupList.Any(t=> t.Group.Code=="3"))
.OrderBy(t => t.Order).ProjectTo(_mapper.ConfigurationProvider);
return await query.ToListAsync();
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
index ad6e0cb8b..863b85a5b 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
@@ -42,7 +42,7 @@ namespace IRaCIS.Core.Application.Contracts
public int? TotalNeedSignDocCount => TotalNeedSignTrialDocCount + TotalNeedSignSystemDocCount;
- public int? TotalApprovalRequiredCount { get; set; }
+ public int? TotalApprovalRequiredCount { get; set; }
public int? TotalSystemNoticeCount { get; set; }
@@ -56,9 +56,9 @@ namespace IRaCIS.Core.Application.Contracts
}
- public class TrialSiteSurveyStat:TrialSelectDTO
+ public class TrialSiteSurveyStat : TrialSelectDTO
{
- public int? ApprovalRequiredCount { get; set; }
+ public int? ApprovalRequiredCount { get; set; }
@@ -75,4 +75,181 @@ namespace IRaCIS.Core.Application.Contracts
}
+ public class CheckToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class CheckToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeCheckedCount { get; set; }
+
+ public int? ToBeRepliedCount { get; set; }
+ }
+
+
+ public class ReReadingApplyToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ReReadingApplyToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+
+
+ public int? ToBeApprovalCount { get; set; }
+ }
+
+
+ public class ReviewerSelectToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ReviewerSelectToBeDoneDto : TrialBaseInfoDto
+ {
+ public bool IsUrgent { get; set; }
+
+ public int? ToBeApprovalCount { get; set; }
+ }
+
+
+ public class ReReadingApprovalToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ReReadingApprovalToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeApprovalCount { get; set; }
+ }
+
+ public class ImageQuestionToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageQuestionToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+ public class IRImageReadingToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class IRImageReadingToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? UnReadCount { get; set; }
+
+ public int? HaveSignedCount { get; set; }
+ }
+
+
+
+
+
+ public class MedicalCommentsToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class MedicalCommentsToBeDoneDto : TrialBaseInfoDto
+ {
+
+ public string CriterionName { get; set; }
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+ public class ImageCheckQuestionToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageCheckQuestionToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+ public class ImageSubmittedToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageSubmittedToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+ public class ImageQualityToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageQualityToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeReviewedCount { get; set; }
+
+ public int? ToBeClaimedCount { get; set; }
+ }
+
+
+
+
+ public class ImageReUploadToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageReUploadToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+ public class ImageClinicalDataToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageClinicalDataToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+
+
+
+
+ public class TrialBaseInfoDto
+ {
+ public Guid TrialId { get; set; }
+ public string ExperimentName { get; set; } = string.Empty;
+
+ public string TrialCode { get; set; } = string.Empty;
+
+ public string ResearchProgramNo { get; set; } = string.Empty;
+ }
}
\ No newline at end of file
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
index d841dd3c8..7a77d8697 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
@@ -13,8 +13,8 @@ namespace IRaCIS.Core.Application
private readonly IRepository _systemDocumentRepository;
private readonly IRepository _systemNoticeRepository;
- public PersonalWorkstation(IRepository trialRepository, IRepository trialUserRepository, IRepository trialDocumentRepository,
- IRepository systemDocumentRepository,IRepository systemNoticeRepository)
+ public PersonalWorkstation(IRepository trialRepository, IRepository trialUserRepository, IRepository trialDocumentRepository,
+ IRepository systemDocumentRepository, IRepository systemNoticeRepository)
{
_trialRepository = trialRepository;
_trialUserRepository = trialUserRepository;
@@ -44,7 +44,7 @@ namespace IRaCIS.Core.Application
TotalNeedSignTrialDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
- ? 0
+ ? 0
: await _trialDocumentRepository.AsQueryable(true).Where(t => t.Trial.TrialStatusStr != StaticData.TrialState.TrialStopped)
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsDeleted == false || (t.IsDeleted == true && t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime != null)))
@@ -56,15 +56,15 @@ namespace IRaCIS.Core.Application
? 0
//废除了 已经签署了也要算进去
: await _trialDocumentRepository.AsQueryable(true).Where(t => t.Trial.TrialStatusStr != StaticData.TrialState.TrialStopped)
- .Where( t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
+ .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
.SelectMany(t => t.TrialDocConfirmedUserList)
- .CountAsync(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime !=null),
+ .CountAsync(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime != null),
TotalNeedSignSystemDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
? 0
: await _systemDocumentRepository
- .Where(t => t.IsDeleted == false || (t.IsDeleted == true && t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime !=null)))
+ .Where(t => t.IsDeleted == false || (t.IsDeleted == true && t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime != null)))
.SelectMany(t => t.NeedConfirmedUserTypeList)
.CountAsync(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId),
@@ -76,22 +76,22 @@ namespace IRaCIS.Core.Application
.SelectMany(t => t.SystemDocConfirmedUserList)
.CountAsync(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime != null),
- TotalApprovalRequiredCount=
+ TotalApprovalRequiredCount =
_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM ?
- _trialRepository.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)).SelectMany(t=>t.TrialSiteSurveyList).Where(t => t.State == TrialSiteSurveyEnum.SPMApproved).Count()
- : _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM|| _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM
- ? _trialRepository.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)).SelectMany(t => t.TrialSiteSurveyList).Where(t => t.State == TrialSiteSurveyEnum.CRCSubmitted).Count()
- :0,
+ _trialRepository.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)).SelectMany(t => t.TrialSiteSurveyList).Where(t => t.State == TrialSiteSurveyEnum.SPMApproved).Count()
+ : _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM
+ ? _trialRepository.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)).SelectMany(t => t.TrialSiteSurveyList).Where(t => t.State == TrialSiteSurveyEnum.CRCSubmitted).Count()
+ : 0,
- TotalSystemNoticeCount= _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
- ? 0:await _systemNoticeRepository.Where(t => t.NoticeUserTypeList.Any(t => t.UserTypeId == _userInfo.UserTypeId) && t.NoticeStateEnum== Domain.Share.Management.SystemNotice_NoticeStateEnum.HavePublished)
-
+ TotalSystemNoticeCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
+ ? 0 : await _systemNoticeRepository.Where(t => t.NoticeUserTypeList.Any(t => t.UserTypeId == _userInfo.UserTypeId) && t.NoticeStateEnum == Domain.Share.Management.SystemNotice_NoticeStateEnum.HavePublished)
+
.CountAsync(),
- NeedReadSystemNoticeCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
+ NeedReadSystemNoticeCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
? 0 : await _systemNoticeRepository.Where(t => t.NoticeUserTypeList.Any(t => t.UserTypeId == _userInfo.UserTypeId) && t.NoticeStateEnum == Domain.Share.Management.SystemNotice_NoticeStateEnum.HavePublished
- && !t.NoticeUserReadList.Any(t=>t.CreateUserId==_userInfo.Id))
+ && !t.NoticeUserReadList.Any(t => t.CreateUserId == _userInfo.Id))
.Where(t => t.EndDate == null || t.EndDate != null && t.EndDate > DateTime.Now)
.CountAsync(),
@@ -102,7 +102,7 @@ namespace IRaCIS.Core.Application
///
- /// Site 调研 每个项目 需要处理的审批统计
+ /// 中心调研 每个项目 需要处理的审批统计
///
///
///
@@ -134,7 +134,7 @@ namespace IRaCIS.Core.Application
///
- /// 需要签署文件数量 系统级别的在第一行
+ /// 待签署的项目文件 需要签署文件数量 系统级别的在第一行
///
///
///
@@ -147,35 +147,183 @@ namespace IRaCIS.Core.Application
}
else
{
- var trialDocStat = await _trialRepository/*.AsQueryable(true)*/.Where(t=>t.TrialStatusStr != StaticData.TrialState.TrialStopped)
+ var trialDocStat = await _trialRepository/*.AsQueryable(true)*/.Where(t => t.TrialStatusStr != StaticData.TrialState.TrialStopped)
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
- .WhereIf(!_userInfo.IsAdmin, c => c.TrialDocumentList.Where(t => t.IsDeleted == false && t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) && !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime!=null))
+ .WhereIf(!_userInfo.IsAdmin, c => c.TrialDocumentList.Where(t => t.IsDeleted == false && t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) && !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime != null))
.Count() > 0)
.ProjectTo(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id, userTypeId = _userInfo.UserTypeId })
.OrderByDescending(t => t.WaitSignCount)
- .ToPagedListAsync(query.PageIndex, query.PageSize , query.SortField, query.Asc);
-
- //var sysDocStat = new DocSignStat()
- //{
- // IsSystemDoc = true,
- // WaitSignCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
- // ? 0
- // : await _systemDocumentRepository
- // .Where(t =>
- // t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) &&
- // !t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id))
- // .CountAsync()
- //};
- //var list = trialDocStat.CurrentPageData.ToList();
- //list.Insert(0, sysDocStat);
- //trialDocStat.CurrentPageData = list;
- //trialDocStat.TotalCount++;
+ .ToPagedListAsync(query.PageIndex, query.PageSize, query.SortField, query.Asc);
return trialDocStat;
}
-
+ }
+
+
+ #region PM APM 待办
+ ///
+ /// 一致性核查待处理
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetCheckToBeDoneList(CheckToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new CheckToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => (u.CheckState == CheckStateEnum.ToCheck || u.CheckState == CheckStateEnum.CVIng) && u.IsUrgent).Count(),
+ ToBeCheckedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck).Count(),
+ ToBeRepliedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck &&
+ u.CheckChallengeDialogList.Any(t => t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)).Count(),
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ ///
+ /// 重阅申请待审核
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetReReadingApplyToBeDoneList(ReReadingApplyToBeDoneQuery inQuery,
+ [FromServices] IRepository _visitTaskReReadingRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _visitTaskReReadingRepository.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed)
+ .GroupBy(t => new { t.OriginalReReadingTask.Trial.ExperimentName, t.OriginalReReadingTask.Trial.ResearchProgramNo, t.OriginalReReadingTask.Trial.TrialCode, t.OriginalReReadingTask.TrialId })
+ .Select(g => new ReReadingApplyToBeDoneDto()
+ {
+ TrialId = g.Key.TrialId,
+ ResearchProgramNo = g.Key.ResearchProgramNo,
+ ExperimentName = g.Key.ExperimentName,
+ TrialCode = g.Key.TrialCode,
+ UrgentCount = g.Where(u => u.OriginalReReadingTask.IsUrgent == true).Count(),
+ ToBeApprovalCount = g.Count(),
+
+ });
+
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+ #endregion
+
+
+ #region SPM CPM 待办
+
+ ///
+ /// 阅片人筛选
+ ///
+ ///
+ /// vvv
+ [HttpPost]
+ public async Task> GetReviewerSelectToBeDoneList(ReviewerSelectToBeDoneQuery inQuery
+ , [FromServices] IRepository _enrollRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+ var query = _trialRepository
+ .Select(t => new ReviewerSelectToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+
+ IsUrgent = t.IsUrgent || t.IsSubjectExpeditedView,
+ ToBeApprovalCount = t.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.HasCommittedToCRO).Count()
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ ///
+ /// 重阅审批
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetReReadingApprovalToBeDoneToBeDoneList(ReReadingApprovalToBeDoneQuery inQuery,
+ [FromServices] IRepository _visitTaskReReadingRepository,
+ [FromServices] IRepository _trialRepository)
+
+ {
+ var query = _visitTaskReReadingRepository.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
+ .GroupBy(t => new { t.OriginalReReadingTask.Trial.ExperimentName, t.OriginalReReadingTask.Trial.ResearchProgramNo, t.OriginalReReadingTask.Trial.TrialCode, t.OriginalReReadingTask.TrialId })
+ .Select(g => new ReReadingApprovalToBeDoneDto()
+ {
+ TrialId = g.Key.TrialId,
+ ResearchProgramNo = g.Key.ResearchProgramNo,
+ ExperimentName = g.Key.ExperimentName,
+ TrialCode = g.Key.TrialCode,
+ UrgentCount = g.Where(u => u.OriginalReReadingTask.IsUrgent == true).Count(),
+ ToBeApprovalCount = g.Count(),
+
+ });
+
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ #endregion
+
+
+ #region CRC 待办
+
+
+ ///
+ /// 临床数据
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetImageClinicalDataToBeDoneList(ImageClinicalDataToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Where(t=>t.clinicalDataTrialSets.Any(t=>t.ClinicalDataLevel==ClinicalLevel.Subject && t.IsConfirm))
+ .Select(t => new ImageClinicalDataToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => u.IsBaseLine&& u.SubmitState != SubmitStateEnum.Submitted && u.IsUrgent ).Count(),
+ ToBeDealedCount = t.SubjectVisitList.Where(u => u.IsBaseLine && u.SubmitState != SubmitStateEnum.Submitted).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
}
@@ -183,6 +331,364 @@ namespace IRaCIS.Core.Application
+ ///
+ /// CRC影像质疑待处理
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetCRCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+ var query = _trialRepository
+ .Select(t => new ImageQuestionToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.SelectMany(c=>c.QCChallengeList)
+ .Where(u => u.IsClosed==false && u.LatestReplyUser.UserTypeEnum==UserTypeEnum.IQC && u.SubjectVisit.IsUrgent).Count(),
+ ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+
+ .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC ).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ ///
+ /// 核查质疑待处理
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetImageCheckQuestionToBeDoneList(ImageCheckQuestionToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new ImageCheckQuestionToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState==CheckChanllengeTypeEnum.PMWaitCRCReply && u.IsUrgent).Count(),
+ ToBeDealedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply ).Count()
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+ ///
+ /// 影像重传
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetImageReUploadToBeDoneList(ImageReUploadToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new ImageReUploadToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent && u.IsPMBackOrReReading).Count(),
+ ToBeDealedCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+
+
+ ///
+ /// 加急影像提交
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetImageSubmittedToBeDoneList(ImageSubmittedToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new ImageSubmittedToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState ==SubmitStateEnum.ToSubmit && u.IsUrgent).Count(),
+ ToBeDealedCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit ).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+
+ #endregion
+
+ #region IQC待办
+
+
+
+ ///
+ /// 影像质控 待领取 跟项目配置有关系 --未完成
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetImageQualityToBeDoneList(ImageQualityToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository.Where(t=>t.QCProcessEnum != TrialQCProcess.NotAudit)
+ .Select(t => new ImageQualityToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+
+ // 待审核 加急的(待领取 已领取)-- 领取了 还没做 就是待审核
+ UrgentCount = t.SubjectVisitList.Where(u => u.CurrentActionUserId==_userInfo.Id && u.IsUrgent).Count(),
+
+
+ //待领取量
+ ToBeClaimedCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count(),
+
+ //已领取 待审核 审核中 (审核完成 领取人就会清理 所以只用查询当前领取人是自己的就好了)
+ ToBeReviewedCount= t.SubjectVisitList.Where(u => u.CurrentActionUserId==_userInfo.Id ).Count()
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+ ///
+ /// QC 质疑
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetQCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new ImageQuestionToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+ .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(),
+ ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+ .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ #endregion
+
+
+ #region IR待办
+
+ ///
+ /// IR 影像阅片 待阅量 复杂 --未完成
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetIRImageReadingToBeDoneList(IRImageReadingToBeDoneQuery inQuery,
+ [FromServices] IRepository _visitTaskRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new IRImageReadingToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+
+
+ UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+ .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(),
+
+ UnReadCount=t.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.Id && t.ReadingTaskState != ReadingTaskState.HaveSigned && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze))
+ .Where(y=>y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
+
+
+ .Count(),
+
+ HaveSignedCount = t.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.Id
+ && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)
+ && t.ReadingTaskState==ReadingTaskState.HaveSigned).Count()
+
+ });
+
+
+ //var query = _visitTaskRepository.Where(t=>t.DoctorUserId==_userInfo.Id && (t.TaskState == TaskState.Effect ||t.TaskState==TaskState.Freeze))
+ // .GroupBy(t=>new {t.SubjectId,t.TrialId,t.Subject.Code,t.Trial.ResearchProgramNo,t.Trial.ExperimentName, t.BlindSubjectCode})
+ // .Select(t => new IRImageReadingToBeDoneDto()
+ // {
+ // TrialId = t.Id,
+ // ResearchProgramNo = t.ResearchProgramNo,
+ // ExperimentName = t.ExperimentName,
+ // TrialCode = t.TrialCode,
+ // UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+ // .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(),
+ // ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+ // .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(),
+
+ // });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+ ///
+ /// IR医学反馈
+ ///
+ ///
+
+ ///
+ [HttpPost]
+ public async Task> GetIRMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery,
+ [FromServices] IRepository _taskMedicalReviewRepository)
+ {
+
+ var query = _taskMedicalReviewRepository
+ .Where(t=>t.IsClosedDialog==false)
+ .GroupBy(t=>new {t.TrialId, t.Trial.ResearchProgramNo, t.Trial.ExperimentName, t.Trial.TrialCode ,
+ t.VisitTask.TrialReadingCriterionId,t.VisitTask.TrialReadingCriterion.CriterionName})
+ .Select(g => new MedicalCommentsToBeDoneDto()
+ {
+ TrialId = g.Key.TrialId,
+ ResearchProgramNo = g.Key.ResearchProgramNo,
+ ExperimentName = g.Key.ExperimentName,
+ TrialCode = g.Key.TrialCode,
+ CriterionName=g.Key.CriterionName,
+
+ UrgentCount = g.Where(u => u.VisitTask.IsUrgent
+ && u.ReadingMedicalReviewDialogList.OrderByDescending(l=>l.CreateTime).First().UserTypeEnumInt==(int) UserTypeEnum.MIM).Count(),
+
+ ToBeDealedCount = g.Where(u =>
+ u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+
+
+ #endregion
+
+ #region MIM待办
+
+ ///
+ /// MIM医学反馈
+ ///
+ ///
+
+ ///
+ [HttpPost]
+ public async Task> GetMIMMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery,
+ [FromServices] IRepository _taskMedicalReviewRepository)
+ {
+
+ var query = _taskMedicalReviewRepository
+ .Where(t => t.IsClosedDialog == false)
+ .GroupBy(t => new {
+ t.TrialId,
+ t.Trial.ResearchProgramNo,
+ t.Trial.ExperimentName,
+ t.Trial.TrialCode,
+ t.VisitTask.TrialReadingCriterionId,
+ t.VisitTask.TrialReadingCriterion.CriterionName
+ })
+ .Select(g => new MedicalCommentsToBeDoneDto()
+ {
+ TrialId = g.Key.TrialId,
+ ResearchProgramNo = g.Key.ResearchProgramNo,
+ ExperimentName = g.Key.ExperimentName,
+ TrialCode = g.Key.TrialCode,
+ CriterionName = g.Key.CriterionName,
+
+ UrgentCount = g.Where(u => u.VisitTask.IsUrgent
+ && u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count(),
+
+ ToBeDealedCount = g.Where(u =>
+ u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ #endregion
}
}
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig2.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig2.cs
new file mode 100644
index 000000000..912f5b093
--- /dev/null
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig2.cs
@@ -0,0 +1,51 @@
+using AutoMapper;
+using AutoMapper.EquivalencyExpression;
+using IRaCIS.Application.Contracts;
+using IRaCIS.Core.Application.Contracts;
+using IRaCIS.Core.Application.Contracts.DTO;
+using IRaCIS.Core.Application.ViewModel;
+using IRaCIS.Core.Domain.Models;
+using IRaCIS.Core.Domain.Share;
+
+namespace IRaCIS.Core.Application.Service
+{
+ public class PersonalWorkstation : Profile
+ {
+ public PersonalWorkstation()
+ {
+ var userTypeEnumInt = 0;
+
+ var userTypeId = Guid.Empty;
+
+
+ CreateMap()
+ .ForMember(t => t.ExperimentName, u => u.MapFrom(c => c.ExperimentName))
+ .ForMember(t => t.TrialCode, u => u.MapFrom(c => c.TrialCode))
+ .ForMember(t => t.ResearchProgramNo, u => u.MapFrom(c => c.ResearchProgramNo))
+
+ .ForMember(t => t.UrgentCount, u => u.MapFrom(c => c
+ .SubjectVisitList.Where(t=>(t.CheckState==CheckStateEnum.ToCheck ||t.CheckState==CheckStateEnum.CVIng) && t.IsUrgent).Count()))
+ .ForMember(t => t.ToBeCheckedCount, u => u.MapFrom(c => c
+ .SubjectVisitList.Where(t => t.CheckState == CheckStateEnum.ToCheck ).Count()))
+ .ForMember(t => t.ToBeRepliedCount, u => u.MapFrom(c => c
+ .SubjectVisitList.Where(t => (t.CheckState == CheckStateEnum.ToCheck || t.CheckState == CheckStateEnum.CVIng) && t.IsUrgent).Count()));
+
+
+
+
+ CreateMap();
+
+
+
+ CreateMap();
+
+
+ CreateMap();
+
+
+
+
+ }
+ }
+
+}
diff --git a/IRaCIS.Core.Domain/Allocation/TaskMedicalReview.cs b/IRaCIS.Core.Domain/Allocation/TaskMedicalReview.cs
index 4ee122c21..7c77ea807 100644
--- a/IRaCIS.Core.Domain/Allocation/TaskMedicalReview.cs
+++ b/IRaCIS.Core.Domain/Allocation/TaskMedicalReview.cs
@@ -82,6 +82,8 @@ namespace IRaCIS.Core.Domain.Models
public Guid TrialId { get; set; }
+ public Trial Trial { get; set; }
+
///
/// 冗余 废弃
///
diff --git a/IRaCIS.Core.Domain/Trial/Trial.cs b/IRaCIS.Core.Domain/Trial/Trial.cs
index dec43ae0e..ad71a19eb 100644
--- a/IRaCIS.Core.Domain/Trial/Trial.cs
+++ b/IRaCIS.Core.Domain/Trial/Trial.cs
@@ -17,6 +17,10 @@ namespace IRaCIS.Core.Domain.Models
TrialDicList = new List();
}
+ [JsonIgnore]
+ public List TaskMedicalReviewList { get; set; }
+
+
[JsonIgnore]
public List TaskConsistentRuleList { get; set; }
[JsonIgnore]
@@ -39,6 +43,8 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore]
public List SubjectList { get; set; } = new List();
[JsonIgnore]
+ public List SubjectVisitList { get; set; } = new List();
+ [JsonIgnore]
public List StudyList { get; set; } = new List();
[JsonIgnore]
public List TrialSiteList { get; set; } = new List();