public IList <StudyStorageLocation> GetStudyStorageLocation(Study study) { Platform.CheckForNullReference(study, "Study"); IQueryStudyStorageLocation select = HttpContext.Current.GetSharedPersistentContext().GetBroker <IQueryStudyStorageLocation>(); StudyStorageLocationQueryParameters parms = new StudyStorageLocationQueryParameters { StudyStorageKey = study.StudyStorageKey }; IList <StudyStorageLocation> storage = select.Find(parms); if (storage == null) { storage = new List <StudyStorageLocation>(); Platform.Log(LogLevel.Warn, "Unable to find storage location for Study item: {0}", study.GetKey().ToString()); } if (storage.Count > 1) { Platform.Log(LogLevel.Warn, "StudyController:GetStudyStorageLocation: multiple study storage found for study {0}", study.GetKey().Key); } return(storage); }
private Patient CreateNewPatient(PatientInfo patientInfo) { Platform.Log(LogLevel.Info, "Creating new patient {0}", patientInfo.PatientId); var createPatientForStudy = UpdateContext.GetBroker <ICreatePatientForStudy>(); var parms = new CreatePatientForStudyParameters { IssuerOfPatientId = patientInfo.IssuerOfPatientId, PatientId = patientInfo.PatientId, PatientsName = patientInfo.Name, SpecificCharacterSet = _curPatient.SpecificCharacterSet, // this will be updated at the end if necessary StudyKey = _study.GetKey() }; Patient newPatient = createPatientForStudy.FindOne(parms); if (newPatient == null) { throw new ApplicationException("Unable to create patient for the study"); } return(newPatient); }
/// <summary> /// Returns an instance of <see cref="StudySummary"/> based on a <see cref="Study"/> object. /// </summary> /// <param name="study"></param> /// <param name="read"></param> /// <returns></returns> /// <remark> /// /// </remark> static public StudySummary CreateStudySummary(IPersistenceContext read, Study study) { if (study == null) { return(null); } var studySummary = new StudySummary(); var controller = new StudyController(); studySummary.TheStudy = study; studySummary.Key = study.GetKey(); studySummary.AccessionNumber = study.AccessionNumber; studySummary.NumberOfStudyRelatedInstances = study.NumberOfStudyRelatedInstances; studySummary.NumberOfStudyRelatedSeries = study.NumberOfStudyRelatedSeries; studySummary.PatientId = study.PatientId; studySummary.PatientsName = study.PatientsName; studySummary.StudyDate = study.StudyDate; studySummary.StudyInstanceUid = study.StudyInstanceUid; studySummary.StudyDescription = study.StudyDescription; studySummary.ModalitiesInStudy = controller.GetModalitiesInStudy(read, study); studySummary.ReferringPhysiciansName = study.ReferringPhysiciansName; studySummary.ResponsibleOrganization = study.ResponsibleOrganization; studySummary.ResponsiblePerson = study.ResponsiblePerson; studySummary.StudyTime = study.StudyTime; studySummary.StudyId = study.StudyId; studySummary.HasOrder = study.OrderKey != null; if (study.OrderKey != null) { var order = Order.Load(study.OrderKey); studySummary.OrderRequiresQC = order.QCExpected; studySummary.StudyIsQCed = (study.QCStatusEnum != null && study.QCStatusEnum != QCStatusEnum.NA); } studySummary.ThePartition = ServerPartitionMonitor.Instance.FindPartition(study.ServerPartitionKey) ?? ServerPartition.Load(read, study.ServerPartitionKey); studySummary.ReferringPhysiciansName = study.ReferringPhysiciansName; studySummary.TheStudyStorage = StudyStorage.Load(read, study.StudyStorageKey); studySummary.StudyStatusEnum = studySummary.TheStudyStorage.StudyStatusEnum; studySummary.QueueStudyStateEnum = studySummary.TheStudyStorage.QueueStudyStateEnum; studySummary.TheArchiveLocation = controller.GetFirstArchiveStudyStorage(read, studySummary.TheStudyStorage.Key); studySummary.IsArchiving = controller.GetArchiveQueueCount(study) > 0; studySummary.IsProcessing = studySummary.TheStudyStorage.WriteLock; // the study is considered "locked" if it's being processed or some action which requires the lock has been scheduled // No additional action should be allowed on the study until everything is completed. studySummary.IsLocked = studySummary.IsProcessing || (studySummary.TheStudyStorage.QueueStudyStateEnum != QueueStudyStateEnum.Idle); if (controller.GetStudyIntegrityQueueCount(studySummary.TheStudyStorage.Key) > 0) { studySummary.IsReconcileRequired = true; } studySummary.HasPendingExternalEdit = controller.GetCountPendingExternalEditWorkQueueItems(study) > 0; if (studySummary.HasPendingExternalEdit) { studySummary.HasPendingWorkQueueItems = true; } else { studySummary.HasPendingWorkQueueItems = controller.GetCountPendingWorkQueueItems(study) > 0; } var ep = new StudySummaryAssemblerExtensionPoint(); foreach (IStudySummaryAssembler assemblerPlugin in ep.CreateExtensions()) { assemblerPlugin.PopulateStudy(studySummary, study); } return(studySummary); }