private RegistryObjectList BuildMetadata(SubmissionSet submission) { var list = new RegistryObjectList(); list.RegistryPackages.Add(submission.ToRegistryObject()); submission.Folders.ForEach(f => list.RegistryPackages.Add(f.ToRegistryObject())); submission.Documents.ForEach(d => list.ExtrinsicObjects.Add(d.ToRegistryObject())); return(list); }
public ProvideAndRegisterDocumentSetRequest(SubmissionSet submission) { SubmitObjectsRequest = new SubmitObjectsRequest { RegistryObjects = BuildMetadata(submission) }; Documents = submission.Documents.Select(d => new XdsDocument { Id = d.EntryUuid, Content = d.Content }).ToList(); }
public void RegisterDocumentSet(List <DocumentEntry> lstDocs, List <Folder> lstFolders, SubmissionSet subSet, List <DocumentEntry> lstReplacedDocumentEntry, int patientID, string docMetadata, DateTime startTime) { Database db = DatabaseFactory.CreateDatabase(CONST_CONNECTIONSTRING_NAME); Hashtable folderHash = new Hashtable(); Hashtable documentHash = new Hashtable(); //DbTransaction transaction = null; int submissionSetID; try { using (DbConnection connection = db.CreateConnection()) { connection.Open(); //transaction = connection.BeginTransaction(); //INSERT SUBMISSIONSET Related Tables #region "SubmissionSet Table Insert" DbCommand insertSubSetCommand = db.GetStoredProcCommand("usp_submissionSet_insert"); db.AddInParameter(insertSubSetCommand, "availabilityStatus", DbType.String, subSet.AvailabilityStatus); db.AddInParameter(insertSubSetCommand, "comments", DbType.String, subSet.Comments); db.AddInParameter(insertSubSetCommand, "contentTypeCodeValue", DbType.String, subSet.ContentType.Value); db.AddInParameter(insertSubSetCommand, "contentTypeCodeDisplayName", DbType.String, subSet.ContentType.CodingScheme); db.AddInParameter(insertSubSetCommand, "entryUUID", DbType.String, subSet.EntryUUID); db.AddInParameter(insertSubSetCommand, "patientID", DbType.Int32, patientID); db.AddInParameter(insertSubSetCommand, "sourceID", DbType.String, subSet.SourceID); db.AddInParameter(insertSubSetCommand, "submissionTime", DbType.DateTime, subSet.SubmissionTime); db.AddInParameter(insertSubSetCommand, "title", DbType.String, subSet.Title); db.AddInParameter(insertSubSetCommand, "uniqueID", DbType.String, subSet.UniqueID); db.AddInParameter(insertSubSetCommand, "submissionSetXml", DbType.String, subSet.SubmissionSetXml); db.AddOutParameter(insertSubSetCommand, "submissionSetID", DbType.Int32, sizeof(Int32)); db.ExecuteNonQuery(insertSubSetCommand); submissionSetID = int.Parse(db.GetParameterValue(insertSubSetCommand, "submissionSetID").ToString()); insertSubSetCommand.Parameters.Clear(); #endregion #region "SubmissionSet Author Table Insert" if (subSet.SubmissionAuthor != null) { foreach (Author subAuthor in subSet.SubmissionAuthor) { DbCommand insertSubSetAuthorCommand = db.GetStoredProcCommand("usp_submissionSet_author_insert"); db.AddInParameter(insertSubSetAuthorCommand, "submissionSetID", DbType.Int32, submissionSetID); db.AddInParameter(insertSubSetAuthorCommand, "authorInstitution", DbType.String, subAuthor.Institution); db.AddInParameter(insertSubSetAuthorCommand, "authorPerson", DbType.String, subAuthor.Person); db.AddInParameter(insertSubSetAuthorCommand, "authorRole", DbType.String, subAuthor.Role); db.AddInParameter(insertSubSetAuthorCommand, "authorSpeciality", DbType.String, subAuthor.Specialty); db.AddOutParameter(insertSubSetAuthorCommand, "authorID", DbType.Int32, sizeof(Int32)); //db.ExecuteNonQuery(insertSubSetAuthorCommand, transaction); db.ExecuteNonQuery(insertSubSetAuthorCommand); insertSubSetAuthorCommand.Parameters.Clear(); } } #endregion //INSERT FOLDER #region "Folder Table Insert" foreach (Folder fd in lstFolders) { DbCommand insertFolderCommand = db.GetStoredProcCommand("usp_folder_insert"); db.AddInParameter(insertFolderCommand, "availabilityStatus", DbType.String, fd.AvailabilityStatus); db.AddInParameter(insertFolderCommand, "comments", DbType.String, fd.Comments); db.AddInParameter(insertFolderCommand, "entryUUID", DbType.String, fd.EntryUUID); db.AddInParameter(insertFolderCommand, "lastUpdateTime", DbType.DateTime, DateTime.Now);//fd.LastUpdateTime db.AddInParameter(insertFolderCommand, "patientID", DbType.String, patientID); db.AddInParameter(insertFolderCommand, "title", DbType.String, fd.Title); db.AddInParameter(insertFolderCommand, "uniqueID", DbType.String, fd.UniqueID); db.AddInParameter(insertFolderCommand, "folderXml", DbType.String, fd.FolderXml); db.AddOutParameter(insertFolderCommand, "folderID", DbType.Int32, sizeof(Int32)); //db.ExecuteNonQuery(insertFolderCommand, transaction); db.ExecuteNonQuery(insertFolderCommand); int folderID = int.Parse(db.GetParameterValue(insertFolderCommand, "folderID").ToString()); folderHash.Add(fd.EntryUUID, folderID); insertFolderCommand.Parameters.Clear(); if (fd.CodeList != null) { foreach (CodeValue eventcode in fd.CodeList) { DbCommand insertEventCodesCommand = db.GetStoredProcCommand("usp_FolderCodeList_insert"); db.AddInParameter(insertEventCodesCommand, "folderID", DbType.Int32, folderID); db.AddInParameter(insertEventCodesCommand, "eventCodeValue", DbType.String, eventcode.Value); db.AddInParameter(insertEventCodesCommand, "eventCodeDisplayName", DbType.String, eventcode.CodingScheme); //db.ExecuteNonQuery(insertEventCodesCommand, transaction); db.ExecuteNonQuery(insertEventCodesCommand); insertEventCodesCommand.Parameters.Clear(); } } } #endregion //INSERT DOCUMENT ENTRY #region "DocumentEntry Insertions" foreach (DocumentEntry doc in lstDocs) { #region "DocumentEntry Params" DbCommand insertCommand = db.GetStoredProcCommand("usp_documentEntry_insert"); insertCommand.Parameters.Clear(); db.AddInParameter(insertCommand, "availabilityStatus", DbType.String, doc.AvailabilityStatus); db.AddInParameter(insertCommand, "classCodeValue", DbType.String, doc.ClassCode.Value); db.AddInParameter(insertCommand, "classCodeDisplayName", DbType.String, doc.ClassCode.CodingScheme); db.AddInParameter(insertCommand, "comments", DbType.String, doc.Comments); db.AddInParameter(insertCommand, "confidentialityCodeValue", DbType.String, doc.ConfidentialityCode.Value); db.AddInParameter(insertCommand, "confidentialityCodeDisplayName", DbType.String, doc.ConfidentialityCode.CodingScheme); db.AddInParameter(insertCommand, "creationTime", DbType.DateTime, doc.CreationTime); db.AddInParameter(insertCommand, "entryUUID", DbType.String, doc.EntryUUID); db.AddInParameter(insertCommand, "formatCodeValue", DbType.String, doc.FormatCode.Value); db.AddInParameter(insertCommand, "formatCodeDisplayName", DbType.String, doc.FormatCode.CodingScheme); db.AddInParameter(insertCommand, "hash", DbType.String, doc.Hash); db.AddInParameter(insertCommand, "healthcareFacilityTypeCodeValue", DbType.String, doc.HealthcareFacilityCode.Value); db.AddInParameter(insertCommand, "healthcareFacilityTypeCodeDisplayName", DbType.String, doc.HealthcareFacilityCode.CodingScheme); db.AddInParameter(insertCommand, "languageCodeValue", DbType.String, doc.LanguageCode.Value); db.AddInParameter(insertCommand, "languageCodeDisplayName", DbType.String, doc.LanguageCode.CodingScheme); db.AddInParameter(insertCommand, "legalAuthenticator", DbType.String, doc.LegalAuthenticator); db.AddInParameter(insertCommand, "mimeType", DbType.String, doc.MimeType); db.AddInParameter(insertCommand, "parentDocumentID", DbType.String, doc.ParentDocumentID); db.AddInParameter(insertCommand, "parentDocumentRelationship", DbType.String, doc.ParentDocumentRelationship); db.AddInParameter(insertCommand, "patientID", DbType.Int32, patientID); db.AddInParameter(insertCommand, "practiceSettingCodeValue", DbType.String, doc.PracticeSettingsCode.Value); db.AddInParameter(insertCommand, "practiceSettingCodeDisplayName", DbType.String, doc.PracticeSettingsCode.CodingScheme); db.AddInParameter(insertCommand, "serviceStartTime", DbType.DateTime, doc.ServiceStartTime); db.AddInParameter(insertCommand, "serviceStopTime", DbType.DateTime, doc.ServiceStopTime); db.AddInParameter(insertCommand, "size", DbType.Int32, doc.Size); db.AddInParameter(insertCommand, "sourcePatientID", DbType.String, doc.SourcePatientID); db.AddInParameter(insertCommand, "sourcePatientInfo", DbType.String, doc.SourcePatientInfo); db.AddInParameter(insertCommand, "title", DbType.String, doc.Title); db.AddInParameter(insertCommand, "typeCodeValue", DbType.String, doc.TypeCode.Value); db.AddInParameter(insertCommand, "typeCodeDisplayName", DbType.String, doc.TypeCode.CodingScheme); db.AddInParameter(insertCommand, "uniqueID", DbType.String, doc.UniqueID); db.AddInParameter(insertCommand, "URI", DbType.String, doc.URI); db.AddInParameter(insertCommand, "repositoryUniqueID", DbType.String, doc.RepositoryUniqueID); db.AddInParameter(insertCommand, "extrinsicObjectXML", DbType.String, doc.ExtrinsicObjectXML); db.AddOutParameter(insertCommand, "documentEntryID", DbType.Int32, sizeof(Int32)); #endregion // insert the document Entry object. //db.ExecuteNonQuery(insertCommand, transaction); db.ExecuteNonQuery(insertCommand); int documentID = int.Parse(db.GetParameterValue(insertCommand, "documentEntryID").ToString()); documentHash.Add(doc.EntryUUID, documentID); insertCommand.Parameters.Clear(); #region "Eventcodes and Authors" //loop for inserting eventcode values if (doc.EventCodeList != null) { foreach (CodeValue evcode in doc.EventCodeList) { DbCommand insertEventCodesCommand = db.GetStoredProcCommand("usp_documentEntryEventCodeList_insert"); db.AddInParameter(insertEventCodesCommand, "documentEntryID", DbType.Int32, documentID); db.AddInParameter(insertEventCodesCommand, "eventCodeValue", DbType.String, evcode.Value); db.AddInParameter(insertEventCodesCommand, "eventCodeDisplayName", DbType.String, evcode.CodingScheme); //db.ExecuteNonQuery(insertEventCodesCommand, transaction); db.ExecuteNonQuery(insertEventCodesCommand); insertEventCodesCommand.Parameters.Clear(); } } //loop for inserting Authors values if (doc.DocumentAuthor != null) { foreach (Author author in doc.DocumentAuthor) { DbCommand insertAuthorCommand = db.GetStoredProcCommand("usp_document_author_insert"); db.AddInParameter(insertAuthorCommand, "documentID", DbType.Int32, documentID); db.AddInParameter(insertAuthorCommand, "authorInstitution", DbType.String, author.Institution); db.AddInParameter(insertAuthorCommand, "authorPerson", DbType.String, author.Person); db.AddInParameter(insertAuthorCommand, "authorRole", DbType.String, author.Role); db.AddInParameter(insertAuthorCommand, "authorSpeciality", DbType.String, author.Specialty); db.AddOutParameter(insertAuthorCommand, "authorID", DbType.Int32, sizeof(Int32)); //db.ExecuteNonQuery(insertAuthorCommand, transaction); db.ExecuteNonQuery(insertAuthorCommand); insertAuthorCommand.Parameters.Clear(); } } #endregion } //foreach #endregion #region "Associations Entry in Table SubmissionSetDocumentFolder" //insert Associations in the Table SubmissionSetDocumentFolder if (subSet.DocumentList != null) { foreach (DocumentEntry doc in subSet.DocumentList) { //SubmissionSet -> Document DbCommand insertCommand = db.GetStoredProcCommand("usp_submissionSetDocumentFolder_insert"); db.AddInParameter(insertCommand, "documentEntryID", DbType.Int32, int.Parse(documentHash[doc.EntryUUID].ToString())); db.AddInParameter(insertCommand, "submissionSetID", DbType.Int32, submissionSetID); db.AddInParameter(insertCommand, "folderID", DbType.Int32, DBNull.Value); db.AddInParameter(insertCommand, "sourceObject", DbType.String, subSet.EntryUUID); db.AddInParameter(insertCommand, "targetObject", DbType.String, doc.EntryUUID); db.AddInParameter(insertCommand, "associationXml", DbType.String, doc.AssociationXml); db.AddInParameter(insertCommand, "documentEntryEntryUUID", DbType.String, doc.EntryUUID); db.AddInParameter(insertCommand, "documentEntryUniqueID", DbType.String, doc.UniqueID); db.AddInParameter(insertCommand, "associationType", DbType.String, doc.AssociationType); db.ExecuteNonQuery(insertCommand); insertCommand.Parameters.Clear(); } } if (subSet.FolderList != null) { foreach (Folder fd in subSet.FolderList) { //SubmissionSet -> Folder DbCommand insertCommand = db.GetStoredProcCommand("usp_submissionSetDocumentFolder_insert"); db.AddInParameter(insertCommand, "documentEntryID", DbType.Int32, DBNull.Value); db.AddInParameter(insertCommand, "submissionSetID", DbType.Int32, submissionSetID); db.AddInParameter(insertCommand, "folderID", DbType.Int32, int.Parse(folderHash[fd.EntryUUID].ToString())); db.AddInParameter(insertCommand, "sourceObject", DbType.String, subSet.EntryUUID); db.AddInParameter(insertCommand, "targetObject", DbType.String, fd.EntryUUID); db.AddInParameter(insertCommand, "associationXml", DbType.String, fd.AssociationXml); db.AddInParameter(insertCommand, "documentEntryEntryUUID", DbType.String, DBNull.Value); db.AddInParameter(insertCommand, "documentEntryUniqueID", DbType.String, DBNull.Value); db.AddInParameter(insertCommand, "associationType", DbType.String, fd.AssociationType); db.ExecuteNonQuery(insertCommand); insertCommand.Parameters.Clear(); if (fd.DocumentList != null) { foreach (DocumentEntry documentEntry in fd.DocumentList) { //Folder -> Document DbCommand insertCommand1 = db.GetStoredProcCommand("usp_submissionSetDocumentFolder_insert"); db.AddInParameter(insertCommand1, "documentEntryID", DbType.Int32, int.Parse(documentHash[documentEntry.EntryUUID].ToString())); db.AddInParameter(insertCommand1, "submissionSetID", DbType.Int32, DBNull.Value); db.AddInParameter(insertCommand1, "folderID", DbType.Int32, int.Parse(folderHash[fd.EntryUUID].ToString())); db.AddInParameter(insertCommand1, "sourceObject", DbType.String, fd.EntryUUID); db.AddInParameter(insertCommand1, "targetObject", DbType.String, documentEntry.EntryUUID); db.AddInParameter(insertCommand1, "associationXml", DbType.String, documentEntry.AssociationXml); db.AddInParameter(insertCommand1, "documentEntryEntryUUID", DbType.String, documentEntry.EntryUUID); db.AddInParameter(insertCommand1, "documentEntryUniqueID", DbType.String, documentEntry.UniqueID); db.AddInParameter(insertCommand1, "associationType", DbType.String, documentEntry.AssociationType); db.ExecuteNonQuery(insertCommand1); insertCommand1.Parameters.Clear(); } } } } #endregion if ((lstReplacedDocumentEntry != null) && (lstReplacedDocumentEntry.Count > 0)) { DbCommand cmdUpdate = null; foreach (DocumentEntry documentEntry in lstReplacedDocumentEntry) { cmdUpdate = db.GetStoredProcCommand("usp_update_AvailabilityStatus_ExtrinsicObjectXml_documentEntry"); db.AddInParameter(cmdUpdate, "entryUUID", DbType.String, documentEntry.EntryUUID); db.AddInParameter(cmdUpdate, "availabilityStatus", DbType.String, documentEntry.AvailabilityStatus); db.AddInParameter(cmdUpdate, "extrinsicObjectXML", DbType.String, documentEntry.ExtrinsicObjectXML); db.ExecuteNonQuery(cmdUpdate); } } } //using //Insert RegistryLog here RegistryLog nlog = new RegistryLog(); nlog.RequesterIdentity = System.Environment.UserName; nlog.RequestMetadata = docMetadata; nlog.Result = GlobalValues.CONST_RESPONSE_STATUS_TYPE_SUCCESS; nlog.SubmissionSetID = submissionSetID; nlog.TransactionName = "RegisterDocumentSet-b"; nlog.StartTime = startTime; nlog.FinishTime = DateTime.Now; CreateRegistryLogEntry(nlog); } catch (Exception ex) { throw ex; } }
public void Should_Build_Submission_Test01() { var submission = new SubmissionSet { Author = new Author { Person = new XdsPerson { GivenName = "First", OwnSurname = "XdsKit", Degree = "MD", Prefix = "Dr" }, Institution = new List <XdsOrganization> { new XdsOrganization { Name = "XdsKit Clinic", OrganizationId = "1234567893", UniversalId = "2.16.840.1.113883.4.6" }, new XdsOrganization { Name = "Radiology Department" } }, Role = new List <string> { "Rendering", "Attending" }, Specialty = new List <string> { "Pediatrics", "Cardiology" } }, AvailabilityStatus = StatusType.Approved, Comments = "This is a new submission", ContentType = new ContentTypeCode { Value = "application/pdf", DisplayName = "Pdf" }, EntryUuid = "Submission01", HomeCommunityId = "urn:oid:1.1.1.1.1.2", IntendedRecipients = new List <IntendedRecipient> { new IntendedRecipient { Person = new XdsPerson { GivenName = "Specialist", OwnSurname = "XdsKit", Prefix = "Dr", Degree = "MD" }, Organization = new XdsOrganization { Name = "XdsKit Hospital", OrganizationId = "1234567893", UniversalId = "2.16.840.1.113883.4.6" } }, new IntendedRecipient { Person = new XdsPerson { GivenName = "Cariologist", OwnSurname = "XdsKit", Prefix = "Dr", Degree = "MD" }, Organization = new XdsOrganization { Name = "XdsKit Cardiology Care", OrganizationId = "1234567893", UniversalId = "2.16.840.1.113883.4.6" } }, }, PatientId = new XdsIdentifier { Id = "XYZPAT01", UniversalId = "9.0.1.2.3" }, SourceId = "3.4.2.2.2", SubmissionTime = new DateTimeOffset(2015, 12, 4, 4, 21, 0, TimeSpan.Zero), Title = "SubmissionSet Title", UniqueId = "5.5.5.5.5" }; var package = submission.ToRegistryObject(); package.ToXml() .AssertByLine(XDocument.Parse(Resource.Get("Resources.Xdsb.SubmissionSet_Test01.xml"))); }
public RegistryXmlEntries GetRegistryXmlEntries(int patientID) { int resultSetCount = 0; RegistryXmlEntries registryXmlEntries = null; DocumentEntry documentEntry = null; Folder folder = null; SubmissionSet submissionSet = null; Database db = DatabaseFactory.CreateDatabase(CONST_CONNECTIONSTRING_NAME); DbCommand selectCommand = db.GetStoredProcCommand("usp_get_xmlEntries"); db.AddInParameter(selectCommand, "patientID", DbType.Int32, patientID); using (IDataReader dbReader = db.ExecuteReader(selectCommand)) { registryXmlEntries = new RegistryXmlEntries(); do { while (dbReader.Read()) { if (resultSetCount == 0) { documentEntry = new DocumentEntry(); if (!dbReader.IsDBNull(dbReader.GetOrdinal("documentEntryID"))) { documentEntry.ID = dbReader.GetInt32(dbReader.GetOrdinal("documentEntryID")); } if (!dbReader.IsDBNull(dbReader.GetOrdinal("extrinsicObjectXML"))) { documentEntry.ExtrinsicObjectXML = dbReader.GetString(dbReader.GetOrdinal("extrinsicObjectXML")); } registryXmlEntries.DocumentEntryList.Add(documentEntry); } else if (resultSetCount == 1) { folder = new Folder(); if (!dbReader.IsDBNull(dbReader.GetOrdinal("folderID"))) { folder.ID = dbReader.GetInt32(dbReader.GetOrdinal("folderID")); } if (!dbReader.IsDBNull(dbReader.GetOrdinal("folderXml"))) { folder.FolderXml = dbReader.GetString(dbReader.GetOrdinal("folderXml")); } registryXmlEntries.FolderList.Add(folder); } else if (resultSetCount == 2) { submissionSet = new SubmissionSet(); if (!dbReader.IsDBNull(dbReader.GetOrdinal("submissionSetID"))) { submissionSet.ID = dbReader.GetInt32(dbReader.GetOrdinal("submissionSetID")); } if (!dbReader.IsDBNull(dbReader.GetOrdinal("submissionSetXml"))) { submissionSet.SubmissionSetXml = dbReader.GetString(dbReader.GetOrdinal("submissionSetXml")); } registryXmlEntries.SubmissionSetList.Add(submissionSet); } } resultSetCount++; } while (dbReader.NextResult()); } return(registryXmlEntries); }
public void Should_Build_Submission_Test01() { var submission = new SubmissionSet { Author = new Author { Person = new XdsPerson { GivenName = "First", OwnSurname = "XdsKit", Degree = "MD", Prefix = "Dr" }, Institution = new List<XdsOrganization> { new XdsOrganization { Name = "XdsKit Clinic", OrganizationId = "1234567893", UniversalId = "2.16.840.1.113883.4.6" }, new XdsOrganization { Name = "Radiology Department" } }, Role = new List<string> { "Rendering", "Attending" }, Specialty = new List<string> { "Pediatrics", "Cardiology" } }, AvailabilityStatus = StatusType.Approved, Comments = "This is a new submission", ContentType = new ContentTypeCode { Value = "application/pdf", DisplayName = "Pdf" }, EntryUuid = "Submission01", HomeCommunityId = "urn:oid:1.1.1.1.1.2", IntendedRecipients = new List<IntendedRecipient> { new IntendedRecipient { Person = new XdsPerson { GivenName = "Specialist", OwnSurname = "XdsKit", Prefix = "Dr", Degree = "MD" }, Organization = new XdsOrganization { Name = "XdsKit Hospital", OrganizationId = "1234567893", UniversalId = "2.16.840.1.113883.4.6" } }, new IntendedRecipient { Person = new XdsPerson { GivenName = "Cariologist", OwnSurname = "XdsKit", Prefix = "Dr", Degree = "MD" }, Organization = new XdsOrganization { Name = "XdsKit Cardiology Care", OrganizationId = "1234567893", UniversalId = "2.16.840.1.113883.4.6" } }, }, PatientId = new XdsIdentifier { Id = "XYZPAT01", UniversalId = "9.0.1.2.3" }, SourceId = "3.4.2.2.2", SubmissionTime = new DateTimeOffset(2015, 12, 4, 4, 21, 0, TimeSpan.Zero), Title = "SubmissionSet Title", UniqueId = "5.5.5.5.5" }; var package = submission.ToRegistryObject(); package.ToXml() .AssertByLine(XDocument.Parse(Resource.Get("Resources.Xdsb.SubmissionSet_Test01.xml"))); }