private void btn_show_answers_Click(object sender, EventArgs e) { List <int> _listidtr = new List <int>(); foreach (DataGridViewRow r in dg_testresults.Rows) { if (Convert.ToBoolean(r.Cells[2].Value) == true) { _listidtr.Add(Convert.ToInt16(r.Cells[0].Value)); } } if (_listidtr.Count() != 0) { foreach (int i in _listidtr) { human h = _fe.humans.First(hh => hh.idh == _currenthumanid); testresult t = _fe.testresults.First(tr => tr.idtr == i); if (_ge.testsparams.First(tp => tp.idt == t.testid).answerscount != 0) { TestResultForm testform = new TestResultForm(t, h.idh, _ge, _fe); testform.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height; testform.ShowDialog(); } } } else { MessageBox.Show("Нужно выбрать хоть один тест"); } }
public KettellATestReport(human human, testresult testresult, pBaseEntities ge, fBaseEntities fe, bool WithResult) { _testresult = testresult; _human = human; _ge = ge; _fe = fe; _withresult = WithResult; _listscales = new List <IScale>(); _listscales.Add(new KettellScaleA(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleB(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleC(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleE(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleF(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleG(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleH(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleI(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleL(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleM(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleN(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleO(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleQ1(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleQ2(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleQ3(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); _listscales.Add(new KettellScaleQ4(this.GetAnswersFromBase(), _ge, EnumKettellType.AForm)); }
private void btn_printresult_Click(object sender, EventArgs e) { List <int> _listidtr = new List <int>(); foreach (DataGridViewRow r in dg_testresults.Rows) { if (Convert.ToBoolean(r.Cells[2].Value) == true) { _listidtr.Add(Convert.ToInt16(r.Cells[0].Value)); } } if (_listidtr.Count() != 0) { foreach (int i in _listidtr) { human h = _fe.humans.First(hh => hh.idh == _currenthumanid); testresult t = _fe.testresults.First(tr => tr.idtr == i); ITestReport rep = ReportFactory.CreateReport((EnumPTests)t.testid, h, t, _ge, _fe, false); rep.Print(); } } else { MessageBox.Show("Нужно выбрать хоть один тест"); } }
private void btn_showchart_Click(object sender, EventArgs e) { List <int> _listidtr = new List <int>(); foreach (DataGridViewRow r in dg_testresults.Rows) { if (Convert.ToBoolean(r.Cells[2].Value) == true) { _listidtr.Add(Convert.ToInt16(r.Cells[0].Value)); } } if (_listidtr.Count() != 0) { foreach (int i in _listidtr) { testresult t = _fe.testresults.First(tr => tr.idtr == i); testsparam tp = _ge.testsparams.First(tt => tt.idt == t.testid); if (t.mode == "auto") { TimeLineForm tlf = new TimeLineForm(t); tlf.Text = "График скорости: " + tp.description + " от " + t.testdate; tlf.Show(); } } } }
public static testresult testEncoder2() { testresult atestresult; double [] data; Encoded encoded; atestresult = new testresult(); atestresult.failures = 0d; atestresult.errorMessages = new stringx [1]; /* TODO: Support direct instantiation.*/ data = new double [3]; data[0] = 0d; data[1] = Pow(2d, 4d); data[2] = Pow(2d, 8d) - 1d; encoded = encode3(data); if (!stringsEqual(encoded.data, "ABD/".ToCharArray())) { atestresult.failures = atestresult.failures + 1d; } if (!encoded.success) { atestresult.failures = atestresult.failures + 1d; atestresult.errorMessages[0] = stringFrom(encoded.errorMessage); } return(atestresult); }
public static testresult testDecoder() { char [] orginal, result; double [] data; Encoded encoded; Decoded decoded; testresult atestresult; atestresult = new testresult(); atestresult.failures = 0d; atestresult.errorMessages = new stringx [1]; orginal = "Hei".ToCharArray(); data = stringToNumberArray(orginal); encoded = encode(data); decoded = decode3(encoded.data); result = numberArrayToString(decoded.data); if (!stringsEqual(orginal, result)) { atestresult.failures = atestresult.failures + 1d; } if (!decoded.success) { atestresult.failures = atestresult.failures + 1d; atestresult.errorMessages[0] = stringFrom(decoded.errorMessage); } return(atestresult); }
public DTestReport(human human, testresult testresult, pBaseEntities ge, fBaseEntities fe, bool WithResult) { _testresult = testresult; _human = human; _ge = ge; _fe = fe; _withresult = WithResult; _listscales = new List <IScale>(); // 1 level _listscales.Add(new DScaleL(GetAnswersFromBase(), _ge)); _listscales.Add(new DScaleF(GetAnswersFromBase(), _ge)); _listscales.Add(new DScaleK(GetAnswersFromBase(), _ge)); _listscales.Add(new DScaleHS(GetAnswersFromBase(), _ge, new DScaleK(GetAnswersFromBase(), _ge))); _listscales.Add(new DScaleD(GetAnswersFromBase(), _ge)); _listscales.Add(new DScaleHY(GetAnswersFromBase(), _ge)); _listscales.Add(new DScalePD(GetAnswersFromBase(), _ge, new DScaleK(GetAnswersFromBase(), _ge))); _listscales.Add(new DScaleMF(GetAnswersFromBase(), _ge)); _listscales.Add(new DScalePA(GetAnswersFromBase(), _ge)); _listscales.Add(new DScalePT(GetAnswersFromBase(), _ge, new DScaleK(GetAnswersFromBase(), _ge))); _listscales.Add(new DScaleSC(GetAnswersFromBase(), _ge, new DScaleK(GetAnswersFromBase(), _ge))); _listscales.Add(new DScaleMA(GetAnswersFromBase(), _ge, new DScaleK(GetAnswersFromBase(), _ge))); _listscales.Add(new DScaleSI(GetAnswersFromBase(), _ge)); //2 level _listscales.Add(new DScaleAC(GetAnswersFromBase(), _ge)); _listscales.Add(new DScalePC(GetAnswersFromBase(), _ge)); _listscales.Add(new DScaleDAN(GetAnswersFromBase(), _ge)); //3 level _listscales.Add(new DScaleDS(GetAnswersFromBase(), _ge)); _listscales.Add(new DScaleNPU(GetAnswersFromBase(), _ge)); _listscales.Add(new DScaleCS(GetAnswersFromBase(), _ge)); _listscales.Add(new DScaleMN(GetAnswersFromBase(), _ge)); //4 level _listscales.Add(new DScaleLAP(GetAnswersFromBase(), _ge)); // _listscales.Add(new DScaleKL(GetAnswersFromBase(),_human, _ge)); }
public static testresult testEncoderWithPadding2() { testresult atestresult; char [] hei; double [] data; Encoded encoded; atestresult = new testresult(); atestresult.failures = 0d; atestresult.errorMessages = new stringx [1]; hei = "Hei1".ToCharArray(); data = stringToNumberArray(hei); encoded = encode(data); if (!stringsEqual(encoded.data, "SGVpMQ==".ToCharArray())) { atestresult.failures = atestresult.failures + 1d; } if (!encoded.success) { atestresult.failures = atestresult.failures + 1d; atestresult.errorMessages[0] = stringFrom(encoded.errorMessage); } return(atestresult); }
public static testresult testDecoder2() { testresult atestresult; double [] original; Encoded encoded; Decoded decoded; atestresult = new testresult(); atestresult.failures = 0d; atestresult.errorMessages = new stringx [1]; original = new double [3]; original[0] = 0d; original[1] = Pow(2d, 4d); original[2] = Pow(2d, 8d) - 1d; encoded = encode(original); decoded = decode3(encoded.data); if (!numberArraysEqual(original, decoded.data)) { atestresult.failures = atestresult.failures + 1d; } if (!decoded.success) { atestresult.failures = atestresult.failures + 1d; atestresult.errorMessages[0] = stringFrom(decoded.errorMessage); } return(atestresult); }
private void btn_addtobase_Click(object sender, EventArgs e) { ITest tst = TestFactory.CreateTest((EnumPTests)_testid, _ge, _fe, true); tst.HumanID = _humanid; _testresult = tst.ResultsToBase(this.ag_answers.Answers); this.Close(); }
public MDTestReport(human human, testresult testresult, pBaseEntities ge, fBaseEntities fe, bool WithResult) { _testresult = testresult; _human = human; _ge = ge; _fe = fe; _withresult = WithResult; _listscales = new List <IScale>(); int ages = (_testresult.testdate.Date - _human.birthday.Value.Date).Days / 365; MDAnswers _answers = GetAnswersFromBase(); MDScaleAnamnes _anamnes = new MDScaleAnamnes(_answers, _ge); MDScaleLie _lie = new MDScaleLie(_answers, _ge); MDScaleM1_1 _m1_1 = new MDScaleM1_1(_answers, _ge); MDScaleM1_2 _m1_2 = new MDScaleM1_2(_answers, _ge); MDScaleM1 _m1 = new MDScaleM1(_answers, _ge, _m1_1, _m1_2); MDScaleM2 _m2 = new MDScaleM2(_answers, _ge); MDScaleM2_1 _m2_1 = new MDScaleM2_1(_answers, _ge); MDScaleM2_2 _m2_2 = new MDScaleM2_2(_answers, _ge); MDScaleM2_3 _m2_3 = new MDScaleM2_3(_answers, _ge); MDScaleM3 _m3 = new MDScaleM3(_answers, _ge); MDScaleM3_1 _m3_1 = new MDScaleM3_1(_answers, _ge); MDScaleM3_2 _m3_2 = new MDScaleM3_2(_answers, _ge); MDScaleM3_3 _m3_3 = new MDScaleM3_3(_answers, _ge); MDScaleM3_4 _m3_4 = new MDScaleM3_4(_answers, _ge); MDScaleM3_5 _m3_5 = new MDScaleM3_5(_answers, _ge); MDScaleM3_6 _m3_6 = new MDScaleM3_6(_answers, _ge); MDScaleIntegral _integral = new MDScaleIntegral(_anamnes, _lie, _m1, _m2, _m3); _listscales.Add(_lie); _listscales.Add(_anamnes); _listscales.Add(_m1); if (_withresult == true) { _listscales.Add(_m1_1); _listscales.Add(_m1_2); } _listscales.Add(_m2); if (_withresult == true) { _listscales.Add(_m2_1); _listscales.Add(_m2_2); _listscales.Add(_m2_3); } _listscales.Add(_m3); if (_withresult == true) { _listscales.Add(_m3_1); _listscales.Add(_m3_2); _listscales.Add(_m3_3); _listscales.Add(_m3_4); _listscales.Add(_m3_5); _listscales.Add(_m3_6); } _listscales.Add(_integral); }
public static T GetAnswersFromTestResult <T>(testresult t) { T _answersfrombase; XmlSerializer mySerializer = new XmlSerializer(typeof(T)); StringReader sr = new StringReader(t.teststream); _answersfrombase = (T)mySerializer.Deserialize(sr); return(_answersfrombase); }
public PNNTestReport(human human, testresult testresult, pBaseEntities ge, fBaseEntities fe) { _testresult = testresult; _human = human; _ge = ge; _fe = fe; _listscales = new List <IScale>(); _listscales.Add(new PNNScale(this.GetAnswersFromBase())); }
void btn_addtobase_Click(object sender, EventArgs e) { _testresult = _recogform.TestResult; if (_printing == true) { this.PrintReference(); } this.Start(); }
public TimeLineForm(testresult TestResult) { InitializeComponent(); _testresult = TestResult; HelpProvider help = new HelpProvider(); help.HelpNamespace = "Recog_help.chm"; help.SetHelpNavigator(this, HelpNavigator.Topic); help.SetHelpKeyword(this, "result_character.htm#speed_view"); }
public PTestReport(human human, testresult testresult, pBaseEntities ge, fBaseEntities fe, bool WithResult) { _testresult = testresult; _human = human; _ge = ge; _fe = fe; _withresult = WithResult; _listscales = new List <IScale>(); _listscales.Add(new PScaleI(GetAnswersFromBase(), _ge)); _listscales.Add(new PScaleNPU(GetAnswersFromBase(), _ge)); }
public static ITestReport CreateReport(EnumPTests test, human human, testresult testresult, pBaseEntities ge, fBaseEntities fe, bool withresult) { ITestReport _genreport = null; switch (test) { case EnumPTests.KettellC: _genreport = new KettellCTestReport(human, testresult, ge, fe, withresult); break; case EnumPTests.PNN: _genreport = new PNNTestReport(human, testresult, ge, fe); break; case EnumPTests.Adaptability: _genreport = new DTestReport(human, testresult, ge, fe, withresult); break; case EnumPTests.FPI: _genreport = new FPITestReport(human, testresult, ge, fe, withresult); break; case EnumPTests.KettellA: _genreport = new KettellATestReport(human, testresult, ge, fe, withresult); break; case EnumPTests.Modul2: _genreport = new MDTestReport(human, testresult, ge, fe, withresult); break; case EnumPTests.Contrasts: _genreport = new ContrastsTestReport(human, testresult, ge, fe); break; case EnumPTests.Prognoz: _genreport = new PTestReport(human, testresult, ge, fe, withresult); break; case EnumPTests.Addictive: _genreport = new ATestReport(human, testresult, ge, fe, withresult); break; case EnumPTests.NPNA: _genreport = new NPNTestReport(human, testresult, ge, fe, withresult); break; case EnumPTests.Leongard: _genreport = new LTestReport(human, testresult, ge, fe, withresult); break; } return(_genreport); }
public static void UpdateTestFromAnswers <T>(T answers, AnswersGrid grid, testresult testresult, pBaseEntities ge) where T : IAnswers { for (int i = 0, count = grid.Answers.Count; i < count; i++) { answers.Add(grid[i].Answer.SelectedCellIndex(), grid[i].Answer.ContentDescription, "", grid[i].Answer.Id, ""); } XmlSerializer mySerializer = new XmlSerializer(typeof(T)); StringWriter myWriter = new StringWriter(); mySerializer.Serialize(myWriter, answers); testresult.teststream = myWriter.ToString(); ge.SaveChanges(); }
public void ResultsToBase() { PNNAnswers Answers = _tstfrm.testloader.Answers; XmlSerializer mySerializer = new XmlSerializer(typeof(PNNAnswers)); StringWriter myWriter = new StringWriter(); mySerializer.Serialize(myWriter, Answers); testresult t = testresult.Createtestresult(0, _humanid, DateTime.Now, (int)EnumPTests.PNN, myWriter.ToString(), "auto"); _fe.testresults.AddObject(t); _fe.SaveChanges(); myWriter.Close(); }
public void ResultsToBase() { DAnswers Answers = tkf.ktl.Answers; XmlSerializer mySerializer = new XmlSerializer(typeof(DAnswers)); StringWriter myWriter = new StringWriter(); mySerializer.Serialize(myWriter, Answers); testresult t = testresult.Createtestresult(0, _humanid, DateTime.Now, (int)EnumPTests.Adaptability, myWriter.ToString(), "auto"); _fe.testresults.AddObject(t); _fe.SaveChanges(); myWriter.Close(); }
public void ResultsToBase() { KettellAnswers Answers = tkf.ktl.Answers; XmlSerializer mySerializer = new XmlSerializer(typeof(KettellAnswers)); StringWriter myWriter = new StringWriter(); mySerializer.Serialize(myWriter, Answers); human h = _fe.humans.First(hh => hh.idh == _humanid); h.testresults.Load(); testresult t = testresult.Createtestresult(0, _humanid, DateTime.Now, (int)EnumPTests.KettellA, myWriter.ToString(), "auto"); _fe.testresults.AddObject(t); _fe.SaveChanges(); myWriter.Close(); }
public TestResultForm(testresult tstresult, int humanid, pBaseEntities ge, fBaseEntities fe) { InitializeComponent(); _ge = ge; _fe = fe; _testresult = tstresult; _humanid = humanid; RemarkToolTip = new ToolTip(); RemarkToolTip.ToolTipIcon = ToolTipIcon.Info; RemarkToolTip.ToolTipTitle = "Вопрос:"; RemarkToolTip.IsBalloon = true; HelpProvider help = new HelpProvider(); help.HelpNamespace = "Recog_help.chm"; help.SetHelpNavigator(this, HelpNavigator.Topic); help.SetHelpKeyword(this, "result_character.htm#test_view"); }
public static testresult testDecoderReal1() { testresult atestresult; Decoded decoded; atestresult = new testresult(); atestresult.failures = 0d; atestresult.errorMessages = new stringx [1]; decoded = decode("56Lw4SQJdBIDNUoc+QNvbuQQo/osGyGQzfLfluGLJ+g=".ToCharArray()); if (!decoded.success) { atestresult.failures = atestresult.failures + 1d; atestresult.errorMessages[0] = stringFrom(decoded.errorMessage); } return(atestresult); }
public LTestReport(human human, testresult testresult, pBaseEntities ge, fBaseEntities fe, bool WithResult) { _testresult = testresult; _human = human; _ge = ge; _fe = fe; _withresult = WithResult; _listscales = new List <IScale>(); _listscales.Add(new LScaleG1(GetAnswersFromBase(), _ge)); _listscales.Add(new LScaleG2(GetAnswersFromBase(), _ge)); _listscales.Add(new LScaleG3(GetAnswersFromBase(), _ge)); _listscales.Add(new LScaleG4(GetAnswersFromBase(), _ge)); _listscales.Add(new LScaleG5(GetAnswersFromBase(), _ge)); _listscales.Add(new LScaleG6(GetAnswersFromBase(), _ge)); _listscales.Add(new LScaleG7(GetAnswersFromBase(), _ge)); _listscales.Add(new LScaleG8(GetAnswersFromBase(), _ge)); _listscales.Add(new LScaleG9(GetAnswersFromBase(), _ge)); _listscales.Add(new LScaleG10(GetAnswersFromBase(), _ge)); }
public FPITestReport(human human, testresult testresult, pBaseEntities ge, fBaseEntities fe, bool WithResult) { _testresult = testresult; _human = human; _ge = ge; _fe = fe; _withresult = WithResult; _listscales = new List <IScale>(); _listscales.Add(new FPIScaleI(this.GetAnswersFromBase(), _ge)); _listscales.Add(new FPIScaleII(this.GetAnswersFromBase(), _ge)); _listscales.Add(new FPIScaleIII(this.GetAnswersFromBase(), _ge)); _listscales.Add(new FPIScaleIV(this.GetAnswersFromBase(), _ge)); _listscales.Add(new FPIScaleV(this.GetAnswersFromBase(), _ge)); _listscales.Add(new FPIScaleVI(this.GetAnswersFromBase(), _ge)); _listscales.Add(new FPIScaleVII(this.GetAnswersFromBase(), _ge)); _listscales.Add(new FPIScaleVIII(this.GetAnswersFromBase(), _ge)); _listscales.Add(new FPIScaleIX(this.GetAnswersFromBase(), _ge)); _listscales.Add(new FPIScaleX(this.GetAnswersFromBase(), _ge)); _listscales.Add(new FPIScaleXI(this.GetAnswersFromBase(), _ge)); _listscales.Add(new FPIScaleXII(this.GetAnswersFromBase(), _ge)); }
public testresult ResultsToBase(RecogCore.AnswerGrid.Answers Answers) { NPNAnswers _answersforbase = new NPNAnswers(_ge); for (int i = 0, count = Answers.Count; i < count; i++) { _answersforbase.Add(Answers[i].SelectedCellIndex(), Answers[i].ContentDescription, "", Answers[i].Id, ""); } XmlSerializer mySerializer = new XmlSerializer(typeof(NPNAnswers)); StringWriter myWriter = new StringWriter(); mySerializer.Serialize(myWriter, _answersforbase); testresult t = testresult.Createtestresult(0, _humanid, DateTime.Now, (int)EnumPTests.NPNA, myWriter.ToString(), "manual"); _fe.testresults.AddObject(t); _fe.SaveChanges(); myWriter.Close(); return(t); }
public IScalesCollection(pBaseEntities ge, testresult testresult, human human) { _listscales = new List <IScale>(); }
/// <summary> /// This is a thread for the client that has connected /// </summary> /// <param name="client">Client (GX-machine)</param> private void HandleClientComm(object client) { //TCP client that connected TcpClient tcpClient = (TcpClient)client; //Get reference to stream for client so we can read/write data NetworkStream networkStream = tcpClient.GetStream(); //log that new client connected Logger.Log(string.Format("New client connected: {0}", tcpClient.Client.RemoteEndPoint.ToString()), LogLevel.Info); //variable to keep track of the bytes we received in the client stream int bytesRead; //variable for constructing the message string hl7Message = string.Empty; //this will store all messages we receive for later ACK: List <DataForHL7Acknowledgement> dataForAck = new List <DataForHL7Acknowledgement>(); bool awaitingHl7Ack = false; //keep track of connection state: ConnectionState connState = ConnectionState.Neutral; while (true) { bytesRead = 0; string message = string.Empty; try { //blocks until a client sends a message //bytesRead = networkStream.Read(message, 0, 1024 * 1024); if (networkStream.CanRead) { byte[] msg = new byte[1];//TODO: set a higher value here or some other method to prevent reading lots of null-bytes/ Research: how to get perfect buffer size? StringBuilder myCompleteMessage = new StringBuilder(); // Incoming message may be larger than the buffer size. do { bytesRead = networkStream.Read(msg, 0, msg.Length); myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(msg, 0, msg.Length)); }while (networkStream.DataAvailable); message = myCompleteMessage.ToString(); } else { Console.WriteLine("Sorry. You cannot read from this NetworkStream."); } } catch { //a socket error has occurred break; } if (bytesRead == 0) { //the client has disconnected from the server break; } //message has successfully been received ASCIIEncoding encoder = new ASCIIEncoding(); //Logger.Log(encoder.GetString(message), LogLevel.Info); //if we got an ENQ, respond with ACK: if (message[0] == Constants.ENQ) { Logger.Log("Sending ACK in response to ENQ...", LogLevel.Info); networkStream.WriteByte(Constants.ACK); networkStream.Flush(); connState = ConnectionState.Receiving; } //if eot of full message, confirm end of receiving and start transmission of HL7 ack else if (connState == ConnectionState.Receiving && message[0] == Constants.EOT) { //send enq to go from neutral state to transmission: Logger.Log("Sending ENQ...", LogLevel.Info); networkStream.WriteByte(Constants.ENQ); networkStream.Flush(); connState = ConnectionState.Sending; } //did we get an eot in response to our hl7-eot? else if (connState == ConnectionState.Sending && message[0] == Constants.EOT) { //do nothing (we're back in neutral state) Logger.Log("Received EOT from GX", LogLevel.Info); //set vars back to neutral connState = ConnectionState.Neutral; } //did we receive an ack in response to our enq and do we have messages to send acks for? else if (connState == ConnectionState.Sending && message[0] == Constants.ACK) { //GX acknowledged last message -> remove from list: if (dataForAck.Any() && awaitingHl7Ack) { var data = dataForAck.First(); dataForAck.Remove(data); } if (!dataForAck.Any()) { //send eot Logger.Log("Sending EOT in response to ACK for HL7-ACK...", LogLevel.Info); networkStream.WriteByte(Constants.EOT); networkStream.Flush(); awaitingHl7Ack = false; connState = ConnectionState.Neutral; } else { //get first data in list to acknowledge var data = dataForAck.First(); awaitingHl7Ack = true; PipeParser parser = new PipeParser(); //also need to send ack of complete message: Logger.Log("Sending ack of entire message", LogLevel.Info); NHapi.Model.V25.Message.ACK ack = new NHapi.Model.V25.Message.ACK(); //MSH-part of message acknowledgement: ack.MSH.SendingApplication.NamespaceID.Value = "LIS";//TODO: set to "bigpicture" ack.MSH.ReceivingApplication.NamespaceID.Value = data.SendingApplicationNamespaceID; ack.MSH.ReceivingApplication.UniversalID.Value = data.SendingApplicationUniversalID; ack.MSH.ReceivingApplication.UniversalIDType.Value = data.SendingApplicationUniversalIDType; //ack.MSH.DateTimeOfMessage.Time.Set(DateTime.Now, "yyyyMMddHHmmss"); string guid = Guid.NewGuid().ToString(); ack.MSH.MessageControlID.Value = data.MessageControlID; ack.MSH.ProcessingID.ProcessingID.Value = "P"; ack.MSH.AcceptAcknowledgmentType.Value = "NE"; ack.MSH.ApplicationAcknowledgmentType.Value = "NE"; //MSA-part ack.MSA.AcknowledgmentCode.Value = "CA"; ack.MSA.MessageControlID.Value = data.MessageControlID; //ack.MSA.TextMessage.Value = "Test"; PipeParser parserResponse = new PipeParser(); string hl7Response = parserResponse.Encode(ack); //wrapping message in hl7 llp start and end chars? //hl7Response = encoder.GetString(new byte[] { PIPE }) + hl7Response + encoder.GetString(new byte[] { SEPARATOR }) + encoder.GetString(new byte[] { CR }); //get checksum for sending: byte[] hl7ResponseForChecksum = encoder.GetBytes("1" + hl7Response + encoder.GetString(new byte[1] { Constants.ETX })); int checksum = 0; for (int i = 0; i < hl7ResponseForChecksum.Length; i++) { checksum += hl7ResponseForChecksum[i]; } //convert checksum to hex so we can get eight least significant bits: string checksumHex = checksum.ToString("X"); //wrapping message in astm control chars // "0" = Frame Number hl7Response = encoder.GetString(new byte[1] { Constants.STX }) + "1" + hl7Response + encoder.GetString(new byte[1] { Constants.ETX }) + checksumHex.Substring(checksumHex.Length - 2, 1) + checksumHex.Substring(checksumHex.Length - 1, 1) + encoder.GetString(new byte[1] { Constants.CR }) + encoder.GetString(new byte[1] { Constants.LF }); //hl7Response = encoder.GetString(hl7Response ); byte[] response = encoder.GetBytes(hl7Response); networkStream.Write(response, 0, response.Length); networkStream.Flush(); } } else if (connState == ConnectionState.Receiving && message[0] == Constants.STX && (message.Any(m => m == Constants.ETX) || message.Any(m => m == Constants.ETB))) //we received a message frame { //TODO: verify that this is the frame number we expected, return nak if not int frameNumber = Convert.ToInt32(message[1]) - 48; bool isEndFrame = false; Logger.Log(string.Format("Received {0}frame (Nr. {1})", isEndFrame ? "end" : "", frameNumber), LogLevel.Info); //get text of message. It's the 2nd byte up until the ETB or ETX control character: if (message.Any(m => m == Constants.ETX)) { isEndFrame = true; } int indexOfEndMessage = message.IndexOf(isEndFrame ? Encoding.ASCII.GetString(new byte[] { Constants.ETX }) : Encoding.ASCII.GetString(new byte[] { Constants.ETB }));// Array.IndexOf(message, isEndFrame ? Constants.ETX : Constants.ETB); //string encodedMessage = encoder.GetString(message, 2, indexOfEndMessage); //TODO: verify checksum, send NAK if not correct int cs1 = message[indexOfEndMessage + 1]; int cs2 = message[indexOfEndMessage + 2]; int checksum = 0; for (int i = 1; i < indexOfEndMessage + 1; i++) { checksum += message[i]; } //check checksum; send nak if not correct: if (!checksum.ToString("X").EndsWith(message[indexOfEndMessage + 1].ToString() + message[indexOfEndMessage + 2].ToString())) { //send NAK for this frame networkStream.WriteByte(Constants.NAK); networkStream.Flush(); Logger.Log("Sent NAK because checksum incorrect", LogLevel.Warning); } else { hl7Message += message.Substring(2, indexOfEndMessage - 2); //use nhapi to parse message if message complete: if (isEndFrame) { PipeParser parser = new PipeParser(); ORU_R30 hl7 = new ORU_R30(); try { IMessage im = parser.Parse(hl7Message); hl7 = im as ORU_R30; } catch (Exception e) { //send NAK for this frame networkStream.WriteByte(Constants.EOT); networkStream.Flush(); Logger.Log("Error converting message: " + e.Message, LogLevel.Error, hl7Message); return; } try { //genexpert sends spm which isn't officially part of ORU_R30: hl7.addNonstandardSegment("SPM"); //TODO: validate parser.Parse((NHapi.Model.V25.Segment.SPM)hl7.GetStructure("SPM"), hl7Message.Substring(hl7Message.IndexOf("SPM"), 40), new EncodingCharacters('|', hl7.MSH.EncodingCharacters.Value)); } catch (Exception e) { //send NAK for this frame networkStream.WriteByte(Constants.EOT); networkStream.Flush(); Logger.Log("Error parsing specimen part of message: " + e.Message, LogLevel.Error, hl7Message); return; } //get all values that are of interest to us: if (hl7 != null) { //make sure it's a Tb-result: if (hl7.OBR.UniversalServiceIdentifier.Identifier.Value == "MTB-RIF") { //log message: //Logger.Log(string.Format("HL7 Message: {0}", hl7Message), LogLevel.Info); //try to store in db: try { //store in database using (BigPictureEntities bpe = new BigPictureEntities()) { //first, see if we know this machine already and create it if we don't: string instrumentSerial = ((NHapi.Model.V25.Datatype.EI)hl7.GetOBSERVATION(0).OBX.GetField(18).GetValue(4)).EntityIdentifier.Value; device device = bpe.devices.FirstOrDefault(d => d.Serial == instrumentSerial); //create device if we don't have it yet if (device == null) { device = new device(); device.Serial = instrumentSerial; device.InsertedBy = device.UpdatedBy = "BigPicture Listener"; device.InsertedOn = device.InsertedOn = DateTime.Now; bpe.devices.Add(device); } //Add test to database if it doesn't exist already (=re-upload) string cartridgeSerial = ((NHapi.Model.V25.Datatype.EI)hl7.GetOBSERVATION(0).OBX.GetField(18).GetValue(2)).EntityIdentifier.Value; test test = bpe.tests.FirstOrDefault(t => t.CartridgeSerial == cartridgeSerial); //create test if not already exists if (test == null) { test = new test(); test.InsertedOn = DateTime.Now; test.InsertedBy = "BigPicture Listener"; test.CartridgeSerial = cartridgeSerial; bpe.tests.Add(test); } //fill test with new data we got: test.AssayHostTestCode = hl7.OBR.UniversalServiceIdentifier.Identifier.Value; test.AssayName = ((NHapi.Model.V25.Datatype.CE)hl7.GetOBSERVATION(0).OBX.GetField(3).GetValue(0)).Identifier.ExtraComponents.getComponent(1).Data.ToString(); test.AssayVersion = ((NHapi.Model.V25.Datatype.CE)hl7.GetOBSERVATION(0).OBX.GetField(3).GetValue(0)).Identifier.ExtraComponents.getComponent(2).Data.ToString(); test.CartridgeExpirationDate = DateTime.ParseExact(((NHapi.Model.V25.Datatype.EI)hl7.GetOBSERVATION(0).OBX.GetField(18).GetValue(0)).EntityIdentifier.Value.ToString(), "yyyyMMdd", CultureInfo.CurrentCulture); test.ComputerName = ((NHapi.Model.V25.Datatype.EI)hl7.GetOBSERVATION(0).OBX.GetField(18).GetValue(5)).EntityIdentifier.Value.ToString(); test.SenderUser = ((NHapi.Model.V25.Datatype.XCN)hl7.GetOBSERVATION(0).OBX.GetField(16)[0]).FamilyName.Surname.ToString(); test.SenderVersion = hl7.MSH.SendingApplication.Components[2].ToString(); test.deployment = device.deployment; test.MessageSentOn = hl7.MSH.DateTimeOfMessage.Time.GetAsDate(); test.ModuleSerial = ((NHapi.Model.V25.Datatype.EI)hl7.GetOBSERVATION(0).OBX.GetField(18).GetValue(3)).EntityIdentifier.Value.ToString(); //test.Notes = ; //test.PatientId = ; test.ReagentLotId = ((NHapi.Model.V25.Datatype.EI)hl7.GetOBSERVATION(0).OBX.GetField(18).GetValue(1)).EntityIdentifier.Value.ToString(); test.ResultText = ((NHapi.Base.Model.Varies)hl7.GetOBSERVATION(0).OBX.GetField(5).GetValue(0)).Data.ToString() + "|" + ((NHapi.Base.Model.Varies)hl7.GetOBSERVATION(19).OBX.GetField(5).GetValue(0)).Data.ToString() + "|"; test.SampleId = ((NHapi.Model.V25.Datatype.EI)(((NHapi.Model.V25.Datatype.EIP)((NHapi.Model.V25.Segment.SPM)hl7.GetStructure("SPM")).SpecimenID)[0])).EntityIdentifier.Value; test.SystemName = hl7.MSH.SendingApplication.Components[0].ToString(); //test.TestEndedOn = ; test.TestStartedOn = hl7.ORC.DateTimeOfTransaction.Time.GetAsDate(); test.UpdatedBy = "BigPicture Listener"; test.UpdatedOn = DateTime.Now; //normalize test results. TODO: handle if not exits yet //TB-result: //TODO: Throw godo error/log when not present in db: string resultTestCodeTb = ((NHapi.Model.V25.Datatype.CE)hl7.GetOBSERVATION(0).OBX.GetField(3).GetValue(0)).Identifier.ExtraComponents.getComponent(0).Data.ToString().Replace("4", ""); int resultTestCodeIdTb = bpe.resulttestcodes.First(r => r.ResultTestCode1 == resultTestCodeTb).ResultTestCodeId; testresult testResultTb = new testresult(); testResultTb.InsertedBy = testResultTb.UpdatedBy = "BigPicture Listener"; testResultTb.InsertedOn = testResultTb.UpdatedOn = DateTime.Now; testResultTb.Result = ((NHapi.Base.Model.Varies)hl7.GetOBSERVATION(0).OBX.GetField(5).GetValue(0)).Data == null || ((NHapi.Base.Model.Varies)hl7.GetOBSERVATION(0).OBX.GetField(5).GetValue(0)).Data.ToString() == null ? "" : ((NHapi.Base.Model.Varies)hl7.GetOBSERVATION(0).OBX.GetField(5).GetValue(0)).Data.ToString(); testResultTb.TestId = test.TestId; testResultTb.ResultTestCodeId = resultTestCodeIdTb; bpe.testresults.Add(testResultTb); //Rif-resistance-result: //TODO: Throw godo error/log when not present in db: string resultTestCodeRif = ((NHapi.Model.V25.Datatype.CE)hl7.GetOBSERVATION(19).OBX.GetField(3).GetValue(0)).Identifier.ExtraComponents.getComponent(0).Data.ToString(); int resultTestCodeIdRif = bpe.resulttestcodes.First(r => r.ResultTestCode1 == resultTestCodeRif).ResultTestCodeId; testresult testResultRif = new testresult(); testResultRif.InsertedBy = testResultRif.UpdatedBy = "BigPicture Listener"; testResultRif.InsertedOn = testResultRif.UpdatedOn = DateTime.Now; testResultRif.Result = ((NHapi.Base.Model.Varies)hl7.GetOBSERVATION(19).OBX.GetField(5).GetValue(0)).Data == null || ((NHapi.Base.Model.Varies)hl7.GetOBSERVATION(19).OBX.GetField(5).GetValue(0)).Data.ToString() == null ? "" : ((NHapi.Base.Model.Varies)hl7.GetOBSERVATION(19).OBX.GetField(5).GetValue(0)).Data.ToString(); testResultRif.TestId = test.TestId; testResultRif.ResultTestCodeId = resultTestCodeIdRif; bpe.testresults.Add(testResultRif); //finally, save everything to db: bpe.SaveChanges(); } } catch (Exception e) { Logger.Log("Store in DB failed: " + e.Message, LogLevel.Error, hl7Message); } } } //add to list of received messages for later HL7 ACK: DataForHL7Acknowledgement data = new DataForHL7Acknowledgement(); data.SendingApplicationNamespaceID = hl7.MSH.SendingApplication.NamespaceID.Value.ToString(); data.SendingApplicationUniversalID = hl7.MSH.SendingApplication.UniversalID.Value.ToString(); data.SendingApplicationUniversalIDType = hl7.MSH.SendingApplication.UniversalIDType.Value.ToString(); data.MessageControlID = hl7.MSH.MessageControlID.Value.ToString(); dataForAck.Add(data); //empty message-var for the next message to be sent hl7Message = string.Empty; //for some reason, our system is too quick for GX. need a delay here (really!) //TODO: Double-check that this is really necessary //Thread.Sleep(1000); //send ACK for this frame networkStream.WriteByte(Constants.ACK); networkStream.Flush(); Logger.Log("Sent ACK of endframe", LogLevel.Info); } else { //send ACK for this frame networkStream.WriteByte(Constants.ACK); networkStream.Flush(); Logger.Log("Sent ACK of regular frame", LogLevel.Info); } } } else { //send ACK in any other case networkStream.WriteByte(Constants.ACK); networkStream.Flush(); Logger.Log("Sent ACK for random frame", LogLevel.Info); } } tcpClient.Close(); }
/// <summary> /// Создает характеристику по выбранным тестам /// </summary> /// <param name="checkedtestsid">Отмеченные тесты</param> /// <param name="SelectedRef">Выбранная характеристика</param> /// <returns></returns> public IReference GetReference(List <int> checkedtestsid, EnumPReferences SelectedRef) { IReference _reference = null; List <testresult> testresults = new List <testresult>(); foreach (int testid in checkedtestsid) {//выбираем все отмеченные тесты testresults.Add(_human.testresults.FirstOrDefault(test => test.idtr == testid)); } switch (SelectedRef) { case EnumPReferences.KettellC: if (testresults.Count(test => test.testid == (int)EnumPTests.KettellC) != 0) { testresult kettellctestresult = testresults.LastOrDefault(test => test.testid == (int)EnumPTests.KettellC); ITestReport kettellcreport = new KettellCTestReport(_human, kettellctestresult, _ge, _fe, true); _reference = new KettellCTestReference(kettellcreport); } else { MessageBox.Show("Для выбранной характеристики необходим тест Кеттелла С \nОтметьте его галочной в списке тестов"); } break; case EnumPReferences.Adaptability: if (testresults.Count(test => test.testid == (int)EnumPTests.Adaptability) != 0) { testresult dtestresult = testresults.LastOrDefault(test => test.testid == (int)EnumPTests.Adaptability); ITestReport dreport = new DTestReport(_human, dtestresult, _ge, _fe, true); _reference = new DTestReference(dreport); } else { MessageBox.Show("Для выбранной характеристики необходим тест Адаптивность \nОтметьте его галочной в списке тестов"); } break; case EnumPReferences.FPI: if (testresults.Count(test => test.testid == (int)EnumPTests.FPI) != 0) { testresult fpitestresult = testresults.LastOrDefault(test => test.testid == (int)EnumPTests.FPI); ITestReport fpireport = new FPITestReport(_human, fpitestresult, _ge, _fe, true); _reference = new FPITestReference(fpireport); } else { MessageBox.Show("Для выбранной характеристики необходим тест FPI \nОтметьте его галочной в списке тестов"); } break; case EnumPReferences.KettellA: if (testresults.Count(test => test.testid == (int)EnumPTests.KettellA) != 0) { testresult kettellatestresult = testresults.LastOrDefault(test => test.testid == (int)EnumPTests.KettellA); ITestReport kettellareport = new KettellATestReport(_human, kettellatestresult, _ge, _fe, true); _reference = new KettellATestReference(kettellareport); } else { MessageBox.Show("Для выбранной характеристики необходим тест Кеттелла А \nОтметьте его галочной в списке тестов"); } break; case EnumPReferences.Modul: if (testresults.Count(test => test.testid == (int)EnumPTests.Modul2) != 0) { testresult mdtestresult = testresults.LastOrDefault(test => test.testid == (int)EnumPTests.Modul2); ITestReport mdreport = new MDTestReport(_human, mdtestresult, _ge, _fe, true); _reference = new MDTestReference(mdreport); } else { MessageBox.Show("Для выбранной характеристики необходим тест Модуль \nОтметьте его галочной в списке тестов"); } break; case EnumPReferences.Integrative: if (testresults.Count(test => test.testid == (int)EnumPTests.KettellC) != 0) { testresult kettelltestresult = testresults.LastOrDefault(test => test.testid == (int)EnumPTests.KettellC); ITestReport kettellreport = new KettellCTestReport(_human, kettelltestresult, _ge, _fe, true); _reference = new IntegrativeReference(kettellreport, _fe); } else { MessageBox.Show("Для выбранной характеристики необходим тест Кеттелла С \nОтметьте его галочной в списке тестов"); } break; case EnumPReferences.Prognoz: if (testresults.Count(test => test.testid == (int)EnumPTests.Prognoz) != 0) { testresult prognoztestresult = testresults.LastOrDefault(test => test.testid == (int)EnumPTests.Prognoz); ITestReport prognozreport = new PTestReport(_human, prognoztestresult, _ge, _fe, true); _reference = new PTestReference(prognozreport); } else { MessageBox.Show("Для выбранной характеристики необходим тест Прогноз 2 \nОтметьте его галочной в списке тестов"); } break; case EnumPReferences.Addictive: if (testresults.Count(test => test.testid == (int)EnumPTests.Addictive) != 0) { testresult addictivetestresult = testresults.LastOrDefault(test => test.testid == (int)EnumPTests.Addictive); ITestReport addictivereport = new ATestReport(_human, addictivetestresult, _ge, _fe, true); _reference = new ATestReference(addictivereport); } else { MessageBox.Show("Для выбранной характеристики необходим тест Аддиктивная склонность \nОтметьте его галочной в списке тестов"); } break; case EnumPReferences.NPNA: if (testresults.Count(test => test.testid == (int)EnumPTests.NPNA) != 0) { testresult addictivetestresult = testresults.LastOrDefault(test => test.testid == (int)EnumPTests.NPNA); ITestReport addictivereport = new NPNTestReport(_human, addictivetestresult, _ge, _fe, true); _reference = new NPNTestReference(addictivereport); } else { MessageBox.Show("Для выбранной характеристики необходим тест НПН-А \nОтметьте его галочной в списке тестов"); } break; case EnumPReferences.Leongard: if (testresults.Count(test => test.testid == (int)EnumPTests.Leongard) != 0) { testresult addictivetestresult = testresults.LastOrDefault(test => test.testid == (int)EnumPTests.Leongard); ITestReport addictivereport = new LTestReport(_human, addictivetestresult, _ge, _fe, true); _reference = new LTestReference(addictivereport); } else { MessageBox.Show("Для выбранной характеристики необходим тест Леонгарда \nОтметьте его галочной в списке тестов"); } break; } return(_reference); }