mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
341 lines
10 KiB
C++
341 lines
10 KiB
C++
#include <QMessageBox>
|
||
#include "editortrainees.h"
|
||
#include "ui_editortrainees.h"
|
||
#include "dialogeditgroup.h"
|
||
#include "dialogedittrainee.h"
|
||
|
||
EditorTrainees::EditorTrainees(DataBaseTrainees* db, bool adminMode, QWidget *parent) :
|
||
TraineesView(db, CommonView::TypeView::control, adminMode, parent),
|
||
ui(new Ui::EditorTrainees)
|
||
{
|
||
ui->setupUi((QDialog*)this);
|
||
|
||
preparationTreeWidget(ui->treeWidget);
|
||
setNotLoggedInVisible(true);
|
||
loadTraineesFromDB();
|
||
}
|
||
|
||
EditorTrainees::~EditorTrainees()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
void EditorTrainees::on_btnNewGroup_clicked()
|
||
{
|
||
int id = dbTrainees->newGroup();
|
||
loadTraineesFromDB();
|
||
setCurrentGroup(id);
|
||
}
|
||
|
||
void EditorTrainees::on_btnDeleteGroup_clicked()
|
||
{
|
||
QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem();
|
||
|
||
if(treeItemCurrent != nullptr)
|
||
{
|
||
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
|
||
if(treeItemParent == nullptr)
|
||
{//Выбрана группа
|
||
int id_group = treeItemCurrent->text(0).toInt();
|
||
|
||
if(dbTrainees->getListTraineesInGroup(id_group).count() > 0)
|
||
{
|
||
QMessageBox::critical(this, tr("Editing error!"), tr("The group is not empty.\nIt is not possible to delete a non-empty group."));
|
||
return;
|
||
}
|
||
else
|
||
{//Пустая группа
|
||
if(int id = dbTrainees->deleteGroup(id_group))
|
||
{//Удалено
|
||
loadTraineesFromDB();
|
||
}
|
||
else
|
||
{
|
||
//Ошибка удаления
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void EditorTrainees::on_btnNewTrainee_clicked()
|
||
{
|
||
QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem();
|
||
|
||
if(treeItemCurrent != nullptr)
|
||
{
|
||
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
|
||
if(treeItemParent == nullptr)
|
||
{//Выбрана группа. Можно добавить Обучаемого
|
||
int id_group = treeItemCurrent->text(0).toInt();
|
||
if(int id = dbTrainees->newTrainee(id_group))
|
||
{
|
||
loadTraineesFromDB();
|
||
setCurrentGroup(id_group);
|
||
}
|
||
else
|
||
{
|
||
//Ошибка добавления
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void EditorTrainees::on_btnDeleteTrainee_clicked()
|
||
{
|
||
QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem();
|
||
|
||
if(treeItemCurrent != nullptr)
|
||
{
|
||
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
|
||
if(treeItemParent != nullptr)
|
||
{//Выбран обучаемый
|
||
|
||
int id_trainee = treeItemCurrent->text(0).toInt();
|
||
int id_group = treeItemParent->text(0).toInt();
|
||
|
||
if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok)
|
||
{
|
||
if(int id = dbTrainees->deleteTrainee(id_trainee))
|
||
{//Удалено
|
||
loadTraineesFromDB();
|
||
setCurrentGroup(id_group);
|
||
}
|
||
else
|
||
{
|
||
//Ошибка удаления
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void EditorTrainees::on_btnToOrFromArchiveTrainee_clicked()
|
||
{
|
||
QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem();
|
||
|
||
if(treeItemCurrent != nullptr)
|
||
{
|
||
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
|
||
if(treeItemParent != nullptr)
|
||
{//Выбран обучаемый
|
||
|
||
int id_trainee = treeItemCurrent->text(0).toInt();
|
||
|
||
Trainee trainee = dbTrainees->getTrainee(id_trainee);
|
||
|
||
if(trainee.getArchived())
|
||
{//Архивный
|
||
trainee.setArchived(false);
|
||
if(int id = dbTrainees->editTrainee(trainee))
|
||
{//Отредактировано
|
||
loadTraineesFromDB();
|
||
setCurrentTrainee(id);
|
||
}
|
||
else
|
||
{
|
||
//Ошибка редактирования
|
||
}
|
||
}
|
||
else
|
||
{//Не Архивный
|
||
trainee.setArchived(true);
|
||
if(int id = dbTrainees->editTrainee(trainee))
|
||
{//Отредактировано
|
||
if(!archiveVisible)
|
||
ui->btnArchive->click();
|
||
|
||
loadTraineesFromDB();
|
||
setCurrentTrainee(id);
|
||
}
|
||
else
|
||
{
|
||
//Ошибка редактирования
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void EditorTrainees::on_btnEdit_clicked()
|
||
{
|
||
QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem();
|
||
|
||
if(treeItemCurrent == nullptr)
|
||
return;
|
||
|
||
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
|
||
if(treeItemParent == nullptr)
|
||
{//Выбрана группа
|
||
|
||
int id_group = treeItemCurrent->text(0).toInt();
|
||
|
||
DialogEditGroup dlg(this);
|
||
dlg.setGroup(dbTrainees->getGroup(id_group));
|
||
|
||
switch( dlg.exec() )
|
||
{
|
||
case QDialog::Accepted:
|
||
{
|
||
if(int id = dbTrainees->editGroup(dlg.getGroup()))
|
||
{//Отредактировано
|
||
loadTraineesFromDB();
|
||
setCurrentGroup(id);
|
||
}
|
||
else
|
||
{
|
||
//Ошибка редактирования
|
||
}
|
||
|
||
break;
|
||
}
|
||
case QDialog::Rejected:
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{//Выбран обучаемый
|
||
|
||
int id_trainee = treeItemCurrent->text(0).toInt();
|
||
|
||
DialogEditTrainee dlg(this);
|
||
dlg.setTrainee(dbTrainees->getTrainee(id_trainee));
|
||
|
||
switch( dlg.exec() )
|
||
{
|
||
case QDialog::Accepted:
|
||
{
|
||
if(int id = dbTrainees->editTrainee(dlg.getTrainee()))
|
||
{//Отредактировано
|
||
loadTraineesFromDB();
|
||
setCurrentTrainee(id);
|
||
}
|
||
else
|
||
{
|
||
//Ошибка редактирования
|
||
}
|
||
|
||
break;
|
||
}
|
||
case QDialog::Rejected:
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
void EditorTrainees::on_btnArchive_clicked()
|
||
{
|
||
bool state = ui->btnArchive->isChecked();
|
||
setArchiveVisible(state);
|
||
loadTraineesFromDB();
|
||
}
|
||
|
||
void EditorTrainees::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
|
||
{
|
||
//Определяем доступность и функционал кнопок для выбранного элемента
|
||
|
||
if(current == nullptr)
|
||
return;
|
||
|
||
QTreeWidgetItem *treeItemParent = current->parent();
|
||
if(treeItemParent == nullptr)
|
||
{//Выбрана группа
|
||
int id_group = current->text(0).toInt();
|
||
|
||
if(adminMode)
|
||
{
|
||
ui->btnNewGroup->setEnabled(true);
|
||
|
||
if(dbTrainees->getListTraineesInGroup(id_group).count() > 0)
|
||
{//Группа не пуста
|
||
ui->btnDeleteGroup->setEnabled(false);
|
||
}
|
||
else
|
||
{//Группа пуста
|
||
ui->btnDeleteGroup->setEnabled(true);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
ui->btnNewGroup->setEnabled(false);
|
||
ui->btnDeleteGroup->setEnabled(false);
|
||
}
|
||
|
||
ui->btnNewTrainee->setEnabled(true);
|
||
ui->btnDeleteTrainee->setEnabled(false);
|
||
ui->btnToOrFromArchiveTrainee->setEnabled(false);
|
||
ui->btnEdit->setEnabled(true);
|
||
ui->btnArchive->setEnabled(true);
|
||
|
||
ui->btnToOrFromArchiveTrainee->setText(tr("To archive"));
|
||
ui->btnToOrFromArchiveTrainee->setIcon(QIcon(QStringLiteral(":/icons/traineeArchive.png")));
|
||
}
|
||
else
|
||
{//Выбран обучаемый
|
||
int id_trainee = current->text(0).toInt();
|
||
|
||
ui->btnNewGroup->setEnabled(false);
|
||
ui->btnDeleteGroup->setEnabled(false);
|
||
ui->btnNewTrainee->setEnabled(false);
|
||
|
||
if(dbTrainees->isArchived(id_trainee))
|
||
{//Архивный
|
||
ui->btnDeleteTrainee->setEnabled(true);
|
||
|
||
ui->btnToOrFromArchiveTrainee->setText(tr("From archive"));
|
||
ui->btnToOrFromArchiveTrainee->setIcon(QIcon(QStringLiteral(":/icons/traineeFromArchive.png")));
|
||
}
|
||
else
|
||
{//Не Архивный
|
||
ui->btnDeleteTrainee->setEnabled(false);
|
||
|
||
ui->btnToOrFromArchiveTrainee->setText(tr("To archive"));
|
||
ui->btnToOrFromArchiveTrainee->setIcon(QIcon(QStringLiteral(":/icons/traineeArchive.png")));
|
||
}
|
||
|
||
ui->btnToOrFromArchiveTrainee->setEnabled(true);
|
||
|
||
ui->btnEdit->setEnabled(true);
|
||
ui->btnArchive->setEnabled(true);
|
||
}
|
||
}
|
||
|
||
void EditorTrainees::setCurrentGroup(int id)
|
||
{
|
||
for(int i = 0; i < treeWidget->topLevelItemCount(); i++)
|
||
{
|
||
QTreeWidgetItem * item = treeWidget->topLevelItem(i);
|
||
if(item != nullptr)
|
||
if(item->text(0).toInt() == id)
|
||
{
|
||
treeWidget->setCurrentItem(item);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
void EditorTrainees::setCurrentTrainee(int id)
|
||
{
|
||
for(int i = 0; i < treeWidget->topLevelItemCount(); i++)
|
||
{
|
||
QTreeWidgetItem * item = treeWidget->topLevelItem(i);
|
||
if(item != nullptr)
|
||
{
|
||
for (int j = 0; j < item->childCount(); j++)
|
||
{
|
||
QTreeWidgetItem * itemChild = item->child(j);
|
||
if(itemChild != nullptr)
|
||
if(itemChild->text(0).toInt() == id)
|
||
{
|
||
treeWidget->setCurrentItem(itemChild);
|
||
break;
|
||
}
|
||
}//for (int j = 0; j < item->childCount(); j++)
|
||
}
|
||
}//for(int i = 0; i < treeWidget->topLevelItemCount(); i++)
|
||
}
|