public ImportCheckResponse CheckExcelImport(ImportCheckRequest request) { ImportCheckResponse response = new ImportCheckResponse(); using (MemoryStream ms = new MemoryStream(request.Data)) { SpreadsheetDocument spreadsheet = SpreadsheetDocument.Open(ms, false); WorkbookPart wbPart = spreadsheet.WorkbookPart; var sheets = wbPart.Workbook.Descendants <Sheet>(); if (sheets.Count() != 2) { response.Errors.Add("Workbook must contain two spreadsheets. The first representing 'Value Sets', the second representing 'Concepts'"); return(response); } var valuesetSheet = sheets.First(); var conceptSheet = sheets.Last(); WorksheetPart valuesetWSPart = (WorksheetPart)(wbPart.GetPartById(valuesetSheet.Id)); Worksheet valuesetWorksheet = valuesetWSPart.Worksheet; SheetData valuesetSheetData = valuesetWorksheet.GetFirstChild <SheetData>(); WorksheetPart conceptWSPart = (WorksheetPart)(wbPart.GetPartById(conceptSheet.Id)); Worksheet conceptWorksheet = conceptWSPart.Worksheet; SheetData conceptSheetData = conceptWorksheet.GetFirstChild <SheetData>(); ProcessValueSetSheet(response, valuesetSheetData, wbPart, request.FirstRowIsHeader); ProcessConceptSheet(response, conceptSheetData, wbPart, request.FirstRowIsHeader); } return(response); }
public ImportCheckResponse CheckExcelImport(ImportCheckRequest request) { ExcelImporter importer = new ExcelImporter(this.tdb); return(importer.GetCheckResponse(request)); }
public void TestImportExcel() { MockObjectRepository tdb = new MockObjectRepository(); var data = Helper.GetSampleContentBytes("Trifolia.Test.DocSamples.ExampleTerminologyImport.xlsx"); TerminologyController controller = new TerminologyController(tdb); ImportCheckRequest request = new ImportCheckRequest() { Data = data, FirstRowIsHeader = true }; var response = controller.CheckExcelImport(request); Assert.AreEqual(response.Errors.Count, 1, "Expected an error related to code system not being found"); // Code system is found, first valueset is not found, to be added var codesystem = tdb.FindOrCreateCodeSystem("Test Code System", "urn:oid:4.3.2.1"); response = controller.CheckExcelImport(request); Assert.AreEqual(response.Errors.Count, 0); Assert.AreEqual(response.ValueSets.Count, 2); Assert.IsNull(response.ValueSets[0].Id); Assert.AreEqual(response.ValueSets[0].ChangeType, ImportValueSetChange.ChangeTypes.Add); // First valueset is found, name to be updated var valueset = tdb.FindOrCreateValueSet("Value Set", "urn:oid:1.2.3.4"); response = controller.CheckExcelImport(request); Assert.AreEqual(response.Errors.Count, 0); Assert.AreEqual(response.ValueSets.Count, 2); Assert.IsNotNull(response.ValueSets[0].Id); Assert.AreEqual(response.ValueSets[0].ChangeType, ImportValueSetChange.ChangeTypes.Update); // First valueset is found, nothing to update valueset.Name = "Test Valueset 1"; response = controller.CheckExcelImport(request); Assert.AreEqual(response.Errors.Count, 0); Assert.AreEqual(response.ValueSets.Count, 2); Assert.IsNotNull(response.ValueSets[0].Id); Assert.AreEqual(response.ValueSets[0].ChangeType, ImportValueSetChange.ChangeTypes.None); // Concepts to be added Assert.AreEqual(response.ValueSets[0].Concepts.Count, 1); Assert.IsNull(response.ValueSets[0].Concepts[0].Id); Assert.AreEqual(response.ValueSets[0].Concepts[0].ChangeType, ImportValueSetChange.ChangeTypes.Add); // Found exact concept, but nothing to update var concept = tdb.FindOrCreateValueSetMember(valueset, codesystem, "asdf", "TEST", "active", "5/15/2014"); response = controller.CheckExcelImport(request); Assert.AreEqual(response.Errors.Count, 0); Assert.IsNotNull(response.ValueSets[0].Concepts[0].Id); Assert.AreEqual(response.ValueSets[0].Concepts[0].ChangeType, ImportValueSetChange.ChangeTypes.None); // Found exact concept, but update the display concept.DisplayName = "invalid display"; response = controller.CheckExcelImport(request); Assert.AreEqual(response.Errors.Count, 0); Assert.IsNotNull(response.ValueSets[0].Concepts[0].Id); Assert.AreEqual(response.ValueSets[0].Concepts[0].ChangeType, ImportValueSetChange.ChangeTypes.Update); Assert.AreEqual(response.ValueSets[0].Concepts[0].Code, "asdf"); Assert.AreEqual(response.ValueSets[0].Concepts[0].DisplayName, "TEST"); concept.Status = null; concept.StatusDate = null; response = controller.CheckExcelImport(request); Assert.AreEqual(response.Errors.Count, 0); Assert.AreEqual(response.ValueSets[0].Concepts[0].ChangeType, ImportValueSetChange.ChangeTypes.Add); Assert.AreEqual(response.ValueSets[0].Concepts[0].Code, "asdf"); Assert.AreEqual(response.ValueSets[0].Concepts[0].DisplayName, "TEST"); Assert.AreEqual(response.ValueSets[0].Concepts[0].CodeSystemOid, codesystem.Oid); Assert.AreEqual(response.ValueSets[0].Concepts[0].CodeSystemName, codesystem.Name); Assert.AreEqual(response.ValueSets[0].Concepts[0].Status, "active"); Assert.AreEqual(response.ValueSets[0].Concepts[0].StatusDate, DateTime.Parse("5/15/2014")); }