Cannot pass new patients to sirona sidexis

This forum is for programmers who have questions about the source code.
Post Reply
bhenriques
Posts: 2
Joined: Wed Apr 15, 2009 5:09 am

Cannot pass new patients to sirona sidexis

Post by bhenriques » Wed Apr 15, 2009 5:14 am

Hi,
i'm having a problem, it hapens that I cannot pass new patients to sirona sidexis.

When I open sirona from opendental with an old patient selected, sirona starts whit that patient selected.
But if I have a new patient selected sirona does not open with any patient selected.


Here is the class sirona.cs, everything seems to be fine..

Code: Select all

[DllImport("kernel32")]//this is the windows function for writing to ini files.
    private static extern long WritePrivateProfileString(string section,string key,string val
			,string filePath);

		[DllImport("kernel32")]//this is the windows function for reading from ini files.
    private static extern int GetPrivateProfileString(string section,string key,string def
			,StringBuilder retVal,int size,string filePath);

		private static string ReadValue(string section,string key){
			StringBuilder strBuild=new StringBuilder(255);
			int i=GetPrivateProfileString(section,key,"",strBuild,255,iniFile);
				return strBuild.ToString();
			}

		///<summary>Sends data for Patient to a mailbox file and launches the program.</summary>
              public static void SendData(Program ProgramCur, Patient pat)
        {

            //ProgramProperties.GetForProgram();
            ArrayList ForProgram = ProgramProperties.GetForProgram(ProgramCur.ProgramNum);
            if (pat != null)
            {
                //read file C:\sidexis\sifiledb.ini
                //iniFile = Path.GetDirectoryName(Programs.Cur.Path) + "\\sifiledb.ini";
                iniFile = Path.GetDirectoryName(ProgramCur.Path) + "\\sifiledb.ini";
                if (!File.Exists(iniFile))
                {
                    MessageBox.Show(iniFile + " could not be found. Is Sidexis installed properly?");
                    return;
                }
                //read FromStation0 | File to determine location of comm file (sendBox) (siomin.sdx)
                //example:
                //[FromStation0]
                //File=F:\PDATA\siomin.sdx  //only one sendBox on entire network.
                string sendBox = ReadValue("FromStation0", "File");
                //read Multistations | GetRequest (=1) to determine if station can take xrays.
                //but we don't care at this point, so ignore
                //set OfficeManagement | OffManConnected = 1 to make sidexis ready to accept a message.
                WritePrivateProfileString("OfficeManagement", "OffManConnected", "1", iniFile);
                //line formats: first two bytes are the length of line including first two bytes and \r\n
                //each field is terminated by null (byte 0).
                //Append U token to siomin.sdx file
                StringBuilder line = new StringBuilder();
                FileStream fs = new FileStream(sendBox, FileMode.OpenOrCreate);
                using (BinaryWriter bw = new BinaryWriter(fs))
                {
                    char nTerm = (char)0;//Convert.ToChar(0);
                    line.Append("U");//U signifies Update patient in sidexis. Gets ignored if new patient.
                    line.Append(nTerm);
                    line.Append(pat.LName);
                    line.Append(nTerm);
                    line.Append(pat.FName);
                    line.Append(nTerm);
                    line.Append(pat.Birthdate.ToString("dd.MM.yyyy"));
                    line.Append(nTerm);
                    //leave initial patient id blank. This updates sidexis to patNums used in Open Dental
                    line.Append(nTerm);
                    line.Append(pat.LName);
                    line.Append(nTerm);
                    line.Append(pat.FName);
                    line.Append(nTerm);
                    line.Append(pat.Birthdate.ToString("dd.MM.yyyy"));
                    line.Append(nTerm);
                    //Patient id:
                    //ProgramProperties.GetCur("Enter 0 to use PatientNum, or 1 to use ChartNum");
                    ProgramProperty PPCur = ProgramProperties.GetCur(ForProgram, "Enter 0 to use PatientNum, or 1 to use ChartNum");
                    //if (ProgramProperties.Cur.PropertyValue == "0")
                    if (PPCur.PropertyValue == "0")
                    {
                        line.Append(pat.PatNum.ToString());
                    }
                    else
                    {
                        line.Append(pat.ChartNumber);
                    }
                    line.Append(nTerm);
                    if (pat.Gender == PatientGender.Female)
                        line.Append("F");
                    else
                        line.Append("M");
                    line.Append(nTerm);
                    line.Append(Providers.GetAbbr(pat.PriProv));
                    line.Append(nTerm);
                    line.Append("OpenDental");
                    line.Append(nTerm);
                    line.Append("Sidexis");
                    line.Append(nTerm);
                    line.Append("\r\n");
                    bw.Write(IntToByteArray(line.Length + 2));//the 2 accounts for these two chars.
                    bw.Write(StrBuildToBytes(line));
                    //Append N token to siomin.sdx file
                    //N signifies create New patient in sidexis. If patient already exists,
                    //then it simply updates any old data.
                    line = new StringBuilder();
                    line.Append("N");
                    line.Append(nTerm);
                    line.Append(pat.LName);
                    line.Append(nTerm);
                    line.Append(pat.FName);
                    line.Append(nTerm);
                    line.Append(pat.Birthdate.ToString("dd.MM.yyyy"));
                    line.Append(nTerm);
                    //Patient id:
                    if (PPCur.PropertyValue == "0")
                    {
                        line.Append(pat.PatNum.ToString());
                    }
                    else
                    {
                        line.Append(pat.ChartNumber);
                    }
                    line.Append(nTerm);
                    if (pat.Gender == PatientGender.Female)
                        line.Append("F");
                    else
                        line.Append("M");
                    line.Append(nTerm);
                    line.Append(Providers.GetAbbr(pat.PriProv));
                    line.Append(nTerm);
                    line.Append("OpenDental");
                    line.Append(nTerm);
                    line.Append("Sidexis");
                    line.Append(nTerm);
                    line.Append("\r\n");
                    bw.Write(IntToByteArray(line.Length + 2));
                    bw.Write(StrBuildToBytes(line));
                    //Append A token to siomin.sdx file
                    //A signifies Autoselect patient. 
                    line = new StringBuilder();
                    line.Append("A");
                    line.Append(nTerm);
                    line.Append(pat.LName);
                    line.Append(nTerm);
                    line.Append(pat.FName);
                    line.Append(nTerm);
                    line.Append(pat.Birthdate.ToString("dd.MM.yyyy"));
                    line.Append(nTerm);
                    if (PPCur.PropertyValue == "0")
                    {
                        line.Append(pat.PatNum.ToString());
                    }
                    else
                    {
                        line.Append(pat.ChartNumber);
                    }
                    line.Append(nTerm);
                    line.Append(SystemInformation.ComputerName);
                    line.Append(nTerm);
                    line.Append(DateTime.Now.ToString("dd.MM.yyyy"));
                    line.Append(nTerm);
                    line.Append(DateTime.Now.ToString("HH.mm.ss"));
                    line.Append(nTerm);
                    line.Append("OpenDental");
                    line.Append(nTerm);
                    line.Append("Sidexis");
                    line.Append(nTerm);
                    line.Append("0");//0=no image selection
                    line.Append(nTerm);
                    line.Append("\r\n");
                    bw.Write(IntToByteArray(line.Length + 2));
                    bw.Write(StrBuildToBytes(line));
                }
                fs.Close();
            }//if patient is loaded
            //Start Sidexis.exe whether patient loaded or not.
            try
            {
                Process.Start(ProgramCur.Path);
            }
            catch
            {
                MessageBox.Show(ProgramCur.Path + " is not available.");
            }          
        }



        


		///<summary>this is my way of converting to hex. I don't like their file format at all. Always returns an array of 2 chars.  Used when measuring length of line.</summary>
		private static byte[] IntToByteArray(int toConvert){
			byte[] retVal=new byte[2];
			retVal[0]=(byte)Math.IEEERemainder(toConvert,256);
			retVal[1]=(byte)(toConvert/256);//rounds down automatically
			return retVal;
		}

		private static byte[] StrBuildToBytes(StringBuilder strBuild){
			byte[] retVal=new byte[strBuild.Length];
			for(int i=0;i<retVal.Length;i++){
				switch(strBuild[i]){
					default:
						retVal[i]=(byte)strBuild[i];
						break;
					case '\u00C7'://C,
						retVal[i]=128;
						break;
					case '\u00FC'://u"
						retVal[i]=129;
						break;
					case '\u00E9'://e'
						retVal[i]=130;
						break;
					case '\u00E2'://a^
						retVal[i]=131;
						break;
					case '\u00E4'://a"
						retVal[i]=132;
						break;
					case '\u00E0'://a`
						retVal[i]=133;
						break;
					case '\u00E5'://ao
						retVal[i]=134;
						break;
					case '\u00E7'://c,
						retVal[i]=135;
						break;
					case '\u00EA'://e^
						retVal[i]=136;
						break;
					case '\u00EB'://e"
						retVal[i]=137;
						break;
					case '\u00E8'://e`
						retVal[i]=138;
						break;
					case '\u00EF'://i"
						retVal[i]=139;
						break;
					case '\u00EE'://i^
						retVal[i]=140;
						break;
					case '\u00EC'://i`
						retVal[i]=141;
						break;
					case '\u00C4'://A"
						retVal[i]=142;
						break;
					case '\u00C5'://Ao
						retVal[i]=143;
						break;
					case '\u00C9'://E'
						retVal[i]=144;
						break;
					case '\u00E6'://ae
						retVal[i]=145;
						break;
					case '\u00C6'://AE
						retVal[i]=146;
						break;
					case '\u00F4'://o^
						retVal[i]=147;
						break;
					case '\u00F6'://o"
						retVal[i]=148;
						break;
					case '\u00F2'://o`
						retVal[i]=149;
						break;
					case '\u00FB'://u^
						retVal[i]=150;
						break;
					case '\u00F9'://u`
						retVal[i]=151;
						break;
					case '\u00FF'://y"
						retVal[i]=152;
						break;
					case '\u00D6'://O"
						retVal[i]=153;
						break;
					case '\u00DC'://U"
						retVal[i]=154;
						break;
					//skipped 155 through 159
					case '\u00E1'://a'
						retVal[i]=160;
						break;
					case '\u00ED'://i'
						retVal[i]=161;
						break;
					case '\u00F3'://o'
						retVal[i]=162;
						break;
					case '\u00FA'://u'
						retVal[i]=163;
						break;
					case '\u00F1'://n~
						retVal[i]=164;
						break;
					case '\u00D1'://N~
						retVal[i]=165;
						break;
				}
			}
			return retVal;
		}

	}
}

Post Reply