예제 #1
0
 /// <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;
 }
예제 #2
0
 /// <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();
 }
예제 #3
0
 /// <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();
 }
예제 #4
0
        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));
        }
예제 #5
0
        /// <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));
        }
예제 #6
0
        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);
        }
예제 #7
0
 ReferenceTerm IConceptRepositoryService.SaveReferenceTerm(ReferenceTerm term)
 {
     throw new NotImplementedException();
 }
예제 #8
0
 public Concept SaveReferenceTerm(ReferenceTerm term)
 {
     throw new NotImplementedException();
 }
예제 #9
0
 public ReferenceTerm InsertReferenceTerm(ReferenceTerm referenceTerm)
 {
     throw new NotImplementedException();
 }
예제 #10
0
        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);
            }
        }
예제 #11
0
        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);
        }
예제 #12
0
        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();
 }
예제 #14
0
 /// <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;
 }
예제 #16
0
        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);
        }
예제 #17
0
        /// <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);
        }
예제 #18
0
        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);
        }
예제 #19
0
파일: Gs1Util.cs 프로젝트: lulzzz/openiz
        /// <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(),
                });
            }
        }