Projekt

Obecné

Profil

Stáhnout (5.72 KB) Statistiky
| Větev: | Tag: | Revize:
1 c137512e Oto Šťáva
#include "selectpatientdlg.h"
2
#include "ui_selectpatientdlg.h"
3
#include "../db_browser/dbaccess.h"
4
#include <QSqlQueryModel>
5
#include <QModelIndex>
6
#include <QModelIndexList>
7
#include <QAbstractItemModel>
8
#include <QDebug>
9
#include <QPushButton>
10
11
selectPatientDlg::selectPatientDlg(dbAccess *dbase, QWidget *parent) :
12
    QDialog(parent),
13
    ui(new Ui::selectPatientDlg)
14
{
15
    ui->setupUi(this);
16
17
    db = dbase;
18
19
    ui->usersTableView->setSelectionMode(QAbstractItemView::SingleSelection);
20
    ui->usersTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
21
22
    connect(ui->usersTableView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(patientSelected(const QModelIndex&)));
23
    connect(ui->nextSeriesBtn, SIGNAL(clicked()), this, SLOT(nextSeriesBtnClicked()));
24
25
    connect(ui->okBtn, SIGNAL(clicked()), this, SLOT(okClicked()));
26
    connect(ui->exitBtn, SIGNAL(clicked()), this, SLOT(reject()));
27
28
    QSqlQueryModel *model1 = new QSqlQueryModel;
29
    db->getPatientsQueryModel(model1);
30
    ui->usersTableView->setModel(model1);
31
    ui->usersTableView->horizontalHeader()->resizeSections(QHeaderView::Stretch);
32
33
    p_id = series = procedure_time = 0;
34
    p_name = p_surname = "";
35
36
    qualitySet = new QBarSet("Kvalita");
37
    qualityData = new QBarSeries();
38
    qualityData->append(qualitySet);
39
40
    QFont font;
41
    font.setPixelSize(18);
42
43
    chart = new QChart();
44
    chart->addSeries(qualityData);
45
46
    axisy = new QValueAxis();
47
    axisy->setRange(0.0, 100.0);
48
    axisy->setLabelsFont(font);
49
50
    chart->setAxisY(axisy, qualityData);
51
    chart->setTitle(tr("Graf kvality cvičení v poslední sérii procedur"));
52
53
    chart->setTitleFont(font);
54
    chart->setBackgroundVisible(false);
55
    chart->setMargins(QMargins(0,0,0,0));
56
    chart->legend()->hide();
57
    chart->setPlotAreaBackgroundBrush(QBrush(Qt::black));
58
    chart->setPlotAreaBackgroundVisible(true);
59
    graphView = new QChartView(chart);
60
    graphView->setMinimumSize(250,120);
61
    ui->verticalLayout->addWidget(graphView);
62
}
63
64
selectPatientDlg::~selectPatientDlg()
65
{
66
    delete ui;
67
}
68
69
//! Získání údajů o vybraném pacientovi
70
/*!
71
 * Funkce je použita pro získání všech potřebných údajů o právě vybraném pacientovi
72
 *
73
 * \param[out] *pid Identifikační číslo pacienta
74
 * \param[out] *indid Identifikační číslo příslušné indikace
75
 * \param[out] *name Jméno pacienta
76
 * \param[out] *surname Příjmení pacienta
77
 * \param[out] *series_no Pořadové číslo poslední série procedur
78
 * \param[out] *p_time Doba trvání jedné procedury
79
 * \param[out] *cname Údaje o křivce, kterou má pacient provádět
80
 */
81
void selectPatientDlg::getPatientInfo(int *pid, int  *indid, QString *name, QString *surname, int *series_no, int *p_time, QString *cname)
82
{
83
    *name = p_name;
84
    *surname = p_surname;
85
    *series_no = series;
86
    *p_time = procedure_time*60;
87
    *pid = p_id;
88
    *indid = ind_id;
89
    *cname = c_name;
90
}
91
92
//! Změna jazyka dialogu
93
/*!
94
 * Pokud se změní jazyk aplikace, funkce změní text v dialogu, aby odpovídal
95
 * nastavenému jazyku
96
 * \param *e Ukazatel na objekt, který obsahuje posílanou událost
97
*/
98
void selectPatientDlg::changeEvent(QEvent *e)
99
{
100
    QDialog::changeEvent(e);
101
    switch (e->type()) {
102
    case QEvent::LanguageChange:
103
        ui->retranslateUi(this);
104
        break;
105
    case QEvent::ActivationChange: {
106
        ui->usersTableView->horizontalHeader()->resizeSections(QHeaderView::Stretch);
107
        break;
108
    }
109
    default:
110
        break;
111
    }
112
}
113
114
//! Začátek nové série procedur
115
/*!
116
 * Pokud je v dialogovém okně stisknuto tlačítko "Nová série", volá se tato funkce. Funkce
117
 * zvýší pořadové číslo aktuální serie o jednu, tj. od příštího cvičení se cvičí nová série
118
 * procedur
119
 */
120
void selectPatientDlg::nextSeriesBtnClicked()
121
{
122
    series++;
123
    ui->selectedPatientText->setText(QString("Pacient %1 %2, série procedur číslo %3.").arg(p_name)
124
                                     .arg(p_surname)
125
                                     .arg(series));
126
127
}
128
129
//! Je voláno, pokud je z dialogového okna vybrán pacient
130
/*!
131
 * Je voláno, pokud je z dialogového okna vybrán pacient. Pokud je vybráno platné identifikační
132
 *  číslo pacienta, zobrazí se do grafu data o kvalitě cvičení porcedur z poslední série
133
 *
134
 * \param index Pořadové číslo vybrané řádky
135
 */
136
void selectPatientDlg::patientSelected(const QModelIndex &index)
137
{
138
    auto *select = ui->usersTableView->selectionModel();
139
    auto id_no = select->selectedRows(3).value(0).data().toString();
140
    ind_id = select->selectedRows(4).value(0).data().toInt();
141
    p_name = select->selectedRows(0).value(0).data().toString();
142
    p_surname = select->selectedRows(1).value(0).data().toString();
143
    p_id = db->getPatientId(id_no);
144
    series = db->getLastSeriesNo(p_id);
145
    db->getIndicationInfo(ind_id, &procedure_time, &c_name);
146
    ui->selectedPatientText->setText(QString("Pacient %1 %2, série procedur číslo %3.").arg(p_name)
147
                                     .arg(p_surname)
148
                                     .arg(series));
149
    if (p_id != 0) {
150
        QList<int> avg;
151
        db->getSeriesResultAvg(p_id, series, &avg);
152
        qualitySet->remove(0,qualitySet->count());
153
        for(auto &val: avg)
154
            qualitySet->append(val);
155
        chart->removeSeries(qualityData);
156
        chart->addSeries(qualityData);
157
        chart->setAxisY(axisy, qualityData);
158
    }
159
}
160
161
//! Je voláno, pokud je stisknuto tlačítko pro opuštění dialogu
162
/*!
163
 * Je voláno, pokud je stisknuto tlačítko pro opuštění dialogu, zkontroluje se, zda je
164
 * vybraný nějaký pacient. Pokud ano, dialog se ukončí s návratvým kódem OK
165
 */
166
void selectPatientDlg::okClicked()
167
{
168
    if (p_id != 0) {
169
        accept();
170
    } else {
171
        qDebug() << "Err - no patient, or indication selected";
172
    }
173
}