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

@@ -6,8 +6,6 @@ DataBaseInstructors::DataBaseInstructors(DataBaseLMS* dbLMS):
adminMode(false)
{
this->dbLMS = dbLMS;
LoadInstructorsPSQL();
}
DataBaseInstructors::~DataBaseInstructors()
@@ -15,229 +13,91 @@ DataBaseInstructors::~DataBaseInstructors()
}
void DataBaseInstructors::LoadInstructorsPSQL()
{
listOfInstructors.clear();
listOfInstructors = dbLMS->selectAllInstructors();
QApplication::beep();
}
bool DataBaseInstructors::AuthorizationInstructor(QString login, QString password)
{
//Инструкторы
for(int i = 0; i < listOfInstructors.count(); i++)
if(! dbLMS->transactionBegin())
return false;
if(int id = dbLMS->selectInstructorID(login, password))
{
if(listOfInstructors[i].getArchived())
continue;
if(listOfInstructors[i].getLogin() == login && listOfInstructors[i].getPassword() == password)
{
Instructor instructor = listOfInstructors[i];
instructor.setLoggedIn(true);
int id = dbLMS->updateInstructor(instructor);
if(id)
{
LoadInstructorsPSQL();
return true;
}
else
return false;
}
if(dbLMS->updateInstructorLoggedIn(id, true))
return dbLMS->transactionEnd();
}
dbLMS->transactionEnd();
return false;
}
bool DataBaseInstructors::deAuthorizationInstructor(QString login)
{
//Инструкторы
for(int i = 0; i < listOfInstructors.count(); i++)
if(! dbLMS->transactionBegin())
return false;
if(int id = dbLMS->selectInstructorID(login))
{
if(listOfInstructors[i].getArchived())
continue;
if(listOfInstructors[i].getLogin() == login)
{
Instructor instructor = listOfInstructors[i];
instructor.setLoggedIn(false);
int id = dbLMS->updateInstructor(instructor);
if(id)
{
LoadInstructorsPSQL();
return true;
}
else
return false;
}
if(dbLMS->updateInstructorLoggedIn(id, false))
return dbLMS->transactionEnd();
}
dbLMS->transactionEnd();
return false;
}
QList<Instructor> DataBaseInstructors::getListInstructors()
{
return dbLMS->selectAllInstructors();
}
Instructor DataBaseInstructors::getInstructor(int id)
{
//Инструкторы
for(int i = 0; i < listOfInstructors.count(); i++)
{
if(listOfInstructors[i].getID() == id)
return listOfInstructors[i];
}
return Instructor();
return dbLMS->selectInstructor(id);
}
QString DataBaseInstructors::getNameInstructorByLogin(QString login)
{
for(Instructor instructor : listOfInstructors)
{
if(instructor.getLogin() == login)
return instructor.getName();
}
return QString(QStringLiteral(""));
}
/*
QString DataBaseInstructors::getAuthorizedInstructorName()
{
//Инструкторы
for(int i = 0; i < listOfInstructors.count(); i++)
{
if(listOfInstructors[i].getLoggedIn())
return listOfInstructors[i].getName();
}
return QStringLiteral("");
}*/
int DataBaseInstructors::newInstructor()
{
Instructor instructor;
instructor.setName(generateDefaultNameInstructor());
instructor.setLogin(generateDefaultLoginInstructor());
instructor.setPassword(QStringLiteral("<password>"));
instructor.setIsAdmin(false);
instructor.setArchived(false);
instructor.setLoggedIn(false);
int id = dbLMS->insertInstructor(instructor);
if(id)
{
LoadInstructorsPSQL();
return id;
}
else
return 0;
return dbLMS->insertInstructor();
}
int DataBaseInstructors::deleteInstructor(int id)
{
//Инструкторы
for(int i = 0; i < listOfInstructors.count(); i++)
{
if(listOfInstructors[i].getID() == id)
{
int id_del = dbLMS->deleteInstructor(id);
if(id_del)
{
LoadInstructorsPSQL();
return id_del;
}
else
return 0;
}
}
return 0;
return dbLMS->deleteInstructor(id);
}
int DataBaseInstructors::editInstructor(Instructor instructor)
{
//Инструкторы
for(int i = 0; i < listOfInstructors.count(); i++)
//Проверка дублирования логина и имени
QList<Instructor> listInstructors = dbLMS->selectAllInstructors();
for(Instructor exist_instructor : listInstructors)
{
if(listOfInstructors[i].getID() == instructor.getID())
{
if( (!checkExistNameInstructor(instructor.getName()) || instructor.getName() == listOfInstructors[i].getName()) &&
(!checkExistLoginInstructor(instructor.getLogin()) || instructor.getLogin() == listOfInstructors[i].getLogin()) )
{
int id = dbLMS->updateInstructor(instructor);
if(instructor.getLogin() == exist_instructor.getLogin() && instructor.getID() != exist_instructor.getID())
{//Логин уже существует!
QMessageBox::critical(nullptr, tr("Editing error!"),
tr("An existing instructor login has been entered.\nThe changes will not be accepted."));
return 0;
}
if(id)
{
LoadInstructorsPSQL();
return id;
}
else
return 0;
}
if(instructor.getName() == exist_instructor.getName() && instructor.getID() != exist_instructor.getID())
{//Имя уже существует
QMessageBox::warning(nullptr, tr("Editing warning!"),
tr("An existing instructor name has been entered."));
//return 0;
}
}
return 0;
return dbLMS->updateInstructor(instructor);
}
bool DataBaseInstructors::isAdmin(int id)
{
//Инструкторы
for(int i = 0; i < listOfInstructors.count(); i++)
{
if(listOfInstructors[i].getID() == id)
return listOfInstructors[i].getIsAdmin();
}
return false;
return dbLMS->selectInstructorIsAdmin(id);
}
bool DataBaseInstructors::isArchived(int id)
{
//Инструкторы
for(int i = 0; i < listOfInstructors.count(); i++)
{
if(listOfInstructors[i].getID() == id)
return listOfInstructors[i].getArchived();
}
return false;
return dbLMS->selectInstructorArchived(id);
}
QString DataBaseInstructors::generateDefaultNameInstructor()
bool DataBaseInstructors::existLogin(QString login)
{
int numInstructor = 0;
QString name;
do
{
name = QStringLiteral("<") + tr("Instructor") + QStringLiteral(" ") + QString::number(++numInstructor) + QStringLiteral(">");
}while(checkExistNameInstructor(name));
return name;
}
bool DataBaseInstructors::checkExistNameInstructor(QString name)
{
//Инструкторы
for(int i = 0; i < listOfInstructors.count(); i++)
{
if(listOfInstructors[i].getName() == name)
return true;
}
return false;
}
QString DataBaseInstructors::generateDefaultLoginInstructor()
{
int numInstructor = 0;
QString login;
do
{
login = QStringLiteral("<I") + QString::number(++numInstructor) + QStringLiteral(">");
}while(checkExistLoginInstructor(login));
return login;
}
bool DataBaseInstructors::checkExistLoginInstructor(QString login)
{
//Инструкторы
for(int i = 0; i < listOfInstructors.count(); i++)
{
if(listOfInstructors[i].getLogin() == login)
return true;
}
return false;
}

View File

@@ -5,10 +5,8 @@
#include <QObject>
#include "instructorsAndTrainees_global.h"
#include "instructor.h"
#include "databaselms.h"
class DataBaseInstructors : QObject
{
Q_OBJECT
@@ -17,19 +15,12 @@ public:
DataBaseInstructors(DataBaseLMS* dbLMS);
~DataBaseInstructors();
void LoadInstructorsPSQL();
bool AuthorizationInstructor(QString login, QString password);
bool deAuthorizationInstructor(QString login);
QList<Instructor> getListInstructors(){ return listOfInstructors; } //Для загрузки
QList<Instructor> getListInstructors();
Instructor getInstructor(int id);
QString getNameInstructorByLogin(QString login);
//QString getAuthorizedInstructorName();
int newInstructor();
int deleteInstructor(int id);
int editInstructor(Instructor instructor);
@@ -37,19 +28,10 @@ public:
bool isAdmin(int id);
bool isArchived(int id);
bool existLogin(QString login);
private:
QString generateDefaultNameInstructor();
bool checkExistNameInstructor(QString name);
QString generateDefaultLoginInstructor();
bool checkExistLoginInstructor(QString login);
private:
QList<Instructor> listOfInstructors;
bool adminMode;
DataBaseLMS* dbLMS;
};

View File

@@ -12,6 +12,9 @@ EditorInstructors::EditorInstructors(DataBaseInstructors* db, bool adminMode, QW
preparationTreeWidget(ui->treeWidget);
setNotLoggedInVisible(true);
loadInstructorsFromDB();
if(adminMode)
ui->btnArchive->click();
}
EditorInstructors::~EditorInstructors()
@@ -21,9 +24,11 @@ EditorInstructors::~EditorInstructors()
void EditorInstructors::on_btnNewInstructor_clicked()
{
int id = dbInstructors->newInstructor();
loadInstructorsFromDB();
setCurrentInstructor(id);
if(int id = dbInstructors->newInstructor())
{
loadInstructorsFromDB();
setCurrentInstructor(id);
}
}
void EditorInstructors::on_btnDeleteInstructor_clicked()
@@ -36,7 +41,7 @@ void EditorInstructors::on_btnDeleteInstructor_clicked()
if(treeItemParent == nullptr)
{//Выбран Инструктор
int id = treeItemCurrent->text(0).toInt();
int id = treeItemCurrent->text(ColumnsTreeInsructors::clmn_ID).toInt();
if(dbInstructors->isAdmin(id))
{//Это Админ!
@@ -46,8 +51,8 @@ void EditorInstructors::on_btnDeleteInstructor_clicked()
if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete it anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok)
{
dbInstructors->deleteInstructor(id);
loadInstructorsFromDB();
if(dbInstructors->deleteInstructor(id))
loadInstructorsFromDB();
}
}
}
@@ -63,9 +68,11 @@ void EditorInstructors::on_btnToOrFromArchive_clicked()
if(treeItemParent == nullptr)
{//Выбран Инструктор
int id = treeItemCurrent->text(0).toInt();
int id = treeItemCurrent->text(ColumnsTreeInsructors::clmn_ID).toInt();
Instructor instructor = dbInstructors->getInstructor(id);
if(instructor.getID() == 0)
return;
if(instructor.getArchived())
{//Архивный
@@ -103,29 +110,45 @@ void EditorInstructors::on_btnEdit_clicked()
if(treeItemParent == nullptr)
{//Выбран Инструктор
int id = treeItemCurrent->text(0).toInt();
int id = treeItemCurrent->text(ColumnsTreeInsructors::clmn_ID).toInt();
DialogEditInstructor dlg(this);
dlg.setInstructor(dbInstructors->getInstructor(id));
switch( dlg.exec() )
Instructor instructor = dbInstructors->getInstructor(id);
if(instructor.getID() == 0)
return;
dlg.setInstructor(instructor);
while (true)
{
case QDialog::Accepted:
{
if(int id_edit = dbInstructors->editInstructor(dlg.getInstructor()))
switch( dlg.exec() )
{
loadInstructorsFromDB();
setCurrentInstructor(id_edit);
case QDialog::Accepted:
{
Instructor instructor_edit = dlg.getInstructor();
if(int id_edit = dbInstructors->editInstructor(instructor_edit))
{//Отредактировано
loadInstructorsFromDB();
setCurrentInstructor(id_edit);
return;
}
else
{
dlg.setInstructor(instructor_edit);
continue;
}
break;
}
case QDialog::Rejected:
return;
break;
default:
return;
break;
}
else
QMessageBox::critical(this, tr("Editing error!"),
tr("An existing instructor name or login has been entered.\nThe changes will not be accepted."));
break;
}
case QDialog::Rejected:
break;
default:
break;
}
}
}
@@ -148,7 +171,7 @@ void EditorInstructors::on_treeWidget_currentItemChanged(QTreeWidgetItem *curren
if(treeItemParent == nullptr)
{//Выбран инструктор
int id = current->text(0).toInt();
int id = current->text(ColumnsTreeInsructors::clmn_ID).toInt();
if(dbInstructors->isArchived(id))
{//Архивный
@@ -189,7 +212,7 @@ void EditorInstructors::setCurrentInstructor(int id)
{
QTreeWidgetItem * item = treeWidget->topLevelItem(i);
if(item != nullptr)
if(item->text(0).toInt() == id)
if(item->text(ColumnsTreeInsructors::clmn_ID).toInt() == id)
{
treeWidget->setCurrentItem(item);
break;

View File

@@ -2,9 +2,9 @@
#include <QTranslator>
#include "instructorsview.h"
InstructorsView::InstructorsView(DataBaseInstructors* db, TypeView type, bool adminMode, QWidget *parent):
InstructorsView::InstructorsView(DataBaseInstructors* dbInstructors, TypeView type, bool adminMode, QWidget *parent):
CommonView(type, adminMode, parent),
dbInstructors(db)
dbInstructors(dbInstructors)
{
}
@@ -22,30 +22,39 @@ void InstructorsView::preparationTreeWidget(QTreeWidget* tree)
treeWidget->header()->setStyleSheet(QStringLiteral("font-size: 10pt;"));
treeWidget->setColumnWidth(0, 50);
treeWidget->setColumnWidth(1, 250);
treeWidget->setColumnWidth(2, 100);
treeWidget->setColumnWidth(3, 100);
treeWidget->setColumnWidth(4, 100);
treeWidget->setColumnWidth(5, 80);
treeWidget->setColumnWidth(6, 80);
treeWidget->setColumnWidth(ColumnsTreeInsructors::clmn_ID, 50);
treeWidget->setColumnWidth(ColumnsTreeInsructors::clmn_Instructor, 250);
treeWidget->setColumnWidth(ColumnsTreeInsructors::clmn_Login, 100);
treeWidget->setColumnWidth(ColumnsTreeInsructors::clmn_Password, 100);
treeWidget->setColumnWidth(ColumnsTreeInsructors::clmn_Administrator, 100);
treeWidget->setColumnWidth(ColumnsTreeInsructors::clmn_Archived, 80);
treeWidget->setColumnWidth(ColumnsTreeInsructors::clmn_Logged, 80);
if(typeView == TypeView::onlyView)
{//onlyView
treeWidget->setColumnHidden(2, true);
treeWidget->setColumnHidden(3, true);
treeWidget->setColumnHidden(5, true);
treeWidget->setColumnHidden(ColumnsTreeInsructors::clmn_ID, true);
//treeWidget->setColumnHidden(ColumnsTreeInsructors::clmn_Login, true);
treeWidget->setColumnHidden(ColumnsTreeInsructors::clmn_Password, true);
treeWidget->setColumnHidden(ColumnsTreeInsructors::clmn_Archived, true);
treeWidget->setColumnHidden(ColumnsTreeInsructors::clmn_Administrator, true);
}
else
{//control
treeWidget->setColumnHidden(5, true);
if(adminMode)
{
archiveVisible = true;
notLoggedInVisible = true;
}
else
{
treeWidget->setColumnHidden(ColumnsTreeInsructors::clmn_ID, true);
treeWidget->setColumnHidden(ColumnsTreeInsructors::clmn_Archived, true);
}
}
}
void InstructorsView::loadInstructorsFromDB()
{
dbInstructors->LoadInstructorsPSQL();
if(treeWidget == nullptr)
return;
@@ -59,43 +68,46 @@ void InstructorsView::loadInstructorsFromDB()
{
QTreeWidgetItem *ItemInstructor = new QTreeWidgetItem(treeWidget);
ItemInstructor->setText(0, QString::number(instructor.getID()));
ItemInstructor->setText(1, instructor.getName());
ItemInstructor->setText(2, instructor.getLogin());
ItemInstructor->setText(3, instructor.getPassword());
ItemInstructor->setText(ColumnsTreeInsructors::clmn_ID, QString::number(instructor.getID()));
ItemInstructor->setText(ColumnsTreeInsructors::clmn_Instructor, instructor.getName());
ItemInstructor->setText(ColumnsTreeInsructors::clmn_Login, instructor.getLogin());
ItemInstructor->setText(ColumnsTreeInsructors::clmn_Password, instructor.getPassword());
//Сокрытие пароля
ItemInstructor->setText(ColumnsTreeInsructors::clmn_Password, QStringLiteral("******"));
if(instructor.getArchived())
{//Архивный
ItemInstructor->setText(5, tr("yes"));
ItemInstructor->setIcon(1, QIcon(QStringLiteral(":/icons/instructorArchive.png")));
ItemInstructor->setText(ColumnsTreeInsructors::clmn_Archived, tr("yes"));
ItemInstructor->setIcon(ColumnsTreeInsructors::clmn_Instructor, QIcon(QStringLiteral(":/icons/instructorArchive.png")));
setItemColorArchive(ItemInstructor);
}
else
{//Не Архивный
ItemInstructor->setText(5, tr("no"));
ItemInstructor->setIcon(1, QIcon(QStringLiteral(":/icons/instructor.png")));
ItemInstructor->setText(ColumnsTreeInsructors::clmn_Archived, tr("no"));
ItemInstructor->setIcon(ColumnsTreeInsructors::clmn_Instructor, QIcon(QStringLiteral(":/icons/instructor.png")));
setItemColorNoArchive(ItemInstructor);
}
if(instructor.getIsAdmin())
{//Админ
ItemInstructor->setText(4, tr("yes"));
ItemInstructor->setIcon(1, QIcon(QStringLiteral(":/icons/admin.png")));
ItemInstructor->setText(ColumnsTreeInsructors::clmn_Administrator, tr("yes"));
ItemInstructor->setIcon(ColumnsTreeInsructors::clmn_Instructor, QIcon(QStringLiteral(":/icons/admin.png")));
}
else
{//Не Админ
ItemInstructor->setText(4, tr("no"));
ItemInstructor->setText(ColumnsTreeInsructors::clmn_Administrator, tr("no"));
}
if(instructor.getLoggedIn())
{//Залогинен
ItemInstructor->setText(6, tr("yes"));
ItemInstructor->setIcon(6, QIcon(QStringLiteral(":/icons/circleGreen.png")));
ItemInstructor->setText(ColumnsTreeInsructors::clmn_Logged, tr("yes"));
ItemInstructor->setIcon(ColumnsTreeInsructors::clmn_Logged, QIcon(QStringLiteral(":/icons/circleGreen.png")));
}
else
{//Не Залогинен
ItemInstructor->setText(6, tr("no"));
ItemInstructor->setIcon(6, QIcon(QStringLiteral(":/icons/circleGray.png")));
ItemInstructor->setText(ColumnsTreeInsructors::clmn_Logged, tr("no"));
ItemInstructor->setIcon(ColumnsTreeInsructors::clmn_Logged, QIcon(QStringLiteral(":/icons/circleGray.png")));
}
//Скрываем архивных (при необходимости)
@@ -110,7 +122,7 @@ void InstructorsView::loadInstructorsFromDB()
}
treeWidget->setSortingEnabled(true);
treeWidget->sortItems(1, Qt::SortOrder::AscendingOrder);
treeWidget->sortItems(ColumnsTreeInsructors::clmn_Instructor, Qt::SortOrder::AscendingOrder);
treeWidget->expandAll();
if(typeView == TypeView::control)
@@ -123,7 +135,7 @@ void InstructorsView::loadInstructorsFromDB()
void InstructorsView::reSetHeadTreeWidget()
{
QStringList listHeaders = {tr("ID"), tr("Instructor"), tr("Login"), tr("Password"), tr("Administrator"), tr("Archived"), tr("Logged")};
QStringList listHeaders = {tr("Instructor"), tr("Login"), tr("Password"), tr("Administrator"), tr("Archived"), tr("Logged"), tr("ID")};
treeWidget->setHeaderLabels(listHeaders);
}

View File

@@ -12,7 +12,18 @@ class InstructorsView: public CommonView
Q_OBJECT
public:
InstructorsView(DataBaseInstructors* db, TypeView type, bool adminMode, QWidget *parent = nullptr);
InstructorsView(DataBaseInstructors* dbInstructors, TypeView type, bool adminMode, QWidget *parent = nullptr);
protected:
enum ColumnsTreeInsructors{
clmn_Instructor = 0,
clmn_Login,
clmn_Password,
clmn_Administrator,
clmn_Archived,
clmn_Logged,
clmn_ID
};
protected:
void preparationTreeWidget(QTreeWidget* tree);

View File

@@ -66,7 +66,7 @@ void ViewerInstructors::on_btnEditorInstructors_clicked()
QHBoxLayout *layout = new QHBoxLayout(dialog);
layout->addWidget(&editorInstructors);
dialog->setWindowTitle(tr("Editor of instructors"));
dialog->setMinimumSize(1400, 800);
dialog->setMinimumSize(1600, 800);
dialog->exec();
loadInstructorsFromDB();