/// <summary> /// Initializes a new instance of the <see cref="ReferenceTermNameViewModel"/> class. /// </summary> public ReferenceTermNameViewModel(Guid?id, string langCode, string name, ReferenceTerm referenceTerm) { Id = id; Language = langCode; Name = name; ReferenceTermId = referenceTerm.Key; }
/// <summary> /// Initializes a new instance of the <see cref="CreateReferenceTermNameModel"/> class. /// </summary> public EditReferenceTermModel(ReferenceTerm referenceTerm) : this() { this.DisplayNames = referenceTerm.DisplayNames; this.Id = referenceTerm.Key ?? Guid.Empty; this.Mnemonic = referenceTerm.Mnemonic; this.TermNamesList = referenceTerm.DisplayNames.Select(k => new ReferenceTermNameViewModel(k.Key, k.Language, k.Name, referenceTerm)).ToList(); }
/// <summary> /// Initializes a new instance of the <see cref="ReferenceTermViewModel"/> class. /// </summary> public ReferenceTermViewModel(ReferenceTerm referenceTerm) : this() { this.CreationTime = referenceTerm.CreationTime.DateTime; this.DisplayNames = referenceTerm.DisplayNames; this.Id = referenceTerm.Key.Value; this.Mnemonic = referenceTerm.Mnemonic; this.Names = string.Join(", ", referenceTerm.DisplayNames.Select(d => d.Name)); this.ReferenceTermNames = referenceTerm.DisplayNames.Select(n => new ReferenceTermNameViewModel(n)).ToList(); }
public ReferenceTerm InsertReferenceTerm(ReferenceTerm referenceTerm) { var persistenceService = ApplicationContext.Current.GetService <IDataPersistenceService <ReferenceTerm> >(); if (persistenceService == null) { throw new InvalidOperationException($"{nameof(IDataPersistenceService<ConceptSet>)} not found"); } return(persistenceService.Insert(referenceTerm, AuthenticationContext.Current.Principal, TransactionMode.Commit)); }
/// <summary> /// Converts a <see cref="ReferenceTerm"/> instance to a <see cref="FhirCoding"/> instance. /// </summary> /// <param name="referenceTerm">The reference term.</param> /// <returns>Returns a FHIR coding instance.</returns> public static FhirCoding ToCoding(ReferenceTerm referenceTerm) { if (referenceTerm == null) { return(null); } traceSource.TraceEvent(EventLevel.Verbose, "Mapping reference term"); var cs = referenceTerm.LoadProperty <CodeSystem>(nameof(ReferenceTerm.CodeSystem)); return(new FhirCoding(new Uri(cs.Url ?? String.Format("urn:oid:{0}", cs.Oid)), referenceTerm.Mnemonic)); }
public ReferenceTerm SaveReferenceTerm(ReferenceTerm term) { var persistenceService = ApplicationContext.Current.GetService <IDataPersistenceService <ReferenceTerm> >(); if (persistenceService == null) { throw new InvalidOperationException($"{nameof(IDataPersistenceService<ReferenceTerm>)} not found"); } try { term = persistenceService.Update(term, AuthenticationContext.Current.Principal, TransactionMode.Commit); } catch (KeyNotFoundException) { term = persistenceService.Insert(term, AuthenticationContext.Current.Principal, TransactionMode.Commit); } return(term); }
ReferenceTerm IConceptRepositoryService.SaveReferenceTerm(ReferenceTerm term) { throw new NotImplementedException(); }
public Concept SaveReferenceTerm(ReferenceTerm term) { throw new NotImplementedException(); }
public ReferenceTerm InsertReferenceTerm(ReferenceTerm referenceTerm) { throw new NotImplementedException(); }
public static void EnumToDataset(String[] args) { var parms = new ParameterParser <ConsoleParameters>().Parse(args); var asm = Assembly.LoadFile(parms.AssemblyFile); foreach (var en in asm.ExportedTypes.Where(o => o.IsEnum && o.GetCustomAttribute <StructureAttribute>() != null)) { StructureAttribute sta = en.GetCustomAttribute <StructureAttribute>(); DatasetInstall conceptDataset = new DatasetInstall() { Id = String.Format("HL7v3 {0} Concept Set", sta.Name) }; // Create vaccine code concept set var conceptSet = new DataUpdate() { InsertIfNotExists = true, Element = new ConceptSet() { Key = Guid.NewGuid(), Mnemonic = en.Name, Name = sta.Name, Oid = sta.CodeSystem, Url = String.Format("http://openiz.org/valuset/v3-{0}", en.Name) }, Association = new List <DataAssociation>() }; var codeSystem = new DataUpdate() { InsertIfNotExists = true, Element = new CodeSystem(sta.Name, sta.CodeSystem, en.Name) { Url = String.Format("http://hl7.org/fhir/v3-{0}", en.Name), Key = Guid.NewGuid(), } }; conceptDataset.Action.Add(codeSystem); foreach (var enm in en.GetFields()) { var ena = enm.GetCustomAttribute <EnumerationAttribute>(); if (ena == null) { continue; } var dsa = enm.GetCustomAttribute <DescriptionAttribute>(); ReferenceTerm refTerm = new ReferenceTerm() { CodeSystemKey = codeSystem.Element.Key, Mnemonic = ena.Value, DisplayNames = new List <ReferenceTermName>() { new ReferenceTermName() { Language = "en", Name = dsa?.Description ?? enm.Name } }, Key = Guid.NewGuid() }; var mnemonic = String.Format("{0}-{1}", en.Name, enm.Name); if (mnemonic.Length > 64) { mnemonic = mnemonic.Substring(0, 64); } Concept concept = new Concept() { Key = Guid.NewGuid(), Mnemonic = mnemonic, ClassKey = ConceptClassKeys.Other, ConceptNames = new List <ConceptName>() { new ConceptName() { Language = "en", Name = dsa?.Description } }, ReferenceTerms = new List <ConceptReferenceTerm>() { new ConceptReferenceTerm() { ReferenceTermKey = refTerm.Key, RelationshipTypeKey = ConceptRelationshipTypeKeys.SameAs } }, StatusConceptKey = StatusKeys.Active, CreationTime = DateTime.Now }; conceptDataset.Action.Add(new DataUpdate() { InsertIfNotExists = true, Element = refTerm }); conceptDataset.Action.Add(new DataUpdate() { InsertIfNotExists = true, Element = concept }); (conceptSet.Element as ConceptSet).ConceptsXml.Add(concept.Key.Value); } conceptDataset.Action.Add(conceptSet); XmlSerializer xsz = new XmlSerializer(typeof(DatasetInstall)); using (FileStream fs = File.Create(en.Name + ".dataset")) xsz.Serialize(fs, conceptDataset); } }
public static void CvxToDataset(String[] args) { var options = new ParameterParser <CvxOptions>().Parse(args); DatasetInstall conceptDataset = new DatasetInstall() { Id = "CDC CVX Codes" }; // Create vaccine code concept set var conceptSet = new DataUpdate() { InsertIfNotExists = true, Element = new ConceptSet() { Key = Guid.NewGuid(), Mnemonic = "VaccineTypeCodes", Name = "Vaccines", Oid = "1.3.6.1.4.1.33349.3.1.5.9.1.25", Url = "http://openiz.org/conceptset/VaccineTypeCodes" }, Association = new List <DataAssociation>() }; var codeSystem = new DataUpdate() { InsertIfNotExists = true, Element = new CodeSystem("HL7 CVX Codes", "2.16.840.1.113883.3.88.12.80.22", "CVX") { Url = "http://hl7.org/fhir/sid/cvx", Key = Guid.Parse("EBA4F94A-2CAD-4BB3-ACA7-F4E54EAAC4BD") } }; conceptDataset.Action.Add(codeSystem); using (var codeReader = File.OpenText(options.Input)) { // Now import the concepts from CVX to their OpenIZ Concepts while (!codeReader.EndOfStream) { var sourceLine = codeReader.ReadLine(); var components = sourceLine.Split('|').Select(o => o.Trim()).ToArray(); ReferenceTerm refTerm = new ReferenceTerm() { CodeSystemKey = codeSystem.Element.Key, Mnemonic = components[0], DisplayNames = new List <ReferenceTermName>() { new ReferenceTermName() { Language = "en", Name = components[1] } }, Key = Guid.NewGuid() }; var mnemonic = String.Format("VaccineType-{0}", components[1].Replace(" ", "").Replace(".", "").Replace("(", "").Replace(")", "")); if (mnemonic.Length > 64) { mnemonic = mnemonic.Substring(0, 64); } Concept concept = new Concept() { Key = Guid.NewGuid(), Mnemonic = mnemonic, ClassKey = ConceptClassKeys.Material, ConceptNames = new List <ConceptName>() { new ConceptName() { Language = "en", Name = components[2] }, new ConceptName() { Language = "en", Name = components[1] } }, ReferenceTerms = new List <ConceptReferenceTerm>() { new ConceptReferenceTerm() { ReferenceTermKey = refTerm.Key, RelationshipTypeKey = ConceptRelationshipTypeKeys.SameAs } }, StatusConceptKey = components[3] == "Inactive" ? StatusKeys.Obsolete : StatusKeys.Active, CreationTime = DateTime.Parse(components[6]) }; conceptDataset.Action.Add(new DataUpdate() { InsertIfNotExists = true, Element = refTerm }); conceptDataset.Action.Add(new DataUpdate() { InsertIfNotExists = true, Element = concept }); (conceptSet.Element as ConceptSet).ConceptsXml.Add(concept.Key.Value); } } conceptDataset.Action.Add(conceptSet); XmlSerializer xsz = new XmlSerializer(typeof(DatasetInstall)); using (FileStream fs = File.Create(options.Output)) xsz.Serialize(fs, conceptDataset); }
public static void ImportSvs(string[] args) { var parameters = new ParameterParser <SvsOptions>().Parse(args); var svsDatasetInstall = new DatasetInstall { Action = new List <DataInstallAction>() }; var fileInfo = new FileInfo(parameters.File); var serializer = new XmlSerializer(typeof(RetrieveValueSetResponseType)); var svs = (RetrieveValueSetResponseType)serializer.Deserialize(new StreamReader(parameters.File)); svsDatasetInstall.Id = svs.ValueSet.displayName; foreach (var conceptListType in svs.ValueSet.ConceptList) { var codeSystem = new CodeSystem { Key = Guid.NewGuid(), Name = svs.ValueSet.displayName, Oid = svs.ValueSet.id, VersionText = svs.ValueSet.version }; svsDatasetInstall.Action.Add(new DataUpdate { Element = codeSystem, InsertIfNotExists = true }); foreach (var cpt in conceptListType.Concept) { var referenceTerm = new ReferenceTerm { CodeSystemKey = codeSystem.Key, DisplayNames = new List <ReferenceTermName> { new ReferenceTermName(conceptListType.lang?.Length > 2 ? conceptListType.lang?.Substring(0, 2) : "en", cpt.displayName) }, Key = Guid.NewGuid(), Mnemonic = cpt.code }; svsDatasetInstall.Action.Add(new DataUpdate { Element = referenceTerm, InsertIfNotExists = true }); var concept = new Concept { ClassKey = ConceptClassKeys.Other, ConceptNames = new List <ConceptName> { new ConceptName(conceptListType.lang?.Length > 2 ? conceptListType.lang?.Substring(0, 2) : "en", cpt.displayName) }, CreationTime = DateTimeOffset.Now, Key = Guid.NewGuid(), Mnemonic = cpt.code, ReferenceTerms = new List <ConceptReferenceTerm> { new ConceptReferenceTerm(referenceTerm.Key, ConceptRelationshipTypeKeys.SameAs) }, StatusConceptKey = StatusKeys.Active }; svsDatasetInstall.Action.Add(new DataUpdate { Element = concept, InsertIfNotExists = true }); } } serializer = new XmlSerializer(typeof(DatasetInstall)); using (var fileStream = File.Create($"999-SVS-import-{fileInfo.Name}.dataset")) { serializer.Serialize(fileStream, svsDatasetInstall); } }
/// <summary> /// Initializes a new instance of the <see cref="EditReferenceTermNameModel"/> class. /// </summary> public EditReferenceTermNameModel(ReferenceTerm referenceTerm, ReferenceTermName termName) : this(termName) { ReferenceTermId = referenceTerm.Key; Mnemonic = referenceTerm.Mnemonic; ReferenceTermNameList = referenceTerm.DisplayNames.Select(n => new ReferenceTermNameViewModel(n)).ToList(); }
/// <summary> /// Initializes a new instance of the <see cref="ReferenceTermViewModel"/> class. /// </summary> public ReferenceTermViewModel(ReferenceTerm term, Concept concept) : this(term) { ConceptId = concept?.Key; ConceptVersionKey = concept?.VersionKey; }
/// <summary> /// Initializes a new instance of the <see cref="CreateReferenceTermNameModel"/> class. /// </summary> public CreateReferenceTermNameModel(ReferenceTerm referenceTerm) : this() { ReferenceTermId = referenceTerm.Key ?? Guid.Empty; Mnemonic = referenceTerm.Mnemonic; }
public static void PhinVadsToDataset(String[] args) { var options = new ParameterParser <CvxOptions>().Parse(args); DatasetInstall conceptDataset = new DatasetInstall(); using (var sr = File.OpenText(options.Input)) { // Consume the first line sr.ReadLine(); var components = sr.ReadLine().Split('\t'); // Next line is the value set information // Create code concept set var conceptSet = new ConceptSet() { Key = Guid.NewGuid(), Mnemonic = options.ConceptSetName ?? components[1], Name = options.ConceptSetDescription ?? components[0], Oid = options.ConceptSetOid ?? components[2], CreationTime = DateTime.Parse(String.IsNullOrEmpty(components[6]) ? DateTime.Now.ToString() : components[6]), Url = !String.IsNullOrEmpty(options.ConceptSetName) ? "http://openiz.org/conceptset/" + options.ConceptSetName : "http://openiz.org/conceptsets/contrib/" + components[1] }; Dictionary <String, CodeSystem> codeSystems = new Dictionary <string, CodeSystem>(); // Consume the next set of lines while (!sr.ReadLine().StartsWith("Concept Code")) { ; } while (!sr.EndOfStream) { components = sr.ReadLine().Split('\t'); // Try to get the code system CodeSystem codeSys = null; if (!codeSystems.TryGetValue(components[4], out codeSys)) { codeSys = new CodeSystem() { Key = Guid.NewGuid(), Authority = components[8], Name = components[6], Oid = components[4], Description = components[5], CreationTime = conceptSet.CreationTime }; codeSystems.Add(codeSys.Oid, codeSys); conceptDataset.Action.Add(new DataUpdate() { InsertIfNotExists = true, Element = codeSys }); } // Insert the code var refTerm = new ReferenceTerm() { Key = Guid.NewGuid(), CodeSystemKey = codeSys.Key, CreationTime = conceptSet.CreationTime, DisplayNames = new List <ReferenceTermName>() { new ReferenceTermName() { Name = components[1], Language = "en" } }, Mnemonic = components[0] }; var concept = new Concept() { Key = Guid.NewGuid(), Mnemonic = components[6] + "-" + components[1].Replace("[", "").Replace("]", "").Replace("-", "").Replace(" ", ""), CreationTime = conceptSet.CreationTime, StatusConceptKey = StatusKeys.Active, ClassKey = ConceptClassKeys.Other, ConceptNames = new List <ConceptName>() { new ConceptName() { Name = components[1], Language = "en" } }, ReferenceTerms = new List <ConceptReferenceTerm>() { new ConceptReferenceTerm() { ReferenceTermKey = refTerm.Key, RelationshipTypeKey = ConceptRelationshipTypeKeys.SameAs } } }; conceptDataset.Action.Add(new DataUpdate() { InsertIfNotExists = true, Element = refTerm }); conceptDataset.Action.Add(new DataUpdate() { InsertIfNotExists = true, Element = concept }); conceptSet.ConceptsXml.Add(concept.Key.Value); } conceptDataset.Action.Add(new DataUpdate() { InsertIfNotExists = true, Element = conceptSet }); } XmlSerializer xsz = new XmlSerializer(typeof(DatasetInstall)); using (FileStream fs = File.Create(options.Output)) xsz.Serialize(fs, conceptDataset); }
/// <summary> /// Requests the issuance of a BMS1 inventory report request /// </summary> public LogisticsInventoryReportMessageType IssueInventoryReportRequest(LogisticsInventoryReportRequestMessageType parameters) { // Status LogisticsInventoryReportMessageType retVal = new LogisticsInventoryReportMessageType() { StandardBusinessDocumentHeader = this.m_gs1Util.CreateDocumentHeader("logisticsInventoryReport", null) }; // Date / time of report DateTime?reportFrom = parameters.logisticsInventoryReportRequest.First().reportingPeriod?.beginDate ?? DateTime.MinValue, reportTo = parameters.logisticsInventoryReportRequest.First().reportingPeriod?.endDate ?? DateTime.Now; // return value LogisticsInventoryReportType report = new LogisticsInventoryReportType() { creationDateTime = DateTime.Now, documentStatusCode = DocumentStatusEnumerationType.ORIGINAL, documentActionCode = DocumentActionEnumerationType.CHANGE_BY_REFRESH, logisticsInventoryReportIdentification = new Ecom_EntityIdentificationType() { entityIdentification = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0).ToString("X") }, structureTypeCode = new StructureTypeCodeType() { Value = "LOCATION_BY_ITEM" }, documentActionCodeSpecified = true }; var locationStockStatuses = new List <LogisticsInventoryReportInventoryLocationType>(); // Next, we want to know which facilities for which we're getting the inventory report List <Place> filterPlaces = null; if (parameters.logisticsInventoryReportRequest.First().logisticsInventoryRequestLocation != null && parameters.logisticsInventoryReportRequest.First().logisticsInventoryRequestLocation.Length > 0) { foreach (var filter in parameters.logisticsInventoryReportRequest.First().logisticsInventoryRequestLocation) { int tc = 0; var id = filter.inventoryLocation.gln ?? filter.inventoryLocation.additionalPartyIdentification?.FirstOrDefault()?.Value; var place = this.m_placeRepository.Find(o => o.Identifiers.Any(i => i.Value == id), 0, 1, out tc).FirstOrDefault(); if (place == null) { throw new FileNotFoundException($"Place {filter.inventoryLocation.gln} not found"); } if (filterPlaces == null) { filterPlaces = new List <Place>() { place } } ; else { filterPlaces.Add(place); } } } else { filterPlaces = this.m_placeRepository.Find(o => o.ClassConceptKey == EntityClassKeys.ServiceDeliveryLocation).ToList(); } // Get the GLN AA data var oidService = ApplicationContext.Current.GetService <IOidRegistrarService>(); var gln = oidService.GetOid("GLN"); var gtin = oidService.GetOid("GTIN"); if (gln == null || gln.Oid == null) { throw new InvalidOperationException("GLN configuration must carry OID and be named GLN in repository"); } if (gtin == null || gtin.Oid == null) { throw new InvalidOperationException("GTIN configuration must carry OID and be named GTIN in repository"); } var masterAuthContext = AuthenticationContext.Current; // Create the inventory report filterPlaces.AsParallel().ForAll(place => { try { AuthenticationContext.Current = masterAuthContext; var locationStockStatus = new LogisticsInventoryReportInventoryLocationType(); lock (locationStockStatuses) locationStockStatuses.Add(locationStockStatus); // TODO: Store the GLN configuration domain name locationStockStatus.inventoryLocation = this.m_gs1Util.CreateLocation(place); var tradeItemStatuses = new List <TradeItemInventoryStatusType>(); // What are the relationships of held entities foreach (var rel in place.Relationships.Where(o => o.RelationshipTypeKey == EntityRelationshipTypeKeys.OwnedEntity)) { if (!(rel.TargetEntity is ManufacturedMaterial)) { var matl = this.m_materialRepository.GetManufacturedMaterial(rel.TargetEntityKey.Value, Guid.Empty); if (matl == null) { Trace.TraceWarning("It looks like {0} owns {1} but {1} is not a mmat!?!?!", place.Key, rel.TargetEntityKey); continue; } else { rel.TargetEntity = matl; } } var mmat = rel.TargetEntity as ManufacturedMaterial; if (!(mmat is ManufacturedMaterial)) { continue; } var mat = this.m_materialRepository.FindMaterial(o => o.Relationships.Where(r => r.RelationshipType.Mnemonic == "Instance").Any(r => r.TargetEntity.Key == mmat.Key)).FirstOrDefault(); decimal balanceOH = rel.Quantity ?? 0; // get the adjustments the adjustment acts are allocations and transfers var adjustments = this.m_stockService.FindAdjustments(mmat.Key.Value, place.Key.Value, reportFrom, reportTo); // We want to roll back to the start time and re-calc balance oh at time? if (reportTo.Value.Date < DateTime.Now.Date) { var prevAdjustments = this.m_stockService.FindAdjustments(mmat.Key.Value, place.Key.Value, reportTo, DateTime.Now); balanceOH -= (decimal)prevAdjustments.Sum(o => o.Participations.FirstOrDefault(p => p.ParticipationRoleKey == ActParticipationKey.Consumable)?.Quantity); } ReferenceTerm cvx = null; if (mat.TypeConceptKey.HasValue) { cvx = ApplicationContext.Current.GetService <IConceptRepositoryService>().GetConceptReferenceTerm(mat.TypeConceptKey.Value, "CVX"); } var typeItemCode = new ItemTypeCodeType() { Value = cvx?.Mnemonic ?? mmat.TypeConcept?.Mnemonic ?? mat.Key.Value.ToString(), codeListVersion = cvx?.LoadProperty <CodeSystem>("CodeSystem")?.Authority ?? "OpenIZ-MaterialType" }; // First we need the GTIN for on-hand balance tradeItemStatuses.Add(new TradeItemInventoryStatusType() { gtin = mmat.Identifiers.FirstOrDefault(o => o.Authority.DomainName == "GTIN")?.Value, itemTypeCode = typeItemCode, additionalTradeItemIdentification = mmat.Identifiers.Where(o => o.Authority.DomainName != "GTIN").Select(o => new AdditionalTradeItemIdentificationType() { additionalTradeItemIdentificationTypeCode = o.Authority.DomainName, Value = o.Value }).ToArray(), tradeItemDescription = mmat.Names.Select(o => new Description200Type() { Value = o.Component.FirstOrDefault()?.Value }).FirstOrDefault(), tradeItemClassification = new TradeItemClassificationType() { additionalTradeItemClassificationCode = mat.Identifiers.Where(o => o.Authority.Oid != gtin.Oid).Select(o => new AdditionalTradeItemClassificationCodeType() { codeListVersion = o.Authority.DomainName, Value = o.Value }).ToArray() }, inventoryDateTime = DateTime.Now, inventoryDispositionCode = new InventoryDispositionCodeType() { Value = "ON_HAND" }, transactionalItemData = new TransactionalItemDataType[] { new TransactionalItemDataType() { tradeItemQuantity = new QuantityType() { measurementUnitCode = (mmat.QuantityConcept ?? mat?.QuantityConcept)?.ReferenceTerms.Select(o => new AdditionalLogisticUnitIdentificationType() { additionalLogisticUnitIdentificationTypeCode = o.ReferenceTerm.CodeSystem.Name, Value = o.ReferenceTerm.Mnemonic }).FirstOrDefault()?.Value, Value = balanceOH }, batchNumber = mmat.LotNumber, itemExpirationDate = mmat.ExpiryDate.Value, itemExpirationDateSpecified = true } } }); foreach (var adjgrp in adjustments.GroupBy(o => o.ReasonConceptKey)) { var reasonConcept = ApplicationContext.Current.GetService <IConceptRepositoryService>().GetConceptReferenceTerm(adjgrp.Key.Value, "GS1_STOCK_STATUS")?.Mnemonic; if (reasonConcept == null) { reasonConcept = (ApplicationContext.Current.GetService <IConceptRepositoryService>().GetConcept(adjgrp.Key.Value, Guid.Empty) as Concept)?.Mnemonic; } // Broken vials? tradeItemStatuses.Add(new TradeItemInventoryStatusType() { gtin = mmat.Identifiers.FirstOrDefault(o => o.Authority.DomainName == "GTIN")?.Value, itemTypeCode = typeItemCode, additionalTradeItemIdentification = mmat.Identifiers.Where(o => o.Authority.DomainName != "GTIN").Select(o => new AdditionalTradeItemIdentificationType() { additionalTradeItemIdentificationTypeCode = o.Authority.DomainName, Value = o.Value }).ToArray(), tradeItemClassification = new TradeItemClassificationType() { additionalTradeItemClassificationCode = mat.Identifiers.Where(o => o.Authority.Oid != gtin.Oid).Select(o => new AdditionalTradeItemClassificationCodeType() { codeListVersion = o.Authority.DomainName, Value = o.Value }).ToArray() }, tradeItemDescription = mmat.Names.Select(o => new Description200Type() { Value = o.Component.FirstOrDefault()?.Value }).FirstOrDefault(), inventoryDateTime = DateTime.Now, inventoryDispositionCode = new InventoryDispositionCodeType() { Value = reasonConcept }, transactionalItemData = new TransactionalItemDataType[] { new TransactionalItemDataType() { tradeItemQuantity = new QuantityType() { measurementUnitCode = (mmat.QuantityConcept ?? mat?.QuantityConcept)?.ReferenceTerms.Select(o => new AdditionalLogisticUnitIdentificationType() { additionalLogisticUnitIdentificationTypeCode = o.ReferenceTerm.CodeSystem.Name, Value = o.ReferenceTerm.Mnemonic }).FirstOrDefault()?.Value, Value = Math.Abs(adjgrp.Sum(o => o.Participations.First(p => p.ParticipationRoleKey == ActParticipationKey.Consumable && p.PlayerEntityKey == mmat.Key).Quantity.Value)) }, batchNumber = mmat.LotNumber, itemExpirationDate = mmat.ExpiryDate.Value, itemExpirationDateSpecified = true } } }); } } // Reduce locationStockStatus.tradeItemInventoryStatus = tradeItemStatuses.ToArray(); } catch (Exception e) { traceSource.TraceError("Error fetching stock data : {0}", e); } // TODO: Reduce and Group by GTIN }); report.logisticsInventoryReportInventoryLocation = locationStockStatuses.ToArray(); retVal.logisticsInventoryReport = new LogisticsInventoryReportType[] { report }; return(retVal); }
public static void TsvToDataset(String[] args) { var options = new ParameterParser <CvxOptions>().Parse(args); DatasetInstall conceptDataset = new DatasetInstall() { Id = "TSV File" }; using (var codeReader = File.OpenText(options.Input)) { var sourceLine = codeReader.ReadLine(); var components = sourceLine.Split('\t').Select(o => o.Trim()).ToArray(); // Create vaccine code concept set var conceptSet = new DataUpdate() { InsertIfNotExists = true, Element = new ConceptSet() { Key = Guid.NewGuid(), Mnemonic = options.ConceptSetName ?? "TsvConceptSet", Name = components[5], Oid = components[6], Url = "http://openiz.org/conceptset/imported/" + (options.ConceptSetName ?? "TsvConceptSet") }, Association = new List <DataAssociation>() }; var codeSystem = new DataUpdate() { InsertIfNotExists = true, Element = new CodeSystem(components[5], components[6], (options.ConceptSetName ?? "TsvConceptSet")) { Key = Guid.NewGuid(), Url = "http://openiz.org/conceptset/imported/" + (options.ConceptSetName ?? "TsvConceptSet"), } }; conceptDataset.Action.Add(codeSystem); // Now import the concepts from CVX to their OpenIZ Concepts while (!codeReader.EndOfStream) { ReferenceTerm refTerm = new ReferenceTerm() { CodeSystemKey = codeSystem.Element.Key, Mnemonic = components[1], DisplayNames = new List <ReferenceTermName>() { new ReferenceTermName() { Language = "en", Name = components[2] } }, Key = Guid.NewGuid() }; var mnemonic = String.Format("{0}-{1}", options.ConceptSetName ?? "Tsv", components[1].Replace(" ", "").Replace(".", "").Replace("(", "").Replace(")", "")); if (mnemonic.Length > 64) { mnemonic = mnemonic.Substring(0, 64); } Concept concept = new Concept() { Key = Guid.Parse(components[0]), Mnemonic = mnemonic, ClassKey = ConceptClassKeys.Material, ConceptNames = new List <ConceptName>() { new ConceptName() { Language = "en", Name = components[2] } }, ReferenceTerms = new List <ConceptReferenceTerm>() { new ConceptReferenceTerm() { ReferenceTermKey = refTerm.Key, RelationshipTypeKey = ConceptRelationshipTypeKeys.SameAs } }, StatusConceptKey = StatusKeys.Active }; conceptDataset.Action.Add(new DataUpdate() { InsertIfNotExists = true, Element = refTerm }); conceptDataset.Action.Add(new DataUpdate() { InsertIfNotExists = true, Element = concept }); (conceptSet.Element as ConceptSet).ConceptsXml.Add(concept.Key.Value); sourceLine = codeReader.ReadLine(); components = sourceLine.Split('\t').Select(o => o.Trim()).ToArray(); } conceptDataset.Action.Add(conceptSet); } XmlSerializer xsz = new XmlSerializer(typeof(DatasetInstall)); using (FileStream fs = File.Create(options.Output)) xsz.Serialize(fs, conceptDataset); }
/// <summary> /// Create a trade item /// </summary> public TransactionalTradeItemType CreateTradeItem(Material material) { if (material == null) { throw new ArgumentNullException(nameof(material), "Missing material instance"); } ReferenceTerm cvx = null; if (material.TypeConceptKey.HasValue) { cvx = ApplicationContext.Current.GetService <IConceptRepositoryService>().GetConceptReferenceTerm(material.TypeConceptKey.Value, "CVX"); } var typeItemCode = new ItemTypeCodeType() { Value = cvx?.Mnemonic ?? material.TypeConcept?.Mnemonic ?? material.Key.Value.ToString(), codeListVersion = cvx?.LoadProperty <CodeSystem>("CodeSystem")?.Authority ?? "OpenIZ-MaterialType" }; // Manufactured material? if (material is ManufacturedMaterial) { var mmat = material as ManufacturedMaterial; var mat = this.m_materialRepository.FindMaterial(o => o.Relationships.Where(r => r.RelationshipType.Mnemonic == "Instance").Any(r => r.TargetEntity.Key == mmat.Key)).FirstOrDefault(); return(new TransactionalTradeItemType() { additionalTradeItemIdentification = material.LoadCollection <EntityIdentifier>("Identifiers").Where(o => o.Authority.DomainName != "GTIN").Select(o => new AdditionalTradeItemIdentificationType() { Value = o.Value, additionalTradeItemIdentificationTypeCode = o.LoadProperty <AssigningAuthority>("Authority").DomainName }).ToArray(), tradeItemClassification = new TradeItemClassificationType() { additionalTradeItemClassificationCode = mat.LoadCollection <EntityIdentifier>("Identifiers").Select(o => new AdditionalTradeItemClassificationCodeType() { Value = o.Value, codeListVersion = o.LoadProperty <AssigningAuthority>("Authority").DomainName }).ToArray() }, gtin = material.Identifiers.FirstOrDefault(o => o.Authority.DomainName == "GTIN").Value, itemTypeCode = typeItemCode, tradeItemDescription = material.Names.Select(o => new Description200Type() { Value = o.Component.FirstOrDefault()?.Value }).FirstOrDefault(), transactionalItemData = new TransactionalItemDataType[] { new TransactionalItemDataType() { batchNumber = mmat.LotNumber, itemExpirationDate = mmat.ExpiryDate.Value, itemExpirationDateSpecified = true } } }); } else // Material code { return(new TransactionalTradeItemType() { tradeItemClassification = new TradeItemClassificationType() { additionalTradeItemClassificationCode = material.LoadCollection <EntityIdentifier>("Identifiers").Select(o => new AdditionalTradeItemClassificationCodeType() { Value = o.Value, codeListVersion = o.LoadProperty <AssigningAuthority>("Authority").DomainName }).ToArray() }, itemTypeCode = typeItemCode, tradeItemDescription = cvx?.LoadCollection <ReferenceTermName>("DisplayNames")?.Select(o => new Description200Type() { Value = o.Name })?.FirstOrDefault() ?? material.Names.Select(o => new Description200Type() { Value = o.Component.FirstOrDefault()?.Value }).FirstOrDefault(), }); } }