Ejemplo n.º 1
0
        /// <summary>
        /// Adds a translation to the resource manager.
        /// </summary>
        public void Add(string key, string locale, string text)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }
            if (locale == null)
            {
                throw new ArgumentNullException("locale");
            }
            if (text == null)
            {
                throw new ArgumentNullException("text");
            }

            CultureInfo culture = CultureInfo.GetCultureInfo(locale);

            if (culture.IsNeutralCulture)
            {
                throw new ArgumentException("Cannot specify neutral locales for translation tables.", "locale");
            }

            lock (m_lock)
            {
                TranslationTable table = GetTable(culture.Name);
                table.Translations[key] = text;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Adds the translations to the resource manager.
        /// </summary>
        public void Add(string locale, IDictionary <string, string> translations)
        {
            if (locale == null)
            {
                throw new ArgumentNullException("locale");
            }
            if (translations == null)
            {
                throw new ArgumentNullException("translations");
            }

            CultureInfo culture = CultureInfo.GetCultureInfo(locale);

            if (culture.IsNeutralCulture)
            {
                throw new ArgumentException("Cannot specify neutral locales for translation tables.", "locale");
            }

            lock (m_lock)
            {
                TranslationTable table = GetTable(culture.Name);

                foreach (KeyValuePair <string, string> translation in translations)
                {
                    table.Translations[translation.Key] = translation.Value;
                }
            }
        }
        void GetDiagnosis(string patientId)
        {
            if (patientId == null)
            {
                throw new ArgumentNullException($"GetDiagnosis");
            }

            string val = string.Empty;
            string tag;

            try
            {
                var recordSet = Db.ExecuteQuery($"SELECT * FROM vPatientDiagnosis  WHERE Patient_ID = '{patientId}';");
                if (ValidTable(recordSet))
                {
                    foreach (DataRow diagnosisRecord in recordSet.Tables[0].Rows)
                    {
                        // Print the DataType of each column in the table.
                        foreach (DataColumn dxColumn in diagnosisRecord.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(dxColumn.ColumnName, out var tmp))
                            {
                                tag = tmp;
                                val = diagnosisRecord[dxColumn.ColumnName].ToString();

                                switch (dxColumn.ColumnName)
                                {
                                case "condition_description":
                                    val += $"Condition: {val}\n";
                                    break;

                                case "Severity":
                                    val += $"Severity: {val}";
                                    break;

                                case "Onset_Date":
                                    val += $"Onset Date: {val}\n";
                                    break;

                                case "Cessation_Date":
                                    val += $"Cessation Date: {val}\n";
                                    break;

                                default:
                                    break;
                                }
                            }
                        }
                    }

                    _patient.SetField("DXNotes", val, true);
                }
            }
            catch (Exception ex)
            {
                EventLogger.Error($"Failed reading patient diagnosis: {ex.Message}");
                throw;
            }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// After Delete
 /// </summary>
 /// <param name="success">success</param>
 /// <returns>deleted</returns>
 protected override bool AfterDelete(bool success)
 {
     if (TranslationTable.IsActiveLanguages(false))
     {
         TranslationTable.Delete(this);
     }
     return(success);
 }
 public ulong TranslateHash(ulong hash)
 {
     if (TranslationTable.ContainsKey(hash))
     {
         hash = TranslationTable[hash];
     }
     return(hash);
 }
Ejemplo n.º 6
0
        private void GetNotes(string rxID)
        {
            try
            {
                var notes = string.Empty;

                // Now get all the notes for the record
                var recordSet = Db.ExecuteQuery($"SELECT * FROM vRxNote WHERE Rx_ID = '{rxID}';");
                if (ValidTable(recordSet))
                {
                    foreach (DataRow record in recordSet.Tables[0].Rows)
                    {
                        // Print the DataType of each column in the table.
                        foreach (DataColumn column in record.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(column.ColumnName, out var tmp))
                            {
                                var tag = tmp;
                                var val = record[column.ColumnName].ToString();

                                switch (column.ColumnName)
                                {
                                case "Note_ID":
                                    notes += $"Condition: {val}\n";
                                    break;

                                case "Note_Type_Code":
                                    notes += $"Note Type: {val}\n";
                                    break;

                                case "Create_User":
                                    notes += $"Written By:  {val}\n";
                                    break;

                                case "Create_Date":
                                    notes += $"Date:  {val}\n";
                                    break;

                                case "Note_Text":
                                    notes += $"Text:  {val}\n";
                                    break;

                                default:
                                    break;
                                }
                            }
                        }
                    }
                }

                _scrip.SetField("Comments", notes, true);
            }
            catch (Exception ex)
            {
                EventLogger.Error($"Failed to get Rx notes: {ex.Message}");
                throw;
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Finds the best translation for the requested locales.
        /// </summary>
        private string FindBestTranslation(IList <string> preferredLocales, string key, out CultureInfo culture)
        {
            culture = null;
            TranslationTable match = null;

            for (int jj = 0; jj < preferredLocales.Count; jj++)
            {
                // parse the locale.
                string language = preferredLocales[jj];

                int index = language.IndexOf('-');

                if (index != -1)
                {
                    language = language.Substring(0, index);
                }

                // search for translation.
                string translatedText = null;

                for (int ii = 0; ii < m_translationTables.Count; ii++)
                {
                    TranslationTable translationTable = m_translationTables[ii];

                    // all done if exact match found.
                    if (translationTable.Locale.Name == preferredLocales[jj])
                    {
                        if (translationTable.Translations.TryGetValue(key, out translatedText))
                        {
                            culture = translationTable.Locale;
                            return(translatedText);
                        }
                    }

                    // check for matching language but different region.
                    if (match == null && translationTable.Locale.TwoLetterISOLanguageName == language)
                    {
                        if (translationTable.Translations.TryGetValue(key, out translatedText))
                        {
                            culture = translationTable.Locale;
                            match   = translationTable;
                        }

                        continue;
                    }
                }

                // take a partial match if one found.
                if (match != null)
                {
                    return(translatedText);
                }
            }

            // no translations available.
            return(null);
        }
Ejemplo n.º 8
0
 /// <summary>
 /// After Save
 /// </summary>
 /// <param name="newRecord">new</param>
 /// <param name="success">success</param>
 /// <returns>saved</returns>
 protected override bool AfterSave(bool newRecord, bool success)
 {
     if (!success)
     {
         return(success);
     }
     TranslationTable.Save(this, newRecord);
     return(true);
 }
        public ulong TranslateHash(ulong hash)
        {
            int times = 0;

            while (TranslationTable.ContainsKey(hash))
            {
                hash = TranslationTable[hash];
                times++;
                if (times > 10)
                {
                    return(hash);
                }
            }
            return(hash);
        }
Ejemplo n.º 10
0
        /// <summary>
        ///     Object hash code
        /// </summary>
        /// <returns></returns>
        public override int GetHashCode()
        {
            unchecked
            {
                var hashCode = Name != null?Name.GetHashCode() : 0;

                hashCode = (hashCode * 397) ^ IsDecoy.GetHashCode();
                hashCode = (hashCode * 397) ^ Start;
                hashCode = (hashCode * 397) ^ End;
                hashCode = (hashCode * 397) ^ Pre.GetHashCode();
                hashCode = (hashCode * 397) ^ Post.GetHashCode();
                hashCode = (hashCode * 397) ^ Frame;
                hashCode = (hashCode * 397) ^ (TranslationTable != null ? TranslationTable.GetHashCode() : 0);
                hashCode = (hashCode * 397) ^ (Peptide != null ? Peptide.GetHashCode() : 0);
                hashCode = (hashCode * 397) ^ (DBSequence != null ? DBSequence.GetHashCode() : 0);
                hashCode = (hashCode * 397) ^ (CVParams != null ? CVParams.GetHashCode() : 0);
                hashCode = (hashCode * 397) ^ (UserParams != null ? UserParams.GetHashCode() : 0);
                return(hashCode);
            }
        }
        public async Task <IActionResult> SetPath([FromBody] SetPath.Request req)
        {
            var rec = await Common2DB.GenericDatas.FindAsync(GenericData.Type.TranslationTablePath);

            if (rec == null)
            {
                rec = new GenericData();
                rec.TranslationTableRecord(req.path);
                await Common2DB.GenericDatas.AddAsync(rec);
            }
            else
            {
                rec.TranslationTableRecord(req.path);
            }
            await Common2DB.SaveChangesAsync();

            await TranslationTable.LoadAsync(Common2DB);


            return(Ok(req.path));
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Finds the translation table for the locale. Creates a new table if it does not exist.
        /// </summary>
        private TranslationTable GetTable(string locale)
        {
            lock (m_lock) {
                // search for table.
                for (int ii = 0; ii < m_translationTables.Count; ii++)
                {
                    TranslationTable translationTable = m_translationTables[ii];

                    if (translationTable.Locale.Name == locale)
                    {
                        return(translationTable);
                    }
                }

                // add table.
                TranslationTable table = new TranslationTable();
                table.Locale = CultureInfo.GetCultureInfo(locale);
                m_translationTables.Add(table);

                return(table);
            }
        }
Ejemplo n.º 13
0
        public void ReadPrescriptionRecords()
        {
            try
            {
                _scrip.Clear();

                var rxID = string.Empty;
                int refills = 0, refillsUsed = 0;

                // Load the translaton table -- Database Column Name to Gateway Tag Name
                TranslationTable.Add("Rx_ID", "RxSys_RxNum");
                TranslationTable.Add("Patient_ID", "RxSys_PatID");
                TranslationTable.Add("Prescriber_ID", "RxSys_DocID");
                TranslationTable.Add("Dispensed_Item_ID", "RxSys_DrugID");

                TranslationTable.Add("NDC_Code", "DrugID");
                TranslationTable.Add("Instruction_Signa_Text", "Sig");
                TranslationTable.Add("Dispense_Date", "RxStartDate");
                TranslationTable.Add("Last_Dispense_Stop_Date", "RxStopDate");

                TranslationTable.Add("Script_Status", "Status");
                TranslationTable.Add("Discontinue_Date", "DiscontinueDate");

                TranslationTable.Add("Comments", "Comments");
                TranslationTable.Add("Total_Refills_Authorized", "Refills");

                TranslationTable.Add("Dosage_Signa_Code", "DoseScheduleName");
                TranslationTable.Add("QtyPerDose", "QtyPerDose");
                TranslationTable.Add("Quantity_Dispensed", "QtyDispensed");


                var recordSet = Db.ExecuteQuery($"SELECT * FROM dbo.vRx WHERE MSSQLTS > {LastTouch}; ");

                if (ValidTable(recordSet))
                {
                    foreach (DataRow record in recordSet.Tables[0].Rows)
                    {
                        LastTouch = ByteArrayToHexString((System.Byte[])record["MSSQLTS"]);

                        // Print the DataType of each column in the table.
                        foreach (DataColumn column in record.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(column.ColumnName, out var tmp))
                            {
                                var tag = tmp;
                                var val = record[column.ColumnName].ToString();

                                switch (column.ColumnName)
                                {
                                case "Rx_ID":
                                    rxID = val;
                                    GetNotes(rxID);
                                    break;

                                case "Total_Refills_Authorized":
                                    refills        = Convert.ToInt32(val ?? "0");
                                    _scrip.Refills = refills;
                                    continue;

                                case "Total_Refills_Used":
                                    refillsUsed = Convert.ToInt32(val ?? "0");

                                    if (refills >= refillsUsed)
                                    {
                                        refills       -= refillsUsed;
                                        _scrip.Refills = refills;
                                    }
                                    break;

                                case "Dispense_Date":
                                case "Discontinue_Date":
                                    if (!string.IsNullOrEmpty(val))
                                    {
                                        val = DateTime.Parse(val).ToString("yyyy-MM-dd");
                                    }

                                    break;

                                default:
                                    break;
                                }

                                // Update the local drug record
                                if (!string.IsNullOrEmpty(val) && !string.IsNullOrEmpty(tag))
                                {
                                    _scrip.SetField(tag, val, true);
                                }
                                else
                                {
                                    EventLogger.Warn($"Empty value trapped: tag = {tag} val = {val}");
                                }
                            }
                        }

                        try
                        {
                            Mutex.WaitOne();

                            using (var gw = new TcpClient(GatewayIp, GatewayPort))
                            {
                                using (var stream = gw.GetStream())
                                {
                                    _scrip.Write(stream);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            EventLogger.Error($"Failed reading patient record: {ex.Message}");
                            throw;
                        }
                        finally
                        {
                            Mutex.ReleaseMutex();
                        }
                    }
                }
            }
            catch (RowNotInTableException)
            {
                return;  // No records
            }
            catch (Exception ex)
            {
                throw;
            }
        }
Ejemplo n.º 14
0
        public void ReadPatientRecords()
        {
            _patient.Clear();

            try
            {
                // Load the translaton table -- Database Column Name to Gateway Tag Name
                TranslationTable.Add("Patient_ID", "RxSys_PatID");
                TranslationTable.Add("Patient_Location_Code", "RxSys_LocID");
                TranslationTable.Add("Primary_Prescriber_ID", "RxSys_PrimaryDoc");
                TranslationTable.Add("Last_Name", "LastName");
                TranslationTable.Add("First_Name", "FirstName");
                TranslationTable.Add("Middle_Initial", "MiddleInitial");
                TranslationTable.Add("Address_Line_1", "Address1");
                TranslationTable.Add("Address_Line_2", "Address2");
                TranslationTable.Add("City", "City");
                TranslationTable.Add("State_Code", "State");
                TranslationTable.Add("Zip_Code", "Zip");
                TranslationTable.Add("Zip_Plus_4", "Zip");
                TranslationTable.Add("Telephone_Number", "Phone1");
                TranslationTable.Add("Area_Code", "Phone1");
                TranslationTable.Add("Extension", "Comments");
                TranslationTable.Add("SSN", "SSN");
                TranslationTable.Add("BirthDate", "DOB");          // SqlDateTime
                TranslationTable.Add("Deceased_Date", "Comments"); // SqlDateTime
                TranslationTable.Add("Sex", "Gender");

                // Search for the patient
                // Load Patient Record
                // Search for vPatientAlergyc by Patient_ID - returns {0...1} records
                //      Update Patient Record
                // Search for vPatientDiagnosis by Patient_ID - returns {0...1} records
                //      Update Patient Record
                // Search for vPatientNote by Patient_ID - returns {0...1} records
                //      Update Patient Record
                // Write Patient Record

                var tmpPhone  = string.Empty;
                var tmpZip    = string.Empty;
                var patientId = string.Empty;

                var recordSet = Db.ExecuteQuery($"SELECT * FROM vPatient WHERE MSSQLTS > {LastTouch};");
                if (ValidTable(recordSet))
                {
                    foreach (DataRow record in recordSet.Tables[0].Rows)
                    {
                        LastTouch = ByteArrayToHexString((System.Byte[])record["MSSQLTS"]);

                        // Print the DataType of each column in the table.
                        foreach (DataColumn column in record.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(column.ColumnName, out var tmp))
                            {
                                var tag = tmp;
                                var val = record[column.ColumnName].ToString();

                                switch (column.ColumnName)
                                {
                                case "Patient_ID":
                                    patientId = val;
                                    break;

                                // Merge Zip Code
                                case "Zip_Code":
                                    tmpZip = val;
                                    continue;

                                case "Zip_Plus_4":
                                    tmpZip += val;
                                    val     = tmpZip;
                                    break;

                                // Merge Phone Number
                                case "Area_Code":
                                    tmpPhone = val;
                                    continue;

                                case "Telephone_Number":
                                    tmpPhone += val;
                                    val       = tmpPhone;
                                    break;

                                case "BirthDate":
                                    val = NormalizeDate(val);
                                    break;

                                default:
                                    break;
                                }

                                _patient.SetField(tag, val, true);
                            }
                        }

                        // Now get the note fields
                        GetAllergies(patientId);
                        GetDiagnosis(patientId);
                        GetNotes(patientId);

                        // Finally,  write the recort to the Gateway
                        try
                        {
                            Mutex.WaitOne();

                            using (var gw = new TcpClient(GatewayIp, GatewayPort))
                            {
                                using (var stream = gw.GetStream())
                                {
                                    _patient.Write(stream);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            EventLogger.Error($"Failed processing patient record: {ex.Message}");
                            throw;
                        }
                        finally
                        {
                            Mutex.ReleaseMutex();
                        }

                        _patient.Clear();
                    }
                }
            }
            catch (RowNotInTableException)
            {
                return;  // No records
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public void ReadDrugRecords()
        {
            try
            {
                _drug.Clear();

                var itemType  = string.Empty;
                var itemColor = string.Empty;
                var itemShape = string.Empty;

                TranslationTable.Add("ITEM_ID", "RxSys_DrugID");
                TranslationTable.Add("ITEM_NAME", "DrugName");
                TranslationTable.Add("Manufacturer_Abbreviation", "ShortName");
                TranslationTable.Add("STRENGTH", "Strength");
                TranslationTable.Add("UNIT_OF_MEASURE", "Unit");
                TranslationTable.Add("NARCOTIC_CODE", "DrugSchedule");
                TranslationTable.Add("VisualDescription", "VisualDescription");
                TranslationTable.Add("NDC_CODE", "NDCNum");
                TranslationTable.Add("ROUTE_OF_ADMINISTRATION", "Route");

                var recordSet = Db.ExecuteQuery("SELECT * FROM vItem;");

                if (ValidTable(recordSet))
                {
                    foreach (DataRow record in recordSet.Tables[0].Rows)
                    {
                        // Print the DataType of each column in the table.
                        foreach (DataColumn column in record.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(column.ColumnName, out var tmp))
                            {
                                var tag = tmp;
                                var val = record[column.ColumnName].ToString();

                                switch (column.ColumnName)
                                {
                                case "ITEM_TYPE":
                                    itemType = val;
                                    break;

                                case "COLOR_CODE":
                                    itemColor = val;
                                    break;

                                case "SHAPE_CODE":
                                    itemShape = val;
                                    break;

                                default:
                                    break;
                                }

                                _drug.SetField(tag, val, true);
                            }
                        }

                        _drug.VisualDescription = string.Format("{0}/{1}/{2}", itemShape, itemColor, itemType);

                        try
                        {
                            Mutex.WaitOne();

                            using (var gw = new TcpClient(GatewayIp, GatewayPort))
                            {
                                using (var stream = gw.GetStream())
                                {
                                    _drug.Write(stream);
                                }
                            }

                            Mutex.ReleaseMutex();
                        }
                        catch (Exception ex)
                        {
                            EventLogger.Error($"Failed reading patient record: {ex.Message}");
                            throw;
                        }
                        finally
                        {
                            Mutex.ReleaseMutex();
                        }

                        _drug.Clear();
                    }
                }
            }
            catch (System.InvalidOperationException ex)
            {
                throw new Exception($"Message from PGS: {ex.Message}\n{ex.StackTrace}");
            }
            catch (Exception ex)
            {
                throw new Exception($"Failed to get Drug Record {ex.Message}");
            }
        }
        void GetAllergies(string patientId)
        {
            if (patientId == null)
            {
                throw new ArgumentNullException($"GetAllergies");
            }

            string val = string.Empty;
            string tag;

            try
            {
                var recordSet = Db.ExecuteQuery($"SELECT * FROM vPatientAllergy WHERE Patient_ID = '{patientId}';");
                if (ValidTable(recordSet))
                {
                    foreach (DataRow allergyRecord in recordSet.Tables[0].Rows)
                    {
                        foreach (DataColumn allergyColumn in allergyRecord.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(allergyColumn.ColumnName, out var tmp))
                            {
                                tag = tmp;
                                val = allergyRecord[allergyColumn.ColumnName].ToString();

                                switch (allergyColumn.ColumnName)
                                {
                                case "Patient_Allergy_ID":
                                    val += $"Allergy ID: {val}\n";
                                    break;

                                case "Allergy_Class_Code":
                                    val += $"Allergy Class: {val}\n";
                                    break;

                                case "Description":
                                    val += $"Description: {val}\n";
                                    break;

                                case "Allergy_Free_Text":
                                    val += $"Notes: {val}\n";
                                    break;

                                case "Item_ID":
                                    val += $"Item ID: {val}\n";
                                    break;

                                case "Onset_Date":
                                    val += $"Onset Date: {val}\n";
                                    break;

                                default:
                                    break;
                                }
                            }
                        }
                    }

                    _patient.SetField("Allergies", val, true);
                }
            }
            catch (Exception ex)
            {
                EventLogger.Error($"Failed reading patient allergies: {ex.Message}");
                throw;
            }
        }
Ejemplo n.º 17
0
        public void ReadPrescriptionRecords()
        {
            try
            {
                _scrip.Clear();

                var rxID = string.Empty;
                int refills = 0, refillsUsed = 0;


                // Load the translaton table -- Database Column Name to Gateway Tag Name
                TranslationTable.Add("Rx_ID", "RxSys_RxNum");
                TranslationTable.Add("Patient_ID", "RxSys_PatID");
                TranslationTable.Add("Prescriber_ID", "RxSys_DocID");
                TranslationTable.Add("Dispensed_Item_ID", "RxSys_DrugID");

                TranslationTable.Add("NDC_Code", "NDCNum");
                TranslationTable.Add("Instruction_Signa_Text", "Sig");
                TranslationTable.Add("Dispense_Date", "RxStartDate");
                TranslationTable.Add("Last_Dispense_Stop_Date", "RxStopDate");

                TranslationTable.Add("Script_Status", "Status");
                TranslationTable.Add("Discontinue_Date", "DiscontinueDate");

                TranslationTable.Add("Comments", "Comments");
                TranslationTable.Add("Total_Refills_Authorized", "Refills");

                TranslationTable.Add("Dosage_Signa_Code", "DoseScheduleName");
                TranslationTable.Add("QtyPerDose", "QtyPerDose");
                TranslationTable.Add("Quantity_Dispensed", "QtyDispensed");

                var recordSet = Db.ExecuteQuery($"SELECT * FROM Rx WHERE MSSQLTS > '{LastTouch.ToString()}'; ");
                if (ValidTable(recordSet))
                {
                    foreach (DataRow record in recordSet.Tables[0].Rows)
                    {
                        if ((long)record["MSSQLTS"] > LastTouch)
                        {
                            LastTouch = (long)record["MSSQLTS"];
                        }

                        // Print the DataType of each column in the table.
                        foreach (DataColumn column in record.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(column.ColumnName, out var tmp))
                            {
                                var tag = tmp;
                                var val = record[column.ColumnName].ToString();

                                switch (column.ColumnName)
                                {
                                case "Rx_ID":
                                    rxID = val;
                                    GetNotes(rxID);
                                    break;

                                case "Total_Refills_Authorized":
                                    refills = Convert.ToInt32(val);
                                    continue;

                                case "Total_Refills_Used":
                                    refillsUsed = Convert.ToInt32(val);

                                    if (refills >= refillsUsed)
                                    {
                                        refills -= refillsUsed;
                                        _scrip.SetField("Refills", refills.ToString(), true);
                                    }

                                    continue;

                                default:
                                    break;
                                }

                                // Update the local drug record
                                _scrip.SetField(tag, val, true);
                            }
                        }

                        try
                        {
                            Mutex.WaitOne();

                            using (var gw = new TcpClient(GatewayIp, GatewayPort))
                            {
                                using (var stream = gw.GetStream())
                                {
                                    _scrip.Write(stream);
                                }
                            }

                            Mutex.ReleaseMutex();
                        }
                        catch (Exception ex)
                        {
                            EventLogger.Error($"Failed reading patient record: {ex.Message}");
                            throw;
                        }
                        finally
                        {
                            Mutex.ReleaseMutex();
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception("Failed to get Scrip Record " + e.Message);
            }
        }
Ejemplo n.º 18
0
        public void ReadPrescriberRecords()
        {
            try
            {
                _prescriber.Clear();

                var tmpPhone = string.Empty;
                var tmpZip   = string.Empty;
                var tmpDea   = string.Empty;

                int counter = 0;

                /*
                 *  The field names in the database are generally not going to match the field names MOT uses, so we implment a pairwise
                 *  list to do the conversion on the fly. This will work for all items except where the contents of the field are incomplete,
                 *  require transformation, or are otherwise incorrect, we generate and exception list and handle them one at a time.
                 */
                TranslationTable.Add("Prescriber_ID", "RxSys_DocID");
                TranslationTable.Add("Last_Name", "LastName");
                TranslationTable.Add("First_Name", "FirstName");
                TranslationTable.Add("Middle_Initial", "MiddleInitial");
                TranslationTable.Add("Address_Line_1", "Address1");
                TranslationTable.Add("Address_Line_2", "Address2");
                TranslationTable.Add("City", "City");
                TranslationTable.Add("State_Code", "State");
                TranslationTable.Add("Zip_Code", "Zip");           // Stored as Integer
                TranslationTable.Add("Zip_Plus_4", "Zip");         // Stored as Integer
                TranslationTable.Add("Area_Code", "AreaCode");     // Stored as Integer
                TranslationTable.Add("Telephone_Number", "Phone"); // Stored as Integer
                TranslationTable.Add("DEA_Number", "DEA_ID");
                //TranslationTable.Add("DEA_Suffix", "DEA_SUFIX");
                TranslationTable.Add("Prescriber_Type ", "Specialty");
                TranslationTable.Add("Active_Flag", "Comments");      // 'Y' || 'N'

                Lookup.Add("DDS", "Dentist");
                Lookup.Add("DO", "Osteopath");
                Lookup.Add("DPM", "Podiatrist");
                Lookup.Add("DVM", "Veterinarian");
                Lookup.Add("IN", "Intern");
                Lookup.Add("MD", "Medical Doctor");
                Lookup.Add("NP", "Nurse Practitioner");
                Lookup.Add("OPT", "Optometrist");
                Lookup.Add("PA", "Physician Assistant");
                Lookup.Add("RN", "Registered Nurse");
                Lookup.Add("RPH", "Registered Pharmacist");

                /*
                 *  Query the database and collect a set of records where a valid set is {1..n} items.  This is not a traditional
                 *  record set as returned by access or SQL server, but a generic collection of IDataRecords and is usable accross
                 *  all database types.  If the set of records is {0} an exception will be thrown
                 */

                var tag = string.Empty;
                var val = string.Empty;
                var tmp = string.Empty;

                DataSet recordSet = Db.ExecuteQuery($"SELECT * FROM dbo.vPrescriber WHERE MSSQLTS > {LastTouch};");

                if (ValidTable(recordSet))
                {
                    foreach (DataRow record in recordSet.Tables[0].Rows)
                    {
                        LastTouch = ByteArrayToHexString((System.Byte[])record["MSSQLTS"]);

                        foreach (DataColumn column in record.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(column.ColumnName, out tmp))
                            {
                                tag = tmp;
                                val = record[column.ColumnName].ToString();

                                switch (column.ColumnName)
                                {
                                // Merge Zip Code, it's an int in the DB, so prepend a 0 to make it real
                                case "Zip_Code":
                                    tmpZip = "0" + val;
                                    continue;

                                case "Zip_Plus_4":
                                    tmpZip += val;
                                    val     = tmpZip;
                                    break;

                                // Merge Phone Number
                                case "Area_Code":
                                    tmpPhone = val;
                                    continue;

                                case "Telephone_Number":
                                    tmpPhone += val;
                                    val       = tmpPhone;
                                    break;

                                default:
                                    break;
                                }

                                _prescriber.SetField(tag, val, true);
                            }
                        }

                        try
                        {
                            // Write the record to the gateway
                            Mutex.WaitOne();

                            using (var gw = new TcpClient(GatewayIp, GatewayPort))
                            {
                                using (var stream = gw.GetStream())
                                {
                                    _prescriber.Write(stream);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            EventLogger.Error($"Error processing prescriptin record: {ex.Message}");
                            throw;
                        }
                        finally
                        {
                            Mutex.ReleaseMutex();
                        }

                        _prescriber.Clear();
                    }
                }

                return;
            }
            catch (RowNotInTableException)
            {
                return;  // No records
            }

            catch (Exception ex)
            {
                throw;
            }
        }
Ejemplo n.º 19
0
        public void ReadDrugRecords()
        {
            try
            {
                _drug.Clear();

                var itemType  = string.Empty;
                var itemColor = string.Empty;
                var itemShape = string.Empty;

                TranslationTable.Add("ITEM_ID", "RxSys_DrugID");
                TranslationTable.Add("ITEM_NAME", "DrugName");
                TranslationTable.Add("Manufacturer_Abbreviation", "ShortName");
                TranslationTable.Add("STRENGTH", "Strength");
                TranslationTable.Add("UNIT_OF_MEASURE", "Unit");
                TranslationTable.Add("NARCOTIC_CODE", "DrugSchedule");
                TranslationTable.Add("NDC_CODE", "NDCNum");
                TranslationTable.Add("COLOR_CODE", "VisualDescription");
                TranslationTable.Add("ITEM_TYPE", "VisualDescription");
                TranslationTable.Add("SHAPE_CODE", "VisualDescription");
                TranslationTable.Add("PACKAGE_CODE", "ProdCode");
                TranslationTable.Add("ROUTE_OF_ADMINISTRATION", "Route");
                TranslationTable.Add("FORM_TYPE", "DoseForm");


                var recordSet = Db.ExecuteQuery($"select * FROM dbo.vItem WHERE MSSQLTS > {LastTouch};");

                if (ValidTable(recordSet))
                {
                    foreach (DataRow record in recordSet.Tables[0].Rows)
                    {
                        LastTouch = ByteArrayToHexString((System.Byte[])record["MSSQLTS"]);

                        // Print the DataType of each column in the table.
                        foreach (DataColumn column in record.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(column.ColumnName, out var tmp))
                            {
                                var tag = tmp;
                                var val = record[column.ColumnName].ToString();

                                switch (column.ColumnName)
                                {
                                case "ITEM_TYPE":
                                    itemType = val;
                                    continue;

                                case "COLOR_CODE":
                                    itemColor = val;
                                    continue;

                                case "SHAPE_CODE":
                                    itemShape = val;
                                    continue;

                                default:
                                    break;
                                }

                                _drug.SetField(tag, val, true);
                            }
                        }

                        _drug.VisualDescription = string.Format("{0}/{1}/{2}", itemShape, itemColor, itemType);

                        try
                        {
                            Mutex.WaitOne();

                            using (var gw = new TcpClient(GatewayIp, GatewayPort))
                            {
                                using (var stream = gw.GetStream())
                                {
                                    _drug.Write(stream);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            EventLogger.Error($"Failed reading patient record: {ex.Message}");
                            throw;
                        }
                        finally
                        {
                            Mutex.ReleaseMutex();
                        }

                        _drug.Clear();
                    }
                }
            }
            catch (RowNotInTableException)
            {
                return;  // No records
            }

            catch (Exception ex)
            {
                throw;
            }
        }
        public void ReadStoreRecords()
        {
            _store.Clear();

            try
            {
                // Load the translaton table -- Database Column Name to Gateway Tag Name
                TranslationTable.Add("RxSys_StoreID", "RxSys_StoreID");
                TranslationTable.Add("StoreName", "StoreName");
                TranslationTable.Add("Address1", "Address1");
                TranslationTable.Add("Address2", "Address2");
                TranslationTable.Add("CITY", "City");
                TranslationTable.Add("STATE", "State");
                TranslationTable.Add("ZIP", "Zip");
                TranslationTable.Add("PHONE", "Phone");
                TranslationTable.Add("FAX", "Fax");
                TranslationTable.Add("DEANum", "DEANum");

                var recordSet = Db.ExecuteQuery($"SELECT * FROM dbo.vMOTStore WHERE MSSQLTS > {LastTouch}; ");

                if (ValidTable(recordSet))
                {
                    foreach (DataRow record in recordSet.Tables[0].Rows)
                    {
                        LastTouch = ByteArrayToHexString((System.Byte[])record["MSSQLTS"]);

                        foreach (DataColumn column in record.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(column.ColumnName, out var tmp))
                            {
                                var tag = tmp;
                                var val = record[column.ColumnName].ToString();

                                // Conversion rules
                                switch (column.ColumnName)
                                {
                                default:
                                    break;
                                }

                                // Update the local drug record
                                _store.SetField(tag, val, true);
                            }
                        }

                        try
                        {
                            // Write the record to the gateway
                            Mutex.WaitOne();

                            using (var gw = new TcpClient(GatewayIp, GatewayPort))
                            {
                                using (var stream = gw.GetStream())
                                {
                                    _store.Write(stream);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            EventLogger.Error($"Error processing prescriptin record: {ex.Message}");
                            throw;
                        }
                        finally
                        {
                            Mutex.ReleaseMutex();
                        }

                        _store.Clear();
                    }
                }
            }
            catch (RowNotInTableException)
            {
                return;  // No records
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        void GetNotes(string patientId)
        {
            if (patientId == null)
            {
                throw new ArgumentNullException($"GetNotes");
            }

            string val = string.Empty;
            string tag;

            try
            {
                var recordSet = Db.ExecuteQuery($"SELECT * FROM vPatientNote WHERE Patient_ID = '{patientId}';");
                if (ValidTable(recordSet))
                {
                    foreach (DataRow note in recordSet.Tables["__table"].Rows)
                    {
                        // Print the DataType of each column in the table.
                        foreach (DataColumn column in note.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(column.ColumnName, out var tmp))
                            {
                                tag = tmp;
                                val = note[column.ColumnName].ToString();

                                switch (column.ColumnName)
                                {
                                case "Note_ID":
                                    val += $"Condition: {val}\n";
                                    break;

                                case "Note_Type_Code":
                                    val += $"Note Type: {val}\n";
                                    break;

                                case "Create_User":
                                    val += $"Written By: {val}\n";
                                    break;

                                case "Create_Date":
                                    val += $"Date: {val}\n";
                                    break;

                                case "Note_Text":
                                    val += $"Text: {val}\n";
                                    break;

                                default:
                                    break;
                                }
                            }
                        }
                    }

                    _patient.SetField("TreatmentNotes", val, true);
                }
            }
            catch (Exception ex)
            {
                EventLogger.Error($"Failed reading patient notes: {ex.Message}");
                throw;
            }
        }
        public void ReadFacilityRecords()
        {
            _facility.Clear();

            try
            {
                // Load the translaton table -- Database Column Name to Gateway Tag Name
                TranslationTable.Add("RxSys_LocID", "RxSys_LocID");
                TranslationTable.Add("RxSys_StoreID", "RxSys_StoreID");
                TranslationTable.Add("LocationName", "LocationName");
                TranslationTable.Add("Address1", "Address1");
                TranslationTable.Add("Address2", "Address2");
                TranslationTable.Add("CITY", "City");
                TranslationTable.Add("STATE", "State");
                TranslationTable.Add("ZIP", "Zip");
                TranslationTable.Add("PHONE", "Phone");


                var recordSet = Db.ExecuteQuery($"SELECT * FROM dbo.vMOTLocation WHERE Touchdate > '{LastTouch.ToString()}'; ");

                if (ValidTable(recordSet))
                {
                    foreach (DataRow record in recordSet.Tables[0].Rows)
                    {
                        if ((long)record["Touchdate"] > LastTouch)
                        {
                            LastTouch = (long)record["Touchdate"];
                        }

                        // Print the DataType of each column in the table.
                        foreach (DataColumn column in record.Table.Columns)
                        {
                            if (TranslationTable.TryGetValue(column.ColumnName, out var tmp))
                            {
                                var tag = tmp;
                                var val = record[column.ColumnName].ToString();

                                switch (column.ColumnName)
                                {
                                default:
                                    break;
                                }

                                // Update the local location record
                                _facility.SetField(tag, val, true);
                            }
                        }

                        try
                        {
                            // Write the record to the gateway
                            Mutex.WaitOne();

                            using (var gw = new TcpClient(GatewayIp, GatewayPort))
                            {
                                using (var stream = gw.GetStream())
                                {
                                    _facility.Write(stream);
                                }
                            }

                            Mutex.ReleaseMutex();
                        }
                        catch (Exception ex)
                        {
                            EventLogger.Error($"Error processing prescriptin record: {ex.Message}");
                            throw;
                        }
                        finally
                        {
                            Mutex.ReleaseMutex();
                        }

                        _facility.Clear();
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Failed to get Location Record " + ex.Message);
            }
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Finds the translation table for the locale. Creates a new table if it does not exist.
        /// </summary>
        private TranslationTable GetTable(string locale)
        {
            lock (m_lock)
            {
                // search for table.
                for (int ii = 0; ii < m_translationTables.Count; ii++)
                {
                    TranslationTable translationTable = m_translationTables[ii];
                    
                    if (translationTable.Locale.Name == locale)
                    {
                        return translationTable;
                    }
                }

                // add table.
                TranslationTable table = new TranslationTable();
                table.Locale = CultureInfo.GetCultureInfo(locale);
                m_translationTables.Add(table);

                return table;
            }
        }