-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtableopt.cpp
More file actions
210 lines (177 loc) · 9.33 KB
/
tableopt.cpp
File metadata and controls
210 lines (177 loc) · 9.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#include "tableopt.h"
#include "ui_tableopt.h"
TableOpt::TableOpt(QWidget *parent) :
QDialog(parent),
ui(new Ui::TableOpt)
{
ui->setupUi(this);
this->setWindowFlags(Qt::Window | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint);
myType = "None";
connect(ui->buttonSearch, SIGNAL(clicked()), this, SLOT(search()));
connect(ui->lineSearch, SIGNAL(returnPressed()), this, SLOT(search()));
ui->buttonSearch->setIcon(QIcon(":/icons/Icons/search.png"));
ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Добавить"));
ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Отмена"));
ui->buttonBox->button(QDialogButtonBox::Close)->setText(tr("Закрыть"));
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
}
// ============================================================
TableOpt::~TableOpt()
{
delete ui;
}
// ============================================================
void TableOpt::on_lineSearch_textChanged(const QString &arg1)
{
ui->buttonSearch->setEnabled(true);
}
// ============================================================
void TableOpt::search()
{
QString serchStr = ui->lineSearch->text().simplified().replace(QRegularExpression("-{2,}"), "-");
QString strQuery = baseQuery.replace(";", " ") + forSearch + " `" + ui->searchParam->currentText() + "` LIKE '%" + serchStr + "%'";
emit signalQuery(ui->tableWidget, strQuery, mainDB);
}
// ============================================================
QTableWidget* TableOpt::letTable()
{
return ui->tableWidget;
}
// ============================================================
QComboBox* TableOpt::letSearchBox()
{
return ui->searchParam;
}
// ============================================================
void TableOpt::setType(QString type)
{
myType.clear();
baseQuery.clear();
forSearch.clear();
myType = type;
mainDB = true;
ui->deleteButton->hide();
ui->insertButton->hide();
if (ui->buttonBox->button(QDialogButtonBox::Ok)->isHidden())
{
ui->buttonBox->button(QDialogButtonBox::Ok)->show();
ui->buttonBox->button(QDialogButtonBox::Cancel)->show();
ui->buttonBox->button(QDialogButtonBox::Close)->hide();
}
if (ui->searchParam->isHidden())
{
ui->searchParam->show();
ui->buttonSearch->show();
ui->lineSearch->show();
}
if (myType == "Ass")
{
this->setWindowTitle(tr("Объединения"));
ui->comments->setText(tr("Выберите объединение:"));
baseQuery = "SELECT `ID`, `Название`, `Отдел`, `Описание` FROM Объединения;";
forSearch = "WHERE";
}
if (myType == "Stud")
{
this->setWindowTitle(tr("Учащиеся"));
ui->comments->setText(tr("Выберите одного или нескольких учащихся:"));
baseQuery = "SELECT `ID`, `Фамилия`, `Имя`, `Отчество`, `Тип документа`, `Номер документа`, `Пол`, `Дата рождения` FROM Учащиеся;";
forSearch = "WHERE";
}
if (myType == "Teach")
{
this->setWindowTitle(tr("Преподаватель"));
ui->comments->setText(tr("Выберите преподавателя:"));
baseQuery = "SELECT `ID`, `Фамилия`, `Имя`, `Отчество`, `Отдел` FROM Преподаватели;";
forSearch = "WHERE";
}
if (myType == "Direct")
{
this->setWindowTitle(tr("Направленность"));
ui->searchParam->hide();
ui->buttonSearch->hide();
ui->lineSearch->hide();
ui->comments->setText(tr("Выберите направленность:"));
baseQuery = "SELECT `ID`, `Название` FROM Направленности;";
forSearch = "WHERE";
}
if (myType == "tempDB")
{
this->setWindowTitle(tr("Учащиеся - самозапись"));
ui->comments->setText(tr("Выберите учащегося и действие:"));
ui->buttonBox->button(QDialogButtonBox::Ok)->hide();
ui->buttonBox->button(QDialogButtonBox::Cancel)->hide();
ui->buttonBox->button(QDialogButtonBox::Close)->show();
ui->deleteButton->show();
ui->insertButton->show();
mainDB = false;
baseQuery = "SELECT Запись.`Объединение` `Объединение`, Учащийся.`Фамилия` `Фамилия`, Учащийся.`Имя` `Имя`, Учащийся.`Отчество` `Отчество`, Учащийся.`Тип документа` `Тип документа`, Учащийся.`Номер документа` `Номер документа`, Учащийся.`Пол` `Пол`, Учащийся.`Дата рождения` `Дата рождения`, Учащийся.`Район школы` `Район школы`, Учащийся.`Школа` `Школа`, Учащийся.`Класс` `Класс`, Учащийся.`Родители` `Родители`, Учащийся.`Домашний адрес` `Домашний адрес`, Учащийся.`Телефон` `Телефон`, Учащийся.`e-mail` `e-mail`, Учащийся.`Дата заявления` `Дата заявления` FROM Учащийся LEFT OUTER JOIN Запись ON (Учащийся.`Тип документа` = Запись.`Тип документа` AND Учащийся.`Номер документа` = Запись.`Номер документа`);";
forSearch = "WHERE";
}
}
// ============================================================
void TableOpt::on_insertButton_clicked()
{
int row = ui->tableWidget->currentRow();
if (row > -1) // Если есть выделенные строки
{
QStringList qsl;
QString strQuery;
for (QTableWidgetSelectionRange selectionRange : ui->tableWidget->selectedRanges())
{
if (selectionRange.rowCount() > 0)
{
for (int row = selectionRange.topRow(); row <= selectionRange.bottomRow(); row++)
{
// `Фамилия`, `Имя`, `Отчество`,`Тип документа`, `Номер документа`, `Пол`, `Дата рождения`, `Район школы`, `Школа`, `Класс`, `Родители`, `Домашний адрес`, `Телефон`, `e-mail`, `Дата заявления`
strQuery.append("INSERT IGNORE INTO Учащиеся (`Фамилия`, `Имя`, `Отчество`,`Тип документа`, `Номер документа`, `Пол`, `Дата рождения`, `Район школы`, `Школа`, `Класс`, `Родители`, `Домашний адрес`, `Телефон`, `e-mail`, `Дата заявления`) VALUES (");
for (int i = 1; i<ui->tableWidget->columnCount(); i++)
if (i == 7 || i == 15)
strQuery.append(" " + getDateToTable(ui->tableWidget->item(row, i)->text()) + ",");
else
strQuery.append(" '" + ui->tableWidget->item(row, i)->text() + "',");
strQuery.resize(strQuery.size()-1);
strQuery.append(");");
qsl.append(strQuery);
strQuery.clear();
strQuery.append("INSERT IGNORE INTO Нагрузка (`ID учащегося`, `ID группы`) VALUES ((SELECT `ID` FROM Учащиеся WHERE `Тип документа` = '" + ui->tableWidget->item(row, 4)->text() + "' AND `Номер документа` = '" + ui->tableWidget->item(row, 5)->text() + "'), (SELECT Группа.`ID` FROM Группа, Объединение WHERE Группа.`ID объединения` = Объединение.`ID` AND Объединение.`Название` = '" +ui->tableWidget->item(row, 0)->text() + "' AND Группа.`Номер` = 'Без группы'));");
qsl.append(strQuery);
strQuery.clear();
}
}
}
qsl.removeDuplicates();
emit signalQueries(qsl, true);
on_deleteButton_clicked();
emit signalQuery(ui->tableWidget, baseQuery, mainDB);
}
}
void TableOpt::on_deleteButton_clicked()
{
int row = ui->tableWidget->currentRow();
if (row > -1) // Если есть выделенные строки
{
QStringList qsl;
for (QTableWidgetSelectionRange selectionRange : ui->tableWidget->selectedRanges())
{
if (selectionRange.rowCount() > 0)
for (int row = selectionRange.topRow(); row <= selectionRange.bottomRow(); row++)
{
qsl.append("DELETE FROM Учащийся WHERE `Тип документа` = '" + ui->tableWidget->item(row, 4)->text() + "' AND `Номер документа` = '" + ui->tableWidget->item(row, 5)->text() + "'");
}
}
emit signalQueries(qsl, false);
emit signalQuery(ui->tableWidget, baseQuery, mainDB);
}
}
QString TableOpt::getDateToTable(QString str)
{
QDate date = QDate::fromString(str, "dd.MM.yyyy");
if (date.isValid())
{
str.clear();
str.append("'" + date.toString(Qt::ISODate) + "'");
return str;
}
return "NULL";
}