before interface 13.11.2024

This commit is contained in:
krivoshein
2024-11-13 09:54:35 +03:00
parent f4ca58ce91
commit 61aaac2b1c
62 changed files with 1233 additions and 1047 deletions

View File

@@ -2,23 +2,10 @@
#include <QApplication>
#include <QMessageBox>
DataBaseTrainees::DataBaseTrainees(DataBaseLMS* dbLMS)
DataBaseTrainees::DataBaseTrainees(DataBaseLMS* dbLMS):
adminMode(false)
{
listOfColorGroup.append(QColor(170, 190, 170));
listOfColorGroup.append(QColor(180, 180, 220));
listOfColorGroup.append(QColor(240, 220, 230));
listOfColorGroup.append(QColor(85, 170, 127));
listOfColorGroup.append(QColor(170, 115, 120));
listOfColorGroup.append(QColor(110, 160, 170));
listOfColorGroup.append(QColor(110, 170, 130));
listOfColorGroup.append(QColor(170, 170, 120));
listOfColorGroup.append(QColor(160, 170, 45));
listOfColorGroup.append(QColor(170, 140, 60));
listOfColorGroup.append(QColor(200, 200, 200));
this->dbLMS = dbLMS;
LoadTraineesGroupsPSQL();
}
DataBaseTrainees::~DataBaseTrainees()
@@ -26,430 +13,181 @@ DataBaseTrainees::~DataBaseTrainees()
}
void DataBaseTrainees::LoadTraineesGroupsPSQL()
void DataBaseTrainees::transactionBegin()
{
listOfTrainees.clear();
listOfGroups.clear();
dbLMS->transactionBegin();
}
listOfTrainees = dbLMS->selectAllTrainees();
listOfGroups = dbLMS->selectAllGroups();
QApplication::beep();
void DataBaseTrainees::transactionEnd()
{
dbLMS->transactionEnd();
}
bool DataBaseTrainees::AuthorizationTrainee(QString login, QString password, QString classroom_name, QString computer_name)
{
//Обучаемые
for(int i = 0; i < listOfTrainees.count(); i++)
if(! dbLMS->transactionBegin())
return false;
if(int id = dbLMS->selectTraineeID(login, password))
{
if(listOfTrainees[i].getArchived())
continue;
if(listOfTrainees[i].getLogin() == login && listOfTrainees[i].getPassword() == password)
{
Trainee trainee = listOfTrainees[i];
trainee.setLoggedIn(true);
//trainee.setLearnClass(learnClass);
//trainee.setComputer(computer);
int id = dbLMS->updateTrainee(trainee);
if(id)
{
LoadTraineesGroupsPSQL();
return true;
}
else
return false;
}
if(dbLMS->updateTraineeLoggedIn(id, true))
return dbLMS->transactionEnd();
}
dbLMS->transactionEnd();
return false;
}
bool DataBaseTrainees::deAuthorizationTrainee(QString login)
{
//Обучаемые
for(int i = 0; i < listOfTrainees.count(); i++)
if(! dbLMS->transactionBegin())
return false;
if(int id = dbLMS->selectTraineeID(login))
{
if(listOfTrainees[i].getArchived())
continue;
if(listOfTrainees[i].getLogin() == login)
{
Trainee trainee = listOfTrainees[i];
trainee.setLoggedIn(false);
//trainee.setLearnClass(QStringLiteral(""));
//trainee.setComputer(QStringLiteral(""));
int id = dbLMS->updateTrainee(trainee);
if(id)
{
LoadTraineesGroupsPSQL();
return true;
}
else
return false;
}
if(dbLMS->updateTraineeLoggedIn(id, false))
return dbLMS->transactionEnd();
}
dbLMS->transactionEnd();
return false;
}
/*
void DataBaseTrainees::setTasks(QString login, QStringList tasks)
QList<Task> DataBaseTrainees::getTasks(int id)
{
//Обучаемые
for(int i = 0; i < listOfTrainees.count(); i++)
{
if(listOfTrainees[i].getLogin() == login)
listOfTrainees[i].setTasks(tasks);
}
}*/
QStringList DataBaseTrainees::getTasks(QString login)
{
QStringList tasksStrList;
//Обучаемые
for(int i = 0; i < listOfTrainees.count(); i++)
{
if(listOfTrainees[i].getLogin() == login)
{
QList<Task> tasks = listOfTrainees[i].getTasks();
for(Task task: tasks)
{
tasksStrList.append(task.getName());
}
}
}
return tasksStrList;
return dbLMS->selectTasksOfTrainee(id);
}
QString DataBaseTrainees::getNameTraineeOnComputer(QString computer_name)
{
/*
for(Trainee trainee : listOfTrainees)
{
if(trainee.getComputer().getName() == computer_name)
return trainee.getName();
}
}*/
return QString(QStringLiteral(""));
}
Trainee DataBaseTrainees::getTraineeOnComputer(QString computer_name)
{
/*
for(Trainee trainee : listOfTrainees)
{
if(trainee.getComputer().getName() == computer_name)
return trainee;
}
}*/
return Trainee();
}
QString DataBaseTrainees::getNameTraineeByLogin(QString login)
{
/*
for(Trainee trainee : listOfTrainees)
{
if(trainee.getLogin() == login)
return trainee.getName();
}
}*/
return QString(QStringLiteral(""));
}
/*
QColor DataBaseTrainees::getColorGroupByLogin(QString login)
{
QString nameTrainee = getNameTraineeByLogin(login);
Trainee trainee = getTrainee(nameTrainee);
QString nameGroup = trainee.getGroup();
Group group = getGroup(nameGroup);
return getColorGroup(group.getColor());
}*/
QList<Trainee> DataBaseTrainees::getListTraineesInGroup(int id)
{
QList<Trainee> listTrainees;
/*
for(Trainee trainee : listOfTrainees)
{
if(trainee.getGroup().getID() == id)
listTrainees.append(trainee);
}
*/
return listTrainees;
}
QList<Group> DataBaseTrainees::getListGroups()
{
return listOfGroups;
return dbLMS->selectAllGroups();
}
/*
QColor DataBaseTrainees::getColorGroup(Group::ColorGroup numColor)
{
if(numColor > listOfColorGroup.count() - 1)
return listOfColorGroup.at(Group::ColorGroup::colorAther);
return listOfColorGroup.at(numColor);
}*/
QList<Trainee> DataBaseTrainees::getListTrainees()
{
return dbLMS->selectAllTrainees();
}
Trainee DataBaseTrainees::getTrainee(int id)
{
//Обучаемые
for(int i = 0; i < listOfTrainees.count(); i++)
{
if(listOfTrainees[i].getID() == id)
return listOfTrainees[i];
}
return Trainee();
return dbLMS->selectTrainee(id);
}
Group DataBaseTrainees::getGroup(int id)
{
//Группы
for(int i = 0; i < listOfGroups.count(); i++)
{
if(listOfGroups[i].getID() == id)
return listOfGroups[i];
}
return Group();
return dbLMS->selectGroup(id);
}
int DataBaseTrainees::newGroup()
{
Group group;
group.setName(generateDefaultNameGroup());
int id = dbLMS->insertGroup(group);
if(id)
{
LoadTraineesGroupsPSQL();
return id;
}
else
return 0;
return dbLMS->insertGroup();
}
int DataBaseTrainees::deleteGroup(int id)
{
//Группы
for(int i = 0; i < listOfGroups.count(); i++)
{
if(listOfGroups[i].getID() == id)
{
int id_del = dbLMS->deleteGroup(id);
if(id_del)
{
LoadTraineesGroupsPSQL();
return id_del;
}
else
return 0;
}
}
return 0;
return dbLMS->deleteGroup(id);
}
int DataBaseTrainees::editGroup(Group group)
{
//Группы
for(int i = 0; i < listOfGroups.count(); i++)
//Проверка дублирования имени
QList<Group> listGroups = dbLMS->selectAllGroups();
for(Group exist_group : listGroups)
{
if(listOfGroups[i].getID() == group.getID())
{
if(!checkExistNameGroup(group.getName()) || group.getName() == listOfGroups[i].getName())
{
int id = dbLMS->updateGroup(group);
if(id)
{
LoadTraineesGroupsPSQL();
return id;
}
else
return 0;
}
else
{
QMessageBox::critical(nullptr, tr("Editing error!"),
tr("An existing group name has been entered.\nThe changes will not be accepted."));
return 0;
}
if(group.getName() == exist_group.getName() && group.getID() != exist_group.getID())
{//Имя уже существует
QMessageBox::critical(nullptr, tr("Editing error!"),
tr("An existing group name has been entered."));
return 0;
}
}
return 0;
return dbLMS->updateGroup(group);
}
int DataBaseTrainees::newTrainee(int id_group)
{
Trainee trainee;
Group group;
group.setID(id_group);
trainee.setGroup(group);
trainee.setName(generateDefaultNameTrainee());
trainee.setLogin(generateDefaultLoginTrainee());
trainee.setPassword(QStringLiteral("<password>"));
trainee.setArchived(false);
trainee.setLoggedIn(false);
int id = dbLMS->insertTrainee(trainee);
if(id)
{
LoadTraineesGroupsPSQL();
return id;
}
else
return 0;
return dbLMS->insertTrainee(id_group);
}
int DataBaseTrainees::deleteTrainee(int id)
{
//Обучаемые
for(int i = 0; i < listOfTrainees.count(); i++)
{
if(listOfTrainees[i].getID() == id)
{
int id_del = dbLMS->deleteTrainee(id);
if(id_del)
{
LoadTraineesGroupsPSQL();
return id_del;
}
return 0;
}
}
return 0;
return dbLMS->deleteTrainee(id);
}
int DataBaseTrainees::editTrainee(Trainee trainee)
{
//Обучаемые
for(int i = 0; i < listOfTrainees.count(); i++)
//Проверка дублирования логина и имени
QList<Trainee> listTrainees = dbLMS->selectAllTrainees();
for(Trainee exist_trainee : listTrainees)
{
if(listOfTrainees[i].getID() == trainee.getID())
{
if( (!checkExistNameTrainee(trainee.getName()) || trainee.getName() == listOfTrainees[i].getName()) &&
(!checkExistLoginTrainee(trainee.getLogin()) || trainee.getLogin() == listOfTrainees[i].getLogin()) )
{
int id = dbLMS->updateTrainee(trainee);
if(trainee.getLogin() == exist_trainee.getLogin() && trainee.getID() != exist_trainee.getID())
{//Логин уже существует!
QMessageBox::critical(nullptr, tr("Editing error!"),
tr("An existing trainee login has been entered.\nThe changes will not be accepted."));
return 0;
}
if(id)
{
LoadTraineesGroupsPSQL();
return id;
}
else
return 0;
}
else
{
QMessageBox::critical(nullptr, tr("Editing error!"),
tr("An existing trainee's name or login has been entered.\nThe changes will not be accepted."));
return 0;
}
if(trainee.getName() == exist_trainee.getName() && trainee.getID() != exist_trainee.getID())
{//Имя уже существует
QMessageBox::warning(nullptr, tr("Editing warning!"),
tr("An existing trainee name has been entered."));
//return 0;
}
}
return 0;
return dbLMS->updateTrainee(trainee);
}
bool DataBaseTrainees::isArchived(int id)
{
//Обучаемые
for(int i = 0; i < listOfTrainees.count(); i++)
{
if(listOfTrainees[i].getID()== id)
return listOfTrainees[i].getArchived();
}
return false;
return dbLMS->selectTraineeArchived(id);
}
QString DataBaseTrainees::generateDefaultNameGroup()
{
int numGroup = 0;
QString name;
do
{
name = tr("Group") + QStringLiteral(" ") + QString::number(++numGroup);
}while(checkExistNameGroup(name));
return name;
}
QString DataBaseTrainees::generateDefaultNameTrainee()
{
int numTrainee = 0;
QString name;
do
{
name = QStringLiteral("<") + tr("Trainee") + QStringLiteral(" ") + QString::number(++numTrainee) + QStringLiteral(">");
}while(checkExistNameTrainee(name));
return name;
}
bool DataBaseTrainees::checkExistNameGroup(QString name)
{
//Группы
for(int i = 0; i < listOfGroups.count(); i++)
{
if(listOfGroups[i].getName() == name)
return true;
}
return false;
}
bool DataBaseTrainees::checkExistNameTrainee(QString name)
{
//Обучаемые
for(int i = 0; i < listOfTrainees.count(); i++)
{
if(listOfTrainees[i].getName() == name)
return true;
}
return false;
}
QString DataBaseTrainees::generateDefaultLoginTrainee()
{
int numTrainee = 0;
QString login;
do
{
login = QStringLiteral("<O") + QString::number(++numTrainee) + QStringLiteral(">");
}while(checkExistLoginTrainee(login));
return login;
}
bool DataBaseTrainees::checkExistLoginTrainee(QString login)
{
//Обучаемые
for(int i = 0; i < listOfTrainees.count(); i++)
{
if(listOfTrainees[i].getLogin() == login)
return true;
}
return false;
}
/*
Group::ColorGroup DataBaseTrainees::generateDefaultColorGroup()
{
for(int i = 0; i < Group::ColorGroup::countColor; i++)
{
Group::ColorGroup color = (Group::ColorGroup)i;
if(!checkExistColorGroup(color))
return color;
}
return Group::ColorGroup::colorAther;
}*/
/*
bool DataBaseTrainees::checkExistColorGroup(Group::ColorGroup color)
{
//Группы
for(int i = 0; i < listOfGroups.count(); i++)
{
if(listOfGroups[i].getColor() == color)
return true;
}
return false;
}*/

View File

@@ -19,25 +19,28 @@ public:
DataBaseTrainees(DataBaseLMS* dbLMS);
~DataBaseTrainees();
void LoadTraineesGroupsPSQL();
//void LoadTraineesGroupsPSQL();
void transactionBegin();
void transactionEnd();
bool AuthorizationTrainee(QString login, QString password, QString classroom_name, QString computer_name);
bool deAuthorizationTrainee(QString login);
//void setTasks(QString login, QStringList tasks);
QStringList getTasks(QString login);
QList<Task> getTasks(int id);
QString getNameTraineeOnComputer(QString computer_name);
Trainee getTraineeOnComputer(QString computer_name);
QString getNameTraineeByLogin(QString login);
//QColor getColorGroupByLogin(QString login);
QList<Trainee> getListTraineesInGroup(int id);
QList<Group> getListGroups();
QList<Trainee> getListTrainees();
Trainee getTrainee(int id);
Group getGroup(int id);
Trainee getTrainee(int trainee_id);
Group getGroup(int group_id);
int newGroup();
int deleteGroup(int id);
@@ -50,20 +53,7 @@ public:
bool isArchived(int id);
private:
QString generateDefaultNameGroup();
QString generateDefaultNameTrainee();
bool checkExistNameGroup(QString name);
bool checkExistNameTrainee(QString name);
QString generateDefaultLoginTrainee();
bool checkExistLoginTrainee(QString login);
private:
QList<Trainee> listOfTrainees;
QList<Group> listOfGroups;
QList<QColor> listOfColorGroup;
bool adminMode;
DataBaseLMS* dbLMS;
};

View File

@@ -13,6 +13,9 @@ EditorTrainees::EditorTrainees(DataBaseTrainees* db, bool adminMode, QWidget *pa
preparationTreeWidget(ui->treeWidget);
setNotLoggedInVisible(true);
loadTraineesFromDB();
if(adminMode)
ui->btnArchive->click();
}
EditorTrainees::~EditorTrainees()
@@ -22,9 +25,11 @@ EditorTrainees::~EditorTrainees()
void EditorTrainees::on_btnNewGroup_clicked()
{
int id = dbTrainees->newGroup();
loadTraineesFromDB();
setCurrentGroup(id);
if(int id = dbTrainees->newGroup())
{
loadTraineesFromDB();
setCurrentGroup(id);
}
}
void EditorTrainees::on_btnDeleteGroup_clicked()
@@ -36,7 +41,7 @@ void EditorTrainees::on_btnDeleteGroup_clicked()
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
if(treeItemParent == nullptr)
{//Выбрана группа
int id_group = treeItemCurrent->text(0).toInt();
int id_group = treeItemCurrent->text(ColumnsTreeTrainees::clmn_ID).toInt();
if(dbTrainees->getListTraineesInGroup(id_group).count() > 0)
{
@@ -67,7 +72,7 @@ void EditorTrainees::on_btnNewTrainee_clicked()
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
if(treeItemParent == nullptr)
{//Выбрана группа. Можно добавить Обучаемого
int id_group = treeItemCurrent->text(0).toInt();
int id_group = treeItemCurrent->text(ColumnsTreeTrainees::clmn_ID).toInt();
if(int id = dbTrainees->newTrainee(id_group))
{
loadTraineesFromDB();
@@ -91,8 +96,8 @@ void EditorTrainees::on_btnDeleteTrainee_clicked()
if(treeItemParent != nullptr)
{//Выбран обучаемый
int id_trainee = treeItemCurrent->text(0).toInt();
int id_group = treeItemParent->text(0).toInt();
int id_trainee = treeItemCurrent->text(ColumnsTreeTrainees::clmn_ID).toInt();
int id_group = treeItemParent->text(ColumnsTreeTrainees::clmn_ID).toInt();
if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok)
{
@@ -120,9 +125,11 @@ void EditorTrainees::on_btnToOrFromArchiveTrainee_clicked()
if(treeItemParent != nullptr)
{//Выбран обучаемый
int id_trainee = treeItemCurrent->text(0).toInt();
int id_trainee = treeItemCurrent->text(ColumnsTreeTrainees::clmn_ID).toInt();
Trainee trainee = dbTrainees->getTrainee(id_trainee);
if(trainee.getID() == 0)
return;
if(trainee.getArchived())
{//Архивный
@@ -168,61 +175,89 @@ void EditorTrainees::on_btnEdit_clicked()
if(treeItemParent == nullptr)
{//Выбрана группа
int id_group = treeItemCurrent->text(0).toInt();
int id_group = treeItemCurrent->text(ColumnsTreeTrainees::clmn_ID).toInt();
DialogEditGroup dlg(this);
dlg.setGroup(dbTrainees->getGroup(id_group));
switch( dlg.exec() )
Group group = dbTrainees->getGroup(id_group);
if(group.getID() == 0)
return;
dlg.setGroup(group);
while (true)
{
case QDialog::Accepted:
{
if(int id = dbTrainees->editGroup(dlg.getGroup()))
{//Отредактировано
loadTraineesFromDB();
setCurrentGroup(id);
}
else
switch( dlg.exec() )
{
//Ошибка редактирования
}
case QDialog::Accepted:
{
Group group_edit = dlg.getGroup();
break;
}
case QDialog::Rejected:
break;
default:
break;
if(int id = dbTrainees->editGroup(group_edit))
{//Отредактировано
loadTraineesFromDB();
setCurrentGroup(id);
return;
}
else
{
dlg.setGroup(group_edit);
continue;
}
break;
}
case QDialog::Rejected:
return;
break;
default:
return;
break;
}
}
}
else
{//Выбран обучаемый
int id_trainee = treeItemCurrent->text(0).toInt();
int id_trainee = treeItemCurrent->text(ColumnsTreeTrainees::clmn_ID).toInt();
DialogEditTrainee dlg(this);
dlg.setTrainee(dbTrainees->getTrainee(id_trainee));
switch( dlg.exec() )
Trainee trainee = dbTrainees->getTrainee(id_trainee);
if(trainee.getID() == 0)
return;
dlg.setTrainee(trainee);
while (true)
{
case QDialog::Accepted:
switch( dlg.exec() )
{
if(int id = dbTrainees->editTrainee(dlg.getTrainee()))
{//Отредактировано
loadTraineesFromDB();
setCurrentTrainee(id);
}
else
case QDialog::Accepted:
{
//Ошибка редактирования
}
Trainee trainee_edit = dlg.getTrainee();
if(int id = dbTrainees->editTrainee(trainee_edit))
{//Отредактировано
loadTraineesFromDB();
setCurrentTrainee(id);
return;
}
else
{
dlg.setTrainee(trainee_edit);
continue;
}
break;
}
case QDialog::Rejected:
return;
break;
default:
return;
break;
}
case QDialog::Rejected:
break;
default:
break;
}
}
}
@@ -244,7 +279,7 @@ void EditorTrainees::on_treeWidget_currentItemChanged(QTreeWidgetItem *current,
QTreeWidgetItem *treeItemParent = current->parent();
if(treeItemParent == nullptr)
{//Выбрана группа
int id_group = current->text(0).toInt();
int id_group = current->text(ColumnsTreeTrainees::clmn_ID).toInt();
if(adminMode)
{
@@ -276,7 +311,7 @@ void EditorTrainees::on_treeWidget_currentItemChanged(QTreeWidgetItem *current,
}
else
{//Выбран обучаемый
int id_trainee = current->text(0).toInt();
int id_trainee = current->text(ColumnsTreeTrainees::clmn_ID).toInt();
ui->btnNewGroup->setEnabled(false);
ui->btnDeleteGroup->setEnabled(false);
@@ -310,7 +345,7 @@ void EditorTrainees::setCurrentGroup(int id)
{
QTreeWidgetItem * item = treeWidget->topLevelItem(i);
if(item != nullptr)
if(item->text(0).toInt() == id)
if(item->text(ColumnsTreeTrainees::clmn_ID).toInt() == id)
{
treeWidget->setCurrentItem(item);
break;
@@ -329,7 +364,7 @@ void EditorTrainees::setCurrentTrainee(int id)
{
QTreeWidgetItem * itemChild = item->child(j);
if(itemChild != nullptr)
if(itemChild->text(0).toInt() == id)
if(itemChild->text(ColumnsTreeTrainees::clmn_ID).toInt() == id)
{
treeWidget->setCurrentItem(itemChild);
break;

View File

@@ -1,9 +1,9 @@
#include <QHeaderView>
#include "traineesview.h"
TraineesView::TraineesView(DataBaseTrainees* db, TypeView type, bool adminMode, QWidget *parent):
TraineesView::TraineesView(DataBaseTrainees* dbTrainees, TypeView type, bool adminMode, QWidget *parent):
CommonView(type, adminMode, parent),
dbTrainees(db)
dbTrainees(dbTrainees)
{
}
@@ -21,32 +21,52 @@ void TraineesView::preparationTreeWidget(QTreeWidget *tree)
treeWidget->header()->setStyleSheet(QStringLiteral("font-size: 10pt;"));
treeWidget->setColumnWidth(0, 80);
treeWidget->setColumnWidth(1, 250);
treeWidget->setColumnWidth(2, 100);
treeWidget->setColumnWidth(3, 100);
treeWidget->setColumnWidth(4, 130);
treeWidget->setColumnWidth(5, 130);
treeWidget->setColumnWidth(6, 130);
treeWidget->setColumnWidth(7, 80);
treeWidget->setColumnWidth(8, 80);
treeWidget->setColumnWidth(9, 100);
treeWidget->setColumnWidth(ColumnsTreeTrainees::clmn_ID, 80);
treeWidget->setColumnWidth(ColumnsTreeTrainees::clmn_Trainee, 250);
treeWidget->setColumnWidth(ColumnsTreeTrainees::clmn_Login, 100);
treeWidget->setColumnWidth(ColumnsTreeTrainees::clmn_Password, 100);
treeWidget->setColumnWidth(ColumnsTreeTrainees::clmn_Class, 130);
treeWidget->setColumnWidth(ColumnsTreeTrainees::clmn_Computer, 130);
treeWidget->setColumnWidth(ColumnsTreeTrainees::clmn_IP_address, 130);
treeWidget->setColumnWidth(ColumnsTreeTrainees::clmn_Archived, 80);
treeWidget->setColumnWidth(ColumnsTreeTrainees::clmn_Logged, 80);
treeWidget->setColumnWidth(ColumnsTreeTrainees::clmn_Tasks, 200);
if(typeView == TypeView::onlyView)
{//onlyView
treeWidget->setColumnHidden(2, true);
treeWidget->setColumnHidden(3, true);
treeWidget->setColumnHidden(7, true);
treeWidget->setColumnHidden(ColumnsTreeTrainees::clmn_ID, true);
//treeWidget->setColumnHidden(ColumnsTreeTrainees::clmn_Login, true);
treeWidget->setColumnHidden(ColumnsTreeTrainees::clmn_Password, true);
treeWidget->setColumnHidden(ColumnsTreeTrainees::clmn_Archived, true);
archiveVisible = false;
notLoggedInVisible = true;
}
else
{//control
treeWidget->setColumnHidden(7, true);
if(adminMode)
{
archiveVisible = true;
notLoggedInVisible = true;
}
else
{
treeWidget->setColumnHidden(ColumnsTreeTrainees::clmn_ID, true);
treeWidget->setColumnHidden(ColumnsTreeTrainees::clmn_Archived, true);
}
}
}
void TraineesView::loadTraineesFromDB()
{
dbTrainees->LoadTraineesGroupsPSQL();
QList <Group> listGroups;
QList <Trainee> listTrainees;
dbTrainees->transactionBegin();
listGroups = dbTrainees->getListGroups();
listTrainees = dbTrainees->getListTrainees();
dbTrainees->transactionEnd();
if(treeWidget == nullptr)
return;
@@ -54,52 +74,56 @@ void TraineesView::loadTraineesFromDB()
//Обновление дерева
treeWidget->clear();
for(Group group : dbTrainees->getListGroups())
for(Group group : listGroups)
{
//Группа
QTreeWidgetItem *ItemGroup = new QTreeWidgetItem(treeWidget);
ItemGroup->setText(0, QString::number(group.getID()));
ItemGroup->setText(1, group.getName());
ItemGroup->setIcon(1, QIcon(QStringLiteral(":/icons/group.png")));
ItemGroup->setText(ColumnsTreeTrainees::clmn_ID, QString::number(group.getID()));
ItemGroup->setText(ColumnsTreeTrainees::clmn_Trainee, group.getName());
ItemGroup->setIcon(ColumnsTreeTrainees::clmn_Trainee, QIcon(QStringLiteral(":/icons/group.png")));
setItemColor(ItemGroup, QColor(170, 190, 170));
//Обучаемые
QList<Trainee> listTrainees;
listTrainees = dbTrainees->getListTraineesInGroup(group.getID());
for(Trainee trainee : listTrainees)
{
if(trainee.getGroup().getID() != group.getID())
continue;
QTreeWidgetItem *ItemTrainee = new QTreeWidgetItem();
ItemTrainee->setText(0, QString::number(trainee.getID()));
ItemTrainee->setText(1, trainee.getName());
ItemTrainee->setText(2, trainee.getLogin());
ItemTrainee->setText(3, trainee.getPassword());
ItemTrainee->setText(4, trainee.getComputer().getClassroom().getName());
ItemTrainee->setText(5, trainee.getComputer().getName());
ItemTrainee->setText(6, trainee.getComputer().getIpAddress());
ItemTrainee->setText(ColumnsTreeTrainees::clmn_ID, QString::number(trainee.getID()));
ItemTrainee->setText(ColumnsTreeTrainees::clmn_Trainee, trainee.getName());
ItemTrainee->setText(ColumnsTreeTrainees::clmn_Login, trainee.getLogin());
ItemTrainee->setText(ColumnsTreeTrainees::clmn_Password, trainee.getPassword());
ItemTrainee->setText(ColumnsTreeTrainees::clmn_Class, trainee.getComputer().getClassroom().getName());
ItemTrainee->setText(ColumnsTreeTrainees::clmn_Computer, trainee.getComputer().getName());
ItemTrainee->setText(ColumnsTreeTrainees::clmn_IP_address, trainee.getComputer().getIpAddress());
//Сокрытие пароля
ItemTrainee->setText(ColumnsTreeTrainees::clmn_Password, QStringLiteral("******"));
if(trainee.getArchived())
{//Архивный
ItemTrainee->setText(7, tr("yes"));
ItemTrainee->setIcon(1, QIcon(QStringLiteral(":/icons/traineeArchive.png")));
ItemTrainee->setText(ColumnsTreeTrainees::clmn_Archived, tr("yes"));
ItemTrainee->setIcon(ColumnsTreeTrainees::clmn_Trainee, QIcon(QStringLiteral(":/icons/traineeArchive.png")));
setItemColorArchive(ItemTrainee);
}
else
{//Не Архивный
ItemTrainee->setText(7, tr("no"));
ItemTrainee->setIcon(1, QIcon(QStringLiteral(":/icons/trainee.png")));
ItemTrainee->setText(ColumnsTreeTrainees::clmn_Archived, tr("no"));
ItemTrainee->setIcon(ColumnsTreeTrainees::clmn_Trainee, QIcon(QStringLiteral(":/icons/trainee.png")));
setItemColorNoArchive(ItemTrainee);
}
if(trainee.getLoggedIn())
{//Залогинен
ItemTrainee->setText(8, tr("yes"));
ItemTrainee->setIcon(8, QIcon(QStringLiteral(":/icons/circleGreen.png")));
ItemTrainee->setText(ColumnsTreeTrainees::clmn_Logged, tr("yes"));
ItemTrainee->setIcon(ColumnsTreeTrainees::clmn_Logged, QIcon(QStringLiteral(":/icons/circleGreen.png")));
}
else
{//Не Залогинен
ItemTrainee->setText(8, tr("no"));
ItemTrainee->setIcon(8, QIcon(QStringLiteral(":/icons/circleGray.png")));
ItemTrainee->setText(ColumnsTreeTrainees::clmn_Logged, tr("no"));
ItemTrainee->setIcon(ColumnsTreeTrainees::clmn_Logged, QIcon(QStringLiteral(":/icons/circleGray.png")));
}
QString tasksStr;
@@ -107,7 +131,7 @@ void TraineesView::loadTraineesFromDB()
{
tasksStr += task.getName() + QStringLiteral("; ");
}
ItemTrainee->setText(9, tasksStr);
ItemTrainee->setText(ColumnsTreeTrainees::clmn_Tasks, tasksStr);
ItemGroup->addChild(ItemTrainee);
@@ -124,7 +148,7 @@ void TraineesView::loadTraineesFromDB()
}
treeWidget->setSortingEnabled(true);
treeWidget->sortItems(1, Qt::SortOrder::AscendingOrder);
treeWidget->sortItems(ColumnsTreeTrainees::clmn_Trainee, Qt::SortOrder::AscendingOrder);
treeWidget->expandAll();
if(typeView == TypeView::control)
@@ -137,6 +161,6 @@ void TraineesView::loadTraineesFromDB()
void TraineesView::reSetHeadTreeWidget()
{
QStringList listHeaders = {tr("ID"), tr("Trainee"), tr("Login"), tr("Password"), tr("Class"), tr("Computer"), tr("IP address"), tr("Archived"), tr("Logged"), tr("Tasks")};
QStringList listHeaders = {tr("Trainee"), tr("Login"), tr("Password"), tr("Class"), tr("Computer"), tr("IP address"), tr("Archived"), tr("Logged"), tr("Tasks"), tr("ID")};
treeWidget->setHeaderLabels(listHeaders);
}

View File

@@ -12,7 +12,21 @@ class TraineesView: public CommonView
Q_OBJECT
public:
TraineesView(DataBaseTrainees* db, TypeView type, bool adminMode, QWidget *parent = nullptr);
TraineesView(DataBaseTrainees* dbTrainees, TypeView type, bool adminMode, QWidget *parent = nullptr);
protected:
enum ColumnsTreeTrainees{
clmn_Trainee = 0,
clmn_Login,
clmn_Password,
clmn_Class,
clmn_Computer,
clmn_IP_address,
clmn_Archived,
clmn_Logged,
clmn_Tasks,
clmn_ID
};
protected:
void preparationTreeWidget(QTreeWidget* tree);

View File

@@ -34,7 +34,7 @@ void ViewerTrainees::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column
{
if(item->childCount() == 0)
{//Выбран обучаемый
QString login = item->text(2);
QString login = item->text(ColumnsTreeTrainees::clmn_Login);
Q_EMIT signal_traineeSelected(login);
}
}
@@ -47,7 +47,7 @@ void ViewerTrainees::slot_tabMessengerChanged(QString login)
for (int j = 0; j < countChild; j++)
{//Проход по обучаемым
QString loginChild = ui->treeWidget->topLevelItem(i)->child(j)->text(2);
QString loginChild = ui->treeWidget->topLevelItem(i)->child(j)->text(ColumnsTreeTrainees::clmn_Login);
if(loginChild == login)
{
ui->treeWidget->setCurrentItem(ui->treeWidget->topLevelItem(i)->child(j));
@@ -83,7 +83,7 @@ void ViewerTrainees::on_btnEditorTrainees_clicked()
QHBoxLayout *layout = new QHBoxLayout(dialog);
layout->addWidget(&editorTraineesGroups);
dialog->setWindowTitle(tr("Editor of trainees"));
dialog->setMinimumSize(1400, 800);
dialog->setMinimumSize(1600, 800);
dialog->exec();
loadTraineesFromDB();