PSQL 01.11.2024

This commit is contained in:
krivoshein
2024-11-01 11:45:13 +03:00
parent 024cd38bd6
commit 9422c5e257
274 changed files with 3223 additions and 3102 deletions

View File

@@ -0,0 +1,279 @@
#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++)
}