Files
RRJServer/DB_IaT/InstructorsAndTrainees/trainees/editortrainees.cpp
2024-11-01 11:45:13 +03:00

280 lines
8.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include <QMessageBox>
#include "editortrainees.h"
#include "ui_editortrainees.h"
#include "dialogeditgroup.h"
#include "dialogedittrainee.h"
EditorTrainees::EditorTrainees(DataBaseTrainees* db, bool adminMode, QWidget *parent) :
//QDialog(parent),
TraineesView(db, CommonView::TypeView::control, parent),
ui(new Ui::EditorTrainees)
{
ui->setupUi((QDialog*)this);
preparationTreeWidget(ui->treeWidget);
setNotLoggedInVisible(true);
loadTraineesFromDB();
}
EditorTrainees::~EditorTrainees()
{
delete ui;
}
void EditorTrainees::on_btnNewGroup_clicked()
{
QString nameGroup = dbTrainees->newGroup();
loadTraineesFromDB();
setCurrentGroup(nameGroup);
}
void EditorTrainees::on_btnDeleteGroup_clicked()
{
QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem();
if(treeItemCurrent != nullptr)
{
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
if(treeItemParent == nullptr)
{//Выбрана группа
QString name = treeItemCurrent->text(0);
if(dbTrainees->deleteGroup(name))
{//Удалено
loadTraineesFromDB();
}
else
QMessageBox::critical(this, tr("Editing error!"), tr("The group is not empty.\nIt is not possible to delete a non-empty group."));
}
}
}
void EditorTrainees::on_btnNewTrainee_clicked()
{
QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem();
if(treeItemCurrent != nullptr)
{
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
if(treeItemParent == nullptr)
{//Выбрана группа. Можно добавить Обучаемого
QString nameGroup = treeItemCurrent->text(0);
dbTrainees->newTrainee(nameGroup);
loadTraineesFromDB();
setCurrentGroup(nameGroup);
}
}
}
void EditorTrainees::on_btnDeleteTrainee_clicked()
{
QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem();
if(treeItemCurrent != nullptr)
{
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
if(treeItemParent != nullptr)
{//Выбран обучаемый
QString name = treeItemCurrent->text(0);
QString nameGroup = treeItemParent->text(0);
if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok)
{
dbTrainees->deleteTrainee(name);
loadTraineesFromDB();
setCurrentGroup(nameGroup);
}
}
}
}
void EditorTrainees::on_btnToOrFromArchiveTrainee_clicked()
{
QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem();
if(treeItemCurrent != nullptr)
{
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
if(treeItemParent != nullptr)
{//Выбран обучаемый
QString name = treeItemCurrent->text(0);
if(dbTrainees->isArchived(name))
{//Архивный
dbTrainees->fromeArchiveTrainee(name);
loadTraineesFromDB();
setCurrentTrainee(name);
}
else
{//Не Архивный
dbTrainees->toArchiveTrainee(name);
if(!archiveVisible)
ui->btnArchive->click();
loadTraineesFromDB();
setCurrentTrainee(name);
}
}
}
}
void EditorTrainees::on_btnEdit_clicked()
{
QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem();
if(treeItemCurrent == nullptr)
return;
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
if(treeItemParent == nullptr)
{//Выбрана группа
QString nameGroup = treeItemCurrent->text(0);
DialogEditGroup dlg(this);
dlg.setName(nameGroup);
switch( dlg.exec() )
{
case QDialog::Accepted:
{
if(dbTrainees->editGroup(nameGroup, dlg.getName()))
{
loadTraineesFromDB();
setCurrentGroup(dlg.getName());
}
else
QMessageBox::critical(this, tr("Editing error!"),
tr("An existing group name has been entered.\nThe changes will not be accepted."));
break;
}
case QDialog::Rejected:
break;
default:
break;
}
}
else
{//Выбран обучаемый
QString name = treeItemCurrent->text(0);
DialogEditTrainee dlg(this);
dlg.setTrainee(dbTrainees->getTrainee(name));
switch( dlg.exec() )
{
case QDialog::Accepted:
{
if(dbTrainees->editTrainee(name, dlg.getTrainee()))
{
loadTraineesFromDB();
setCurrentTrainee(dlg.getTrainee().getName());
}
else
QMessageBox::critical(this, tr("Editing error!"),
tr("An existing trainee's name or login has been entered.\nThe changes will not be accepted."));
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)
{//Выбрана группа
ui->btnNewGroup->setEnabled(true);
ui->btnDeleteGroup->setEnabled(true);
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
{//Выбран обучаемый
QString name = current->text(0);
ui->btnNewGroup->setEnabled(false);
ui->btnDeleteGroup->setEnabled(false);
ui->btnNewTrainee->setEnabled(false);
if(dbTrainees->isArchived(name))
{//Архивный
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(QString nameGroup)
{
for(int i = 0; i < treeWidget->topLevelItemCount(); i++)
{
QTreeWidgetItem * item = treeWidget->topLevelItem(i);
if(item != nullptr)
if(item->text(0) == nameGroup)
{
treeWidget->setCurrentItem(item);
break;
}
}
}
void EditorTrainees::setCurrentTrainee(QString name)
{
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) == name)
{
treeWidget->setCurrentItem(itemChild);
break;
}
}//for (int j = 0; j < item->childCount(); j++)
}
}//for(int i = 0; i < treeWidget->topLevelItemCount(); i++)
}