Ejemplo n.º 1
0
        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("Нужно выбрать хоть один тест");
            }
        }
Ejemplo n.º 2
0
 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));
 }
Ejemplo n.º 3
0
        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("Нужно выбрать хоть один тест");
            }
        }
Ejemplo n.º 4
0
        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();
                    }
                }
            }
        }
Ejemplo n.º 5
0
    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);
    }
Ejemplo n.º 6
0
    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);
    }
Ejemplo n.º 7
0
 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));
 }
Ejemplo n.º 8
0
    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);
    }
Ejemplo n.º 9
0
    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);
    }
Ejemplo n.º 10
0
        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();
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
 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()));
 }
Ejemplo n.º 14
0
 void btn_addtobase_Click(object sender, EventArgs e)
 {
     _testresult = _recogform.TestResult;
     if (_printing == true)
     {
         this.PrintReference();
     }
     this.Start();
 }
Ejemplo n.º 15
0
        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");
        }
Ejemplo n.º 16
0
        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));
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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();
        }
Ejemplo n.º 19
0
        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();
        }
Ejemplo n.º 20
0
        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();
        }
Ejemplo n.º 21
0
        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();
        }
Ejemplo n.º 22
0
        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");
        }
Ejemplo n.º 23
0
    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);
    }
Ejemplo n.º 24
0
        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));
        }
Ejemplo n.º 25
0
 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));
 }
Ejemplo n.º 26
0
        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);
        }
Ejemplo n.º 27
0
 public IScalesCollection(pBaseEntities ge, testresult testresult, human human)
 {
     _listscales = new List <IScale>();
 }
Ejemplo n.º 28
0
        /// <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();
        }
Ejemplo n.º 29
0
        /// <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);
        }