1
|
#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
|
}
|