diff --git a/DataBaseLMS/CMakeLists.txt b/DataBaseLMS/CMakeLists.txt index 1a7dd55..c68feac 100644 --- a/DataBaseLMS/CMakeLists.txt +++ b/DataBaseLMS/CMakeLists.txt @@ -5,6 +5,10 @@ common_info_for_project(DataBaseLMS) add_library(DataBaseLMS SHARED DataBaseLMS_global.h databaselms.cpp + databaselms_tasks.cpp + databaselms_groups.cpp + databaselms_instructors.cpp + databaselms_trainees.cpp databaselms.h interfacedatabaselms.cpp interfacedatabaselms.h @@ -28,6 +32,7 @@ add_library(DataBaseLMS SHARED timingoftrainee.cpp timingoftrainee.h contactModel.h + resources.qrc ) target_link_libraries(DataBaseLMS PRIVATE Qt5::Widgets) diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index 23892cf..028a34f 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -4,10 +4,12 @@ #include #include #include +#include -DataBaseLMS::DataBaseLMS(): +DataBaseLMS::DataBaseLMS(QWidget *ownerWidget): db(nullptr), - transactionBegined(false) + transactionBegined(false), + ownerWidget(ownerWidget) { } @@ -43,10 +45,7 @@ bool DataBaseLMS::createConnection() else { bool flHas = db->driver()->hasFeature(QSqlDriver::Transactions); - - //bool resBool = QSqlDatabase::database(connectionName).transaction(); - //resBool = QSqlDatabase::database(connectionName).commit(); - + qDebug() << "db->driver()->hasFeature(QSqlDriver::Transactions): " << flHas; mtxAccess.unlock(); return true; } @@ -111,7 +110,8 @@ DataBaseSettings DataBaseLMS::getDataBaseSettings() if(xmlReader.name() == "DataBaseSettings") { - foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()){ + foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()) + { QString name = attr.name().toString(); QString value = attr.value().toString(); @@ -154,11 +154,13 @@ bool DataBaseLMS::transactionBegin() { /* if(transactionBegined) - QSqlDatabase::database().rollback(); - - transactionBegined = true; - - return QSqlDatabase::database().transaction(); + {//Отмена предыдущей незаконченной + if(QSqlDatabase::database().rollback()) + transactionBegined = false; + else + return false; + } + return (transactionBegined = QSqlDatabase::database().transaction()); */ return true; } @@ -168,1579 +170,13 @@ bool DataBaseLMS::transactionEnd() /* if(transactionBegined) { - transactionBegined = false; - - return QSqlDatabase::database().commit(); + return !(transactionBegined = !QSqlDatabase::database().commit()); } return false; */ return true; } -QList DataBaseLMS::selectAllInstructors() -{ - QList listInstructors; - - QString queryStr = QString("SELECT instructor_id, name, login, password, is_admin, archived, logged_in " - "FROM public.instructors " - "ORDER BY instructor_id ASC"); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Инструктор - Instructor instructor; - instructor.setID(query.value(0).toInt()); - instructor.setName(query.value(1).toString()); - instructor.setLogin(query.value(2).toString()); - instructor.setPassword(query.value(3).toString()); - instructor.setIsAdmin(query.value(4).toBool()); - instructor.setArchived(query.value(5).toBool()); - instructor.setLoggedIn(query.value(6).toBool()); - - listInstructors.append(instructor); - } - } - - return listInstructors; -} - -QList DataBaseLMS::selectAllTrainees() -{ - QList listTrainees; - - QString queryStr = QString("SELECT trainees.trainee_id, trainees.name, trainees.login, trainees.password, trainees.archived, trainees.logged_in, " - "groups.group_id, groups.name, " - "computers.computer_id, computers.name, computers.ip_address, " - "classrooms.classroom_id, classrooms.name " - "FROM public.trainees JOIN public.groups ON groups.group_id = trainees.group_trainee " - "LEFT OUTER JOIN public.computers ON computers.computer_id = trainees.computer_trainee " - "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.classroom_computer " - "ORDER BY groups.name, trainees.name ASC"); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Обучаемый - Trainee trainee; - - trainee.setID(query.value(0).toInt()); - trainee.setName(query.value(1).toString()); - trainee.setLogin(query.value(2).toString()); - trainee.setPassword(query.value(3).toString()); - trainee.setArchived(query.value(4).toBool()); - trainee.setLoggedIn(query.value(5).toBool()); - - Group group = Group(query.value(6).toInt(), query.value(7).toString()); - trainee.setGroup(group); - - Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); - Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); - trainee.setComputer(computer); - - listTrainees.append(trainee); - } - } - - return listTrainees; -} - -QList DataBaseLMS::selectAllGroups() -{ - QList listGroups; - - QString queryStr = QString("SELECT group_id, name " - "FROM public.groups " - "ORDER BY group_id ASC"); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Группа - Group group; - group.setID(query.value(0).toInt()); - group.setName(query.value(1).toString()); - - listGroups.append(group); - } - } - - return listGroups; -} - -Instructor DataBaseLMS::selectInstructor(int id_instructor) -{ - Instructor instructor; - - QString queryStr = QString("SELECT instructor_id, name, login, password, is_admin, archived, logged_in " - "FROM public.instructors " - "WHERE instructors.instructor_id = %1 ").arg( - id_instructor); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Инструктор - instructor.setID(query.value(0).toInt()); - instructor.setName(query.value(1).toString()); - instructor.setLogin(query.value(2).toString()); - instructor.setPassword(query.value(3).toString()); - instructor.setIsAdmin(query.value(4).toBool()); - instructor.setArchived(query.value(5).toBool()); - instructor.setLoggedIn(query.value(6).toBool()); - } - } - - return instructor; -} - -int DataBaseLMS::selectInstructorID(QString login, QString password) -{ - QString queryStr; - - if(password != QStringLiteral("")) - { - queryStr = QString("SELECT instructors.instructor_id " - "FROM public.instructors " - "WHERE login = '%1' AND password = '%2' ").arg( - login, - password ); - } - else - { - queryStr = QString("SELECT instructors.instructor_id " - "FROM public.instructors " - "WHERE login = '%1' ").arg( - login ); - } - - return queryExecInt(queryStr); -} - -QString DataBaseLMS::selectInstructorNameByLogin(QString login) -{ - QString queryStr = QString("SELECT instructors.name " - "FROM public.instructors " - "WHERE instructors.login = '%1' ").arg( - login ); - - return queryExecString(queryStr); -} - -bool DataBaseLMS::selectInstructorIsAdmin(int id_instructor) -{ - QString queryStr = QString("SELECT instructors.is_admin " - "FROM public.instructors " - "WHERE instructor_id = %1 ").arg( - id_instructor ); - - return queryExecBool(queryStr); -} - -bool DataBaseLMS::selectInstructorLoggedIn(int id_instructor) -{ - QString queryStr = QString("SELECT instructors.logged_in " - "FROM public.instructors " - "WHERE instructor_id = %1 ").arg( - id_instructor ); - - return queryExecBool(queryStr); -} - -bool DataBaseLMS::selectInstructorArchived(int id_instructor) -{ - QString queryStr = QString("SELECT instructors.archived " - "FROM public.instructors " - "WHERE instructor_id = %1 ").arg( - id_instructor ); - - return queryExecBool(queryStr); -} - -int DataBaseLMS::updateInstructorLoggedIn(int id_instructor, bool loggedIn) -{ - QString queryStr = QString("UPDATE public.instructors " - "SET logged_in = %1 " - "WHERE instructor_id = %2 " - "RETURNING instructors.instructor_id").arg( - loggedIn ? "true" : "false", - QString::number(id_instructor) ); - - return queryExecInt(queryStr); -} - -bool DataBaseLMS::updateAllInstructorsLoggedIn(bool loggedIn) -{ - QString queryStr = QString("UPDATE public.instructors " - "SET logged_in = %1 ").arg( - loggedIn ? "true" : "false"); - - QSqlQuery query = QSqlQuery(*db); - - return queryExec(queryStr, &query); -} - -int DataBaseLMS::updateInstructorArchived(int id_instructor, bool archived) -{ - QString queryStr = QString("UPDATE public.instructors " - "SET archived = %1 " - "WHERE instructor_id = %2 " - "RETURNING instructors.instructor_id").arg( - archived ? "true" : "false", - QString::number(id_instructor) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertInstructor() -{ - QString queryStr = QString("INSERT INTO public.instructors " - "DEFAULT VALUES " - "RETURNING instructor_id"); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertInstructor(Instructor instructor) -{ - QString queryStr = QString("INSERT INTO public.instructors (name, login, password, is_admin, archived, logged_in) " - "VALUES ('%1', '%2', '%3', %4, %5, %6) " - "RETURNING instructor_id").arg( - instructor.getName(), - instructor.getLogin(), - instructor.getPassword(), - instructor.getIsAdmin() ? "true" : "false", - instructor.getArchived() ? "true" : "false", - instructor.getLoggedIn() ? "true" : "false"); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::deleteInstructor(int id_instructor) -{ - QString queryStr = QString("DELETE FROM public.instructors " - "WHERE instructor_id = %1 " - "RETURNING instructors.instructor_id").arg( - QString::number(id_instructor)); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateInstructor(Instructor instructor) -{ - QString queryStr = QString("UPDATE public.instructors " - "SET name = '%1', login = '%2', password = '%3', is_admin = %4, archived = %5, logged_in = %6 " - "WHERE instructor_id = %7 " - "RETURNING instructors.instructor_id").arg( - instructor.getName(), - instructor.getLogin(), - instructor.getPassword(), - instructor.getIsAdmin() ? "true" : "false", - instructor.getArchived() ? "true" : "false", - instructor.getLoggedIn() ? "true" : "false", - QString::number(instructor.getID()) ); - - return queryExecInt(queryStr); -} - -Group DataBaseLMS::selectGroup(int id_group) -{ - Group group; - - QString queryStr = QString("SELECT group_id, name " - "FROM public.groups " - "WHERE groups.group_id = %1 ").arg( - id_group); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Инструктор - group.setID(query.value(0).toInt()); - group.setName(query.value(1).toString()); - } - } - - return group; -} - -int DataBaseLMS::insertGroup() -{ - QString queryStr = QString("INSERT INTO public.groups " - "DEFAULT VALUES " - "RETURNING group_id"); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertGroup(Group group) -{ - QString queryStr = QString("INSERT INTO public.groups (name) " - "VALUES ('%1') " - "RETURNING groups.group_id").arg( - group.getName()); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::deleteGroup(int id_group) -{ - QString queryStr = QString("DELETE FROM public.groups " - "WHERE group_id = %1 " - "RETURNING groups.group_id").arg( - QString::number(id_group)); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateGroup(Group group) -{ - QString queryStr = QString("UPDATE public.groups SET name = '%1' " - "WHERE group_id = %2 " - "RETURNING groups.group_id").arg( - group.getName(), - QString::number(group.getID()) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee) -{ - task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки - - QString queryStr = QString("INSERT INTO public.tasks_amm (title, dm_code, trainee_task) " - "VALUES ('%1', '%2', %3) " - "RETURNING tasks_amm.task_id").arg( - task.ammProcedure.title, - task.ammProcedure.dmCode, - QString::number(id_trainee)); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateTaskAMM(TaskAmmFim task) -{ - task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки - - QString queryStr = QString("UPDATE public.tasks_amm SET title = '%1', dm_code = '%2', status = '%3' " - "WHERE task_id = %4 " - "RETURNING tasks_amm.task_id").arg( - task.ammProcedure.title, - task.ammProcedure.dmCode, - task.status, - QString::number(task.getID()) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status) -{ - QString queryStr; - bool resBool = false; - int id_trainee = 0; - - resBool = db->transaction(); - - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees JOIN public.tasks_amm ON trainees.trainee_id = tasks_amm.trainee_task " - "WHERE tasks_amm.task_id = %1 " - "ORDER BY trainees.trainee_id ASC").arg( - QString::number(task_id)); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Обучаемый - id_trainee = query.value(0).toInt(); - } - } - if(!id_trainee) - { - resBool = db->rollback(); - return 0; - } - - - queryStr = QString("UPDATE public.tasks_amm SET status = '%1' " - "WHERE task_id = %2 " - "RETURNING tasks_amm.task_id").arg( - status, - QString::number(task_id) ); - - - if(!queryExecInt(queryStr)) - { - resBool = db->rollback(); - return 0; - } - - resBool = db->commit(); - return id_trainee; -} - -int DataBaseLMS::deleteTaskAMM(int id_task) -{ - QString queryStr; - bool resBool = false; - int id_trainee = 0; - - resBool = db->transaction(); - - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees JOIN public.tasks_amm ON trainees.trainee_id = tasks_amm.trainee_task " - "WHERE tasks_amm.task_id = %1 " - "ORDER BY trainees.trainee_id ASC").arg( - QString::number(id_task)); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Обучаемый - id_trainee = query.value(0).toInt(); - } - } - if(!id_trainee) - { - resBool = db->rollback(); - return 0; - } - - queryStr = QString("DELETE FROM public.tasks_amm " - "WHERE task_id = %1 " - "RETURNING tasks_amm.task_id").arg( - QString::number(id_task)); - - if(!queryExecInt(queryStr)) - { - resBool = db->rollback(); - return 0; - } - - resBool = db->commit(); - return id_trainee; -} - -QList DataBaseLMS::selectTasksAMMofTrainee(int id_trainee) -{ - QList listTasks; - - QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, " - "trainees.trainee_id " - "FROM public.tasks_amm JOIN public.trainees ON trainees.trainee_id = tasks_amm.trainee_task " - "WHERE tasks_amm.trainee_task = %1 " - "ORDER BY tasks_amm.task_id ASC").arg( - id_trainee); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Задача - TaskAmmFim task; - - task.setID(query.value(0).toInt()); - task.ammProcedure.title = query.value(1).toString(); - task.ammProcedure.dmCode = query.value(2).toString(); - task.status = query.value(3).toString(); - - listTasks.append(task); - } - } - - return listTasks; -} - -TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task) -{ - TaskAmmFim task; - - QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status " - "FROM public.tasks_amm " - "WHERE tasks_amm.task_id = %1 " - "ORDER BY tasks_amm.task_id ASC").arg( - id_task); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Задача - task.setID(query.value(0).toInt()); - task.ammProcedure.title = query.value(1).toString(); - task.ammProcedure.dmCode = query.value(2).toString(); - task.status = query.value(3).toString(); - } - } - - return task; -} - -int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) -{ - QString queryStr; - bool resBool = false; - - resBool = db->transaction(); - - task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки - - queryStr = QString("INSERT INTO public.tasks_fim (title, trainee_task) " - "VALUES ('%1', %2) " - "RETURNING tasks_fim.task_id").arg( - task.title, - QString::number(id_trainee)); - - int task_id = queryExecInt(queryStr); - if(!task_id) - { - resBool = db->rollback(); - return 0; - } - - for(Malfunction malfanction : task.malfunctionList) - { - malfanction.description = malfanction.description.replace("'", "''"); //Задваиваем одинарные кавычки - - queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, task_fim_malf) " - "VALUES ('%1', '%2', '%3', %4) " - "RETURNING malfunctions.malfunction_id").arg( - malfanction.num, - malfanction.dmCode, - malfanction.description, - QString::number(task_id)); - - int malfunction_id = queryExecInt(queryStr); - if(!malfunction_id) - { - resBool = db->rollback(); - return 0; - } - - //Sign - for(MalfunctionSign sign : malfanction.malfunctionSigns) - { - sign.description = sign.description.replace("'", "''"); //Задваиваем одинарные кавычки - - queryStr = QString("INSERT INTO public.malf_sign (type, description, malf_malf_sign) " - "VALUES ('%1', '%2', %3) " - "RETURNING malf_sign.sign_id").arg( - QString::number(sign.type), - sign.description, - QString::number(malfunction_id)); - - if(!queryExecInt(queryStr)) - { - resBool = db->rollback(); - return 0; - } - } - } - - resBool = db->commit(); - return task_id; -} - -int DataBaseLMS::updateTaskFIM(TaskAmmFim task) -{ - task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки - - QString queryStr = QString("UPDATE public.tasks_fim SET title = '%1', status = '%2' " - "WHERE task_id = %3 " - "RETURNING tasks_fim.task_id").arg( - task.title, - task.status, - QString::number(task.getID()) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateStatusTaskFIM(int task_id, QString status) -{ - QString queryStr; - bool resBool = false; - int id_trainee = 0; - - resBool = db->transaction(); - - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees JOIN public.tasks_fim ON trainees.trainee_id = tasks_fim.trainee_task " - "WHERE tasks_fim.task_id = %1 " - "ORDER BY trainees.trainee_id ASC").arg( - QString::number(task_id)); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Обучаемый - id_trainee = query.value(0).toInt(); - } - } - if(!id_trainee) - { - resBool = db->rollback(); - return 0; - } - - queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " - "WHERE task_id = %2 " - "RETURNING tasks_fim.task_id").arg( - status, - QString::number(task_id) ); - - QSqlQuery query1 = QSqlQuery(*db); - if(!queryExec(queryStr, &query1)) - { - resBool = db->rollback(); - return 0; - } - - resBool = db->commit(); - return id_trainee; -} - -int DataBaseLMS::deleteTaskFIM(int id_task) -{ - QString queryStr; - bool resBool = false; - int id_trainee = 0; - - resBool = db->transaction(); - - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees JOIN public.tasks_fim ON trainees.trainee_id = tasks_fim.trainee_task " - "WHERE tasks_fim.task_id = %1 " - "ORDER BY trainees.trainee_id ASC").arg( - QString::number(id_task)); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Обучаемый - id_trainee = query.value(0).toInt(); - } - } - if(!id_trainee) - { - resBool = db->rollback(); - return 0; - } - - //Выгребаем все malfunction для этой задачи - queryStr = QString("SELECT malfunctions.malfunction_id " - "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.task_fim_malf " - "WHERE malfunctions.task_fim_malf = %1 " - "ORDER BY malfunctions.malfunction_id ASC").arg( - id_task); - QSqlQuery queryMalf = QSqlQuery(*db); - - if(queryExec(queryStr, &queryMalf)) - { - while (queryMalf.next()) - {//Неисправность - int malfunction_id = 0; - - malfunction_id = queryMalf.value(0).toString().toInt(); - - if(malfunction_id) - { - queryStr = QString("DELETE FROM public.malf_sign " - "WHERE malf_malf_sign = %1 ").arg( - malfunction_id); - - QSqlQuery querySign = QSqlQuery(*db); - if(!queryExec(queryStr, &querySign)) - { - resBool = db->rollback(); - return 0; - } - } - }; - } - else - { - resBool = db->rollback(); - return 0; - } - - - queryStr = QString("DELETE FROM public.malfunctions " - "WHERE task_fim_malf = %1 ").arg( - QString::number(id_task)); - - QSqlQuery query1 = QSqlQuery(*db); - if(!queryExec(queryStr, &query1)) - { - resBool = db->rollback(); - return 0; - } - - queryStr = QString("DELETE FROM public.tasks_fim " - "WHERE task_id = %1 " - "RETURNING tasks_fim.task_id").arg( - QString::number(id_task)); - - if(!queryExecInt(queryStr)) - { - resBool = db->rollback(); - return 0; - } - - resBool = db->commit(); - return id_trainee; -} - -QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) -{ - QList listTasks; - QString queryStr; - bool resBool = false; - - resBool = db->transaction(); - - queryStr = QString("SELECT tasks_fim.task_id, tasks_fim.title, tasks_fim.status, " - "trainees.trainee_id " - "FROM public.tasks_fim JOIN public.trainees ON trainees.trainee_id = tasks_fim.trainee_task " - "WHERE tasks_fim.trainee_task = %1 " - "ORDER BY tasks_fim.task_id ASC").arg( - id_trainee); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Задача - TaskAmmFim task; - - task.setID(query.value(0).toInt()); - task.title = query.value(1).toString(); - task.status = query.value(2).toString(); - - //Выгребаем все malfunction для этой задачи - queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, " - "tasks_fim.task_id " - "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.task_fim_malf " - "WHERE malfunctions.task_fim_malf = %1 " - "ORDER BY malfunctions.num ASC").arg( - task.getID()); - - QSqlQuery queryMalf = QSqlQuery(*db); - - if(queryExec(queryStr, &queryMalf)) - { - while (queryMalf.next()) - {//Неисправность - Malfunction malfanction; - int malfunction_id = 0; - - malfunction_id = queryMalf.value(0).toString().toInt(); - malfanction.num = queryMalf.value(1).toString(); - malfanction.dmCode = queryMalf.value(2).toString(); - malfanction.description = queryMalf.value(3).toString(); - - //Выгребаем сигналы для этой неисправности - queryStr = QString("SELECT malf_sign.sign_id, malf_sign.type, malf_sign.description " - "FROM public.malf_sign " - "WHERE malf_malf_sign = %1 " - "ORDER BY malf_sign.sign_id ASC").arg( - QString::number(malfunction_id)); - - QSqlQuery querySign = QSqlQuery(*db); - if(queryExec(queryStr, &querySign)) - { - while (querySign.next()) - {//Сигналы - MalfunctionSign sign; - sign.type = querySign.value(1).toString().toInt(); - sign.description = querySign.value(2).toString(); - - malfanction.malfunctionSigns.append(sign); - }; - } - - task.addMalfunction(malfanction); - }; - } - else - { - resBool = db->rollback(); - return QList(); - } - - - //Выгребаем отчет для этой задачи - int report_id = 0; - queryStr = QString("SELECT reports.report_id " - "FROM public.reports " - "WHERE report_task = %1 " - "ORDER BY reports.report_id ASC").arg( - QString::number(task.getID())); - - QSqlQuery queryReport = QSqlQuery(*db); - - if(queryExec(queryStr, &queryReport)) - { - if (queryReport.first()) - {//Отчет - report_id = queryReport.value(0).toInt(); - task.report.id = report_id; - } - } - else - { - resBool = db->rollback(); - return QList(); - } - - if(report_id) - {//Отчет есть - //Выгребаем все item отчета - - queryStr = QString("SELECT report_items.item_id, report_items.text, report_items.doc, report_items.dm_code, report_items.title, report_items.result, report_items.item_report, report_items.number " - "FROM public.report_items " - "WHERE item_report = %1 " - "ORDER BY report_items.number ASC").arg( - QString::number(report_id)); - - QSqlQuery queryItems = QSqlQuery(*db); - - if(queryExec(queryStr, &queryItems)) - { - while (queryItems.next()) - {//report_item - FIMReportItem reportItem; - reportItem.id = queryItems.value(0).toInt(); - reportItem.text = queryItems.value(1).toString(); - reportItem.procedure.doc = queryItems.value(2).toString(); - reportItem.procedure.dmCode = queryItems.value(3).toString(); - reportItem.procedure.title = queryItems.value(4).toString(); - reportItem.procedure.result = queryItems.value(5).toString(); - //item_report - //number - - task.report.itemList.append(reportItem); - } - } - else - { - resBool = db->rollback(); - return QList(); - } - } - - listTasks.append(task); - }; - } - else - { - resBool = db->rollback(); - return QList(); - } - - resBool = db->commit(); - return listTasks; -} - -TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task) -{ - TaskAmmFim task; - - QString queryStr; - bool resBool = false; - - resBool = db->transaction(); - - queryStr = QString("SELECT tasks_fim.task_id, tasks_fim.title, tasks_fim.status " - "FROM public.tasks_fim " - "WHERE tasks_fim.task_id = %1 " - "ORDER BY tasks_fim.task_id ASC").arg( - id_task); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if(query.first()) - {//Задача - - task.setID(query.value(0).toInt()); - task.title = query.value(1).toString(); - task.status = query.value(2).toString(); - - //Выгребаем все malfunction для этой задачи - queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, " - "tasks_fim.task_id " - "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.task_fim_malf " - "WHERE malfunctions.task_fim_malf = %1 " - "ORDER BY malfunctions.num ASC").arg( - task.getID()); - - QSqlQuery queryMalf = QSqlQuery(*db); - - if(queryExec(queryStr, &queryMalf)) - { - while (queryMalf.next()) - {//Неисправность - Malfunction malfanction; - int malfunction_id = 0; - - malfunction_id = queryMalf.value(0).toString().toInt(); - malfanction.num = queryMalf.value(1).toString(); - malfanction.dmCode = queryMalf.value(2).toString(); - malfanction.description = queryMalf.value(3).toString(); - - //Выгребаем сигналы для этой неисправности - queryStr = QString("SELECT malf_sign.sign_id, malf_sign.type, malf_sign.description " - "FROM public.malf_sign " - "WHERE malf_malf_sign = %1 " - "ORDER BY malf_sign.sign_id ASC").arg( - QString::number(malfunction_id)); - - QSqlQuery querySign = QSqlQuery(*db); - if(queryExec(queryStr, &querySign)) - { - while (querySign.next()) - {//Сигналы - MalfunctionSign sign; - sign.type = querySign.value(1).toString().toInt(); - sign.description = querySign.value(2).toString(); - - malfanction.malfunctionSigns.append(sign); - }; - } - - task.addMalfunction(malfanction); - }; - } - else - { - resBool = db->rollback(); - return task; - } - - - //Выгребаем отчет для этой задачи - int report_id = 0; - queryStr = QString("SELECT reports.report_id " - "FROM public.reports " - "WHERE report_task = %1 " - "ORDER BY reports.report_id ASC").arg( - QString::number(task.getID())); - - QSqlQuery queryReport = QSqlQuery(*db); - - if(queryExec(queryStr, &queryReport)) - { - if (queryReport.first()) - {//Отчет - report_id = queryReport.value(0).toInt(); - task.report.id = report_id; - } - } - else - { - resBool = db->rollback(); - return task; - } - - if(report_id) - {//Отчет есть - //Выгребаем все item отчета - - queryStr = QString("SELECT report_items.item_id, report_items.text, report_items.doc, report_items.dm_code, report_items.title, report_items.result, report_items.item_report, report_items.number " - "FROM public.report_items " - "WHERE item_report = %1 " - "ORDER BY report_items.number ASC").arg( - QString::number(report_id)); - - QSqlQuery queryItems = QSqlQuery(*db); - - if(queryExec(queryStr, &queryItems)) - { - while (queryItems.next()) - {//report_item - FIMReportItem reportItem; - reportItem.id = queryItems.value(0).toInt(); - reportItem.text = queryItems.value(1).toString(); - reportItem.procedure.doc = queryItems.value(2).toString(); - reportItem.procedure.dmCode = queryItems.value(3).toString(); - reportItem.procedure.title = queryItems.value(4).toString(); - reportItem.procedure.result = queryItems.value(5).toString(); - //item_report - //number - - task.report.itemList.append(reportItem); - } - } - else - { - resBool = db->rollback(); - return task; - } - } - }; - } - else - { - resBool = db->rollback(); - return task; - } - - resBool = db->commit(); - return task; -} - -int DataBaseLMS::deleteReportFIM(int task_id) -{ - QString queryStr; - bool resBool = false; - int report_id = 0; - - resBool = db->transaction(); - - queryStr = QString("SELECT reports.report_id " - "FROM public.reports " - "WHERE report_task = %1 " - "ORDER BY reports.report_id ASC").arg( - QString::number(task_id)); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Отчет - report_id = query.value(0).toInt(); - } - } - if(!report_id) - { - resBool = db->rollback(); - return 0; - } - - - queryStr = QString("DELETE FROM public.report_items " - "WHERE item_report = %1 ").arg( - QString::number(report_id)); - - QSqlQuery query1 = QSqlQuery(*db); - if(!queryExec(queryStr, &query1)) - { - resBool = db->rollback(); - return 0; - } - - queryStr = QString("DELETE FROM public.reports " - "WHERE report_id = %1 ").arg( - QString::number(report_id)); - - if(!queryExec(queryStr, &query1)) - { - resBool = db->rollback(); - return 0; - } - - - queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " - "WHERE task_id = %2 ").arg( - "new", - QString::number(task_id) ); - - if(!queryExec(queryStr, &query1)) - { - resBool = db->rollback(); - return 0; - } - - - resBool = db->commit(); - return report_id; -} - -int DataBaseLMS::insertReportFIM(TaskAmmFim task) -{ - QString queryStr; - bool resBool = false; - - resBool = db->transaction(); - - //task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки - - queryStr = QString("INSERT INTO public.reports (report_task) " - "VALUES (%1) " - "RETURNING reports.report_id").arg( - task.getID()); - - int report_id = queryExecInt(queryStr); - if(!report_id) - { - resBool = db->rollback(); - return 0; - } - - int number = 0; - for(FIMReportItem reportItem : task.report.itemList) - { - queryStr = QString("INSERT INTO public.report_items (text, doc, dm_code, title, result, item_report, number) " - "VALUES ('%1', '%2', '%3', '%4', '%5', %6, %7) " - "RETURNING report_items.item_id").arg( - reportItem.text, - reportItem.procedure.doc, - reportItem.procedure.dmCode, - reportItem.procedure.title, - reportItem.procedure.result, - QString::number(report_id), - QString::number(++number)); - - if(!queryExecInt(queryStr)) - { - resBool = db->rollback(); - return 0; - } - } - - /* - queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " - "WHERE task_id = %2 ").arg( - "checkup", - QString::number(task.getID()) ); - - QSqlQuery query1 = QSqlQuery(*db); - if(!queryExec(queryStr, &query1)) - { - resBool = db->rollback(); - return 0; - } - */ - - resBool = db->commit(); - return report_id; -} - -Trainee DataBaseLMS::selectTrainee(int id_trainee) -{ - Trainee trainee; - - QString queryStr = QString("SELECT trainees.trainee_id, trainees.name, trainees.login, trainees.password, trainees.archived, trainees.logged_in, " - "groups.group_id, groups.name, " - "computers.computer_id, computers.name, computers.ip_address, " - "classrooms.classroom_id, classrooms.name " - "FROM public.trainees JOIN public.groups ON groups.group_id = trainees.group_trainee " - "LEFT OUTER JOIN public.computers ON computers.computer_id = trainees.computer_trainee " - "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.classroom_computer " - "WHERE trainees.trainee_id = %1 " - "ORDER BY groups.name, trainees.name ASC").arg( - id_trainee); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Инструктор - trainee.setID(query.value(0).toInt()); - trainee.setName(query.value(1).toString()); - trainee.setLogin(query.value(2).toString()); - trainee.setPassword(query.value(3).toString()); - trainee.setArchived(query.value(4).toBool()); - trainee.setLoggedIn(query.value(5).toBool()); - - Group group = Group(query.value(6).toInt(), query.value(7).toString()); - trainee.setGroup(group); - - Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); - Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); - trainee.setComputer(computer); - } - } - - return trainee; -} - -QList DataBaseLMS::selectAllTraineesInGroup(int id_group) -{ - QList listTrainees; - - QString queryStr = QString("SELECT trainees.trainee_id, trainees.name, trainees.login, trainees.password, trainees.archived, trainees.logged_in, " - "groups.group_id, groups.name, " - "computers.computer_id, computers.name, computers.ip_address, " - "classrooms.classroom_id, classrooms.name " - "FROM public.trainees JOIN public.groups ON groups.group_id = trainees.group_trainee " - "LEFT OUTER JOIN public.computers ON computers.computer_id = trainees.computer_trainee " - "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.classroom_computer " - "WHERE trainees.group_trainee = %1 " - "ORDER BY groups.name, trainees.name ASC").arg( - id_group); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Обучаемый - Trainee trainee; - - trainee.setID(query.value(0).toInt()); - trainee.setName(query.value(1).toString()); - trainee.setLogin(query.value(2).toString()); - trainee.setPassword(query.value(3).toString()); - trainee.setArchived(query.value(4).toBool()); - trainee.setLoggedIn(query.value(5).toBool()); - - Group group = Group(query.value(6).toInt(), query.value(7).toString()); - trainee.setGroup(group); - - Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); - Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); - trainee.setComputer(computer); - - listTrainees.append(trainee); - } - } - - return listTrainees; -} - -int DataBaseLMS::selectTraineeID(QString login, QString password) -{ - QString queryStr; - - if(password != QStringLiteral("")) - { - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees " - "WHERE login = '%1' AND password = '%2' ").arg( - login, - password ); - } - else - { - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees " - "WHERE login = '%1' ").arg( - login ); - } - - return queryExecInt(queryStr); -} - -QString DataBaseLMS::selectTraineeNameByLogin(QString login) -{ - QString queryStr = QString("SELECT trainees.name " - "FROM public.trainees " - "WHERE trainees.login = '%1' ").arg( - login ); - - return queryExecString(queryStr); -} - -QString DataBaseLMS::selectTraineeNameOnComputer(QString computer_name) -{ - QString queryStr = QString("SELECT trainees.name " - "FROM public.trainees JOIN public.computers ON computers.computer_id = trainees.computer_trainee " - "WHERE computers.name = '%1' ").arg( - computer_name); - - return queryExecString(queryStr); -} - -Trainee DataBaseLMS::selectTraineeOnComputer(QString computer_name) -{ - Trainee trainee; - - QString queryStr = QString("SELECT trainees.trainee_id, trainees.name, trainees.login, trainees.password, trainees.archived, trainees.logged_in, " - "groups.group_id, groups.name, " - "computers.computer_id, computers.name, computers.ip_address, " - "classrooms.classroom_id, classrooms.name " - "FROM public.trainees JOIN public.groups ON groups.group_id = trainees.group_trainee " - "LEFT OUTER JOIN public.computers ON computers.computer_id = trainees.computer_trainee " - "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.classroom_computer " - "WHERE computers.name = '%1' ").arg( - computer_name); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Инструктор - trainee.setID(query.value(0).toInt()); - trainee.setName(query.value(1).toString()); - trainee.setLogin(query.value(2).toString()); - trainee.setPassword(query.value(3).toString()); - trainee.setArchived(query.value(4).toBool()); - trainee.setLoggedIn(query.value(5).toBool()); - - Group group = Group(query.value(6).toInt(), query.value(7).toString()); - trainee.setGroup(group); - - Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); - Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); - trainee.setComputer(computer); - } - } - - return trainee; -} - -bool DataBaseLMS::selectTraineeArchived(int id_trainee) -{ - QString queryStr = QString("SELECT trainees.archived " - "FROM public.trainees " - "WHERE trainee_id = %1 ").arg( - id_trainee ); - - return queryExecBool(queryStr); -} - -bool DataBaseLMS::selectTraineeLoggedIn(int id_trainee) -{ - QString queryStr = QString("SELECT trainees.logged_in " - "FROM public.trainees " - "WHERE trainee_id = %1 ").arg( - id_trainee ); - - return queryExecBool(queryStr); -} - -int DataBaseLMS::updateTraineeLoggedIn(int id_trainee, bool loggedIn) -{ - QString queryStr = QString("UPDATE public.trainees " - "SET logged_in = %1 " - "WHERE trainee_id = %2 " - "RETURNING trainees.trainee_id").arg( - loggedIn ? "true" : "false", - QString::number(id_trainee) ); - - return queryExecInt(queryStr); -} - -bool DataBaseLMS::updateAllTraineesLoggedIn(bool loggedIn) -{ - QString queryStr = QString("UPDATE public.trainees " - "SET logged_in = %1 ").arg( - loggedIn ? "true" : "false"); - - QSqlQuery query = QSqlQuery(*db); - - return queryExec(queryStr, &query); -} - -int DataBaseLMS::updateTraineeArchived(int id_trainee, bool archived) -{ - QString queryStr = QString("UPDATE public.trainees " - "SET archived = %1 " - "WHERE trainee_id = %2 " - "RETURNING trainees.trainee_id").arg( - archived ? "true" : "false", - QString::number(id_trainee) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertTrainee(int id_group) -{ - QString queryStr = QString("INSERT INTO public.trainees (name, login, password, archived, logged_in, group_trainee) " - "VALUES (DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, %1) " - "RETURNING trainees.trainee_id").arg( - QString::number(id_group)); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertTrainee(Trainee trainee) -{ - QString queryStr = QString("INSERT INTO public.trainees (name, login, password, archived, logged_in, group_trainee) " - "VALUES ('%1', '%2', '%3', %4, %5, %6) " - "RETURNING trainees.trainee_id").arg( - trainee.getName(), - trainee.getLogin(), - trainee.getPassword(), - trainee.getArchived() ? "true" : "false", - trainee.getLoggedIn() ? "true" : "false", - QString::number(trainee.getGroup().getID())); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::deleteTrainee(int id_trainee) -{ - QString queryStr; - int res = 0; - bool resBool = false; - - resBool = db->transaction(); - - QSqlQuery query = QSqlQuery(*db); - - - //Удаление задач AMM - queryStr = QString("DELETE FROM public.tasks_amm " - "WHERE trainee_task = %1 ").arg( - QString::number(id_trainee)); - - if(!queryExec(queryStr, &query)) - { - resBool = db->rollback(); - return 0; - } - - - //Удаление задач FIM - - /*Выборка задач FIM для этого обучаемого*/ - queryStr = QString("SELECT tasks_fim.task_id " - "FROM public.tasks_fim " - "WHERE tasks_fim.trainee_task = %1 " - "ORDER BY tasks_fim.task_id ASC").arg( - id_trainee); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Задача - /*Удаляем все malfunction для этой задачи*/ - queryStr = QString("DELETE FROM public.malfunctions " - "WHERE malfunctions.task_fim_malf = %1 ").arg( - query.value(0).toInt()); - QSqlQuery queryDel = QSqlQuery(*db); - if(!queryExec(queryStr, &queryDel)) - { - resBool = db->rollback(); - return 0; - } - }; - } - else - { - resBool = db->rollback(); - return 0; - } - - /*Удаление непосредственно задач FIM*/ - queryStr = QString("DELETE FROM public.tasks_fim " - "WHERE trainee_task = %1 ").arg( - QString::number(id_trainee)); - - if(!queryExec(queryStr, &query)) - { - resBool = db->rollback(); - return 0; - } - - - //Удаление обучаемого - queryStr = QString("DELETE FROM public.trainees " - "WHERE trainee_id = %1 " - "RETURNING trainees.trainee_id").arg( - QString::number(id_trainee)); - - res = queryExecInt(queryStr); - if(res) - { - resBool = db->commit(); - return res; - } - else - { - resBool = db->rollback(); - return 0; - } -} - -int DataBaseLMS::updateTrainee(Trainee trainee) -{ - QString computer_id = (trainee.getComputer().getID() == 0 ? QStringLiteral("null") : QString::number(trainee.getComputer().getID())); - - QString queryStr = QString("UPDATE public.trainees " - "SET name = '%1', login = '%2', password = '%3', archived = %4, logged_in = %5, " - "group_trainee = %6, " - "computer_trainee = %7 " - "WHERE trainee_id = %8 " - "RETURNING trainees.trainee_id").arg( - trainee.getName(), - trainee.getLogin(), - trainee.getPassword(), - trainee.getArchived() ? "true" : "false", - trainee.getLoggedIn() ? "true" : "false", - QString::number(trainee.getGroup().getID()), - computer_id, - QString::number(trainee.getID()) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertTimingTrainee(int id_trainee) -{ - QString queryStr = QString("INSERT INTO public.timings (entry_time, exit_time, operating_time, timing_trainee) " - "VALUES (DEFAULT, DEFAULT, DEFAULT, %1) " - "RETURNING timings.timing_id").arg( - QString::number(id_trainee)); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateTimingTrainee(int id_trainee, TimingOfTrainee timing) -{ - QString queryStr = QString("UPDATE public.timings " - "SET entry_time = '%1', exit_time = '%2', operating_time = '%3', timing_trainee = %4 " - "WHERE timing_id = %5 " - "RETURNING timings.timing_id").arg( - timing.getEntryTimeS(), - timing.getExitTimeS(), - timing.getOperatingTimeS(), - QString::number(id_trainee), - QString::number(timing.getID()) ); - - return queryExecInt(queryStr); -} - -TimingOfTrainee DataBaseLMS::selectTimingTrainee(int id_trainee) -{ - TimingOfTrainee timing(id_trainee); - - QString queryStr = QString("SELECT timings.timing_id, timings.entry_time, timings.exit_time, timings.operating_time, timings.timing_trainee " - "FROM public.timings " - "WHERE timing_trainee = '%1'").arg(id_trainee); - - QSqlQuery querySel = QSqlQuery(*db); - - if(queryExec(queryStr, &querySel)) - { - if (querySel.first()) - {//Тайминг - timing.setID(querySel.value(0).toInt()); - timing.setEntryTime(querySel.value(1).toDateTime()); - timing.setExitTime(querySel.value(2).toDateTime()); - timing.setOperatingTime(querySel.value(3).toTime()); - timing.setTraineeID(querySel.value(4).toInt()); - } - } - - return timing; -} - int DataBaseLMS::queryExecInt(QString queryStr) { QSqlQuery query = QSqlQuery(*db); @@ -1792,7 +228,46 @@ bool DataBaseLMS::queryExec(QString queryStr, QSqlQuery *query) void DataBaseLMS::messageWarningErrorQuery(QString queryStr, QSqlQuery* query) { - QMessageBox::warning(nullptr, dbSettings.dbName, + //Запись в файл ошибок БД + QDomDocument commonDOM; + + QFile blankFile(":/resources/blankXML/ErrorDB.xml"); + + if (! blankFile.open(QFile::ReadOnly | QFile::Text)) + qDebug() << QString("messageWarningErrorQuery: Couldn't read the file: ") + ":/resources/blankXML/ErrorDB.xml"; + else + { + commonDOM.setContent(blankFile.readAll()); + blankFile.close(); + + QDomNode errorDBNode = commonDOM.namedItem("ErrorDB"); + + QDomNode errorQueryNode = commonDOM.createElement("ErrorQuery"); + errorDBNode.appendChild(errorQueryNode); + errorQueryNode.toElement().setAttribute("text", query->lastError().text()); + + QDomNode stringOfQueryNode = commonDOM.createElement("StringOfQuery"); + errorDBNode.appendChild(stringOfQueryNode); + stringOfQueryNode.toElement().setAttribute("text", queryStr); + + QDomNode executedQueryNode = commonDOM.createElement("ExecutedQuery"); + errorDBNode.appendChild(executedQueryNode); + executedQueryNode.toElement().setAttribute("text", query->executedQuery()); + + QFile xmlOutFile("ErrorDB.xml"); + if (!xmlOutFile.open(QFile::WriteOnly | QFile::Text)) + qDebug() << QString("messageWarningErrorQuery: Failed to write a file: ") + "ErrorDB.xml"; + else + { + QTextStream outFile(&xmlOutFile); + commonDOM.save(outFile, 4); + xmlOutFile.close(); + } + } + + + //Сообщение об ошибке + QMessageBox::warning(ownerWidget, dbSettings.dbName, "Error query:\n" + query->lastError().text() + "\n" + "String of query:\n" + queryStr + "\n" + "Executed query:\n" + query->executedQuery()); diff --git a/DataBaseLMS/databaselms.h b/DataBaseLMS/databaselms.h index 0f0568f..19856a2 100644 --- a/DataBaseLMS/databaselms.h +++ b/DataBaseLMS/databaselms.h @@ -3,6 +3,7 @@ #include #include +#include #include "instructor.h" #include "trainee.h" @@ -25,9 +26,13 @@ public: class DataBaseLMS { public: - DataBaseLMS(); + DataBaseLMS(QWidget *ownerWidget); ~DataBaseLMS(); +public: + const QString TypeUserDBInstructor = "instructor"; + const QString TypeUserDBTrainee = "trainee"; + protected: //Подключение bool createConnection(); @@ -38,12 +43,8 @@ protected: bool transactionBegin(); bool transactionEnd(); - //Списки - QList selectAllInstructors(); - QList selectAllTrainees(); - QList selectAllGroups(); - //Инструктор + QList selectAllInstructors(); Instructor selectInstructor(int id_instructor); int selectInstructorID(QString login, QString password = QStringLiteral("")); QString selectInstructorNameByLogin(QString login); @@ -53,19 +54,42 @@ protected: int updateInstructorLoggedIn(int id_instructor, bool loggedIn); bool updateAllInstructorsLoggedIn(bool loggedIn); int updateInstructorArchived(int id_instructor, bool archived); - int insertInstructor(); int insertInstructor(Instructor instructor); int deleteInstructor(int id_instructor); int updateInstructor(Instructor instructor); //Группа + QList selectAllGroups(); Group selectGroup(int id_group); int insertGroup(); int insertGroup(Group group); int deleteGroup(int id_group); int updateGroup(Group group); + //Обучаемый + QList selectAllTrainees(); + Trainee selectTrainee(int id_trainee); + QList selectAllTraineesInGroup(int id_group); + int selectTraineeID(QString login, QString password = QStringLiteral("")); + QString selectTraineeNameByLogin(QString login); + QString selectTraineeNameOnComputer(QString computer_name); + Trainee selectTraineeOnComputer(QString computer_name); + bool selectTraineeArchived(int id_trainee); + bool selectTraineeLoggedIn(int id_trainee); + int updateTraineeLoggedIn(int id_trainee, bool loggedIn); + bool updateAllTraineesLoggedIn(bool loggedIn); + int updateTraineeArchived(int id_trainee, bool archived); + int insertTrainee(int id_group); + int insertTrainee(Trainee trainee); + int deleteTrainee(int id_trainee); + int updateTrainee(Trainee trainee); + + //Тайминг + int insertTimingTrainee(int id_trainee); + int updateTimingTrainee(int id_trainee, TimingOfTrainee timing); + TimingOfTrainee selectTimingTrainee(int id_trainee); + //Задача AMM int insertTaskAMM(TaskAmmFim task, int id_trainee); int updateTaskAMM(TaskAmmFim task); @@ -80,33 +104,9 @@ protected: int deleteTaskFIM(int id_task); QList selectTasksFIMofTrainee(int id_trainee); TaskAmmFim selectTaskFIMbyID(int id_task); - int deleteReportFIM(int task_id); int insertReportFIM(TaskAmmFim task); - //Обучаемый - Trainee selectTrainee(int id_trainee); - QList selectAllTraineesInGroup(int id_group); - int selectTraineeID(QString login, QString password = QStringLiteral("")); - QString selectTraineeNameByLogin(QString login); - QString selectTraineeNameOnComputer(QString computer_name); - Trainee selectTraineeOnComputer(QString computer_name); - bool selectTraineeArchived(int id_trainee); - bool selectTraineeLoggedIn(int id_trainee); - int updateTraineeLoggedIn(int id_trainee, bool loggedIn); - bool updateAllTraineesLoggedIn(bool loggedIn); - int updateTraineeArchived(int id_trainee, bool archived); - - int insertTrainee(int id_group); - int insertTrainee(Trainee trainee); - int deleteTrainee(int id_trainee); - int updateTrainee(Trainee trainee); - - //Тайминг - int insertTimingTrainee(int id_trainee); - int updateTimingTrainee(int id_trainee, TimingOfTrainee timing); - TimingOfTrainee selectTimingTrainee(int id_trainee); - private: DataBaseSettings getDataBaseSettings(); int queryExecInt(QString queryStr); @@ -122,6 +122,7 @@ protected: private: bool transactionBegined; QMutex mtxAccess; + QWidget* ownerWidget; }; #endif // DATABASELMS_H diff --git a/DataBaseLMS/databaselms_groups.cpp b/DataBaseLMS/databaselms_groups.cpp new file mode 100644 index 0000000..6d7f1e0 --- /dev/null +++ b/DataBaseLMS/databaselms_groups.cpp @@ -0,0 +1,95 @@ +#include "databaselms.h" + +#include +#include +#include +#include + + +QList DataBaseLMS::selectAllGroups() +{ + QList listGroups; + + QString queryStr = QString("SELECT group_id, name " + "FROM public.groups " + "ORDER BY group_id ASC"); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Группа + Group group; + group.setID(query.value(0).toInt()); + group.setName(query.value(1).toString()); + + listGroups.append(group); + } + } + + return listGroups; +} + +Group DataBaseLMS::selectGroup(int id_group) +{ + Group group; + + QString queryStr = QString("SELECT group_id, name " + "FROM public.groups " + "WHERE groups.group_id = %1 ").arg( + id_group); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Инструктор + group.setID(query.value(0).toInt()); + group.setName(query.value(1).toString()); + } + } + + return group; +} + +int DataBaseLMS::insertGroup() +{ + QString queryStr = QString("INSERT INTO public.groups " + "DEFAULT VALUES " + "RETURNING group_id"); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertGroup(Group group) +{ + QString queryStr = QString("INSERT INTO public.groups (name) " + "VALUES ('%1') " + "RETURNING groups.group_id").arg( + group.getName()); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::deleteGroup(int id_group) +{ + QString queryStr = QString("DELETE FROM public.groups " + "WHERE group_id = %1 " + "RETURNING groups.group_id").arg( + QString::number(id_group)); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateGroup(Group group) +{ + QString queryStr = QString("UPDATE public.groups SET name = '%1' " + "WHERE group_id = %2 " + "RETURNING groups.group_id").arg( + group.getName(), + QString::number(group.getID()) ); + + return queryExecInt(queryStr); +} diff --git a/DataBaseLMS/databaselms_instructors.cpp b/DataBaseLMS/databaselms_instructors.cpp new file mode 100644 index 0000000..51649e3 --- /dev/null +++ b/DataBaseLMS/databaselms_instructors.cpp @@ -0,0 +1,231 @@ +#include "databaselms.h" + +#include +#include +#include +#include + + +QList DataBaseLMS::selectAllInstructors() +{ + QList listInstructors; + + QString queryStr = QString("SELECT user_id, name, login, password, is_admin, archived, logged_in " + "FROM public.users " + "WHERE users.type = '%1' " + "ORDER BY user_id ASC").arg( + TypeUserDBInstructor); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Инструктор + Instructor instructor; + instructor.setID(query.value(0).toInt()); + instructor.setName(query.value(1).toString()); + instructor.setLogin(query.value(2).toString()); + instructor.setPassword(query.value(3).toString()); + instructor.setIsAdmin(query.value(4).toBool()); + instructor.setArchived(query.value(5).toBool()); + instructor.setLoggedIn(query.value(6).toBool()); + + listInstructors.append(instructor); + } + } + + return listInstructors; +} + +Instructor DataBaseLMS::selectInstructor(int id_instructor) +{ + Instructor instructor; + + QString queryStr = QString("SELECT user_id, name, login, password, is_admin, archived, logged_in " + "FROM public.users " + "WHERE users.user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_instructor), + TypeUserDBInstructor); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Инструктор + instructor.setID(query.value(0).toInt()); + instructor.setName(query.value(1).toString()); + instructor.setLogin(query.value(2).toString()); + instructor.setPassword(query.value(3).toString()); + instructor.setIsAdmin(query.value(4).toBool()); + instructor.setArchived(query.value(5).toBool()); + instructor.setLoggedIn(query.value(6).toBool()); + } + } + + return instructor; +} + +int DataBaseLMS::selectInstructorID(QString login, QString password) +{ + QString queryStr; + + if(password != QStringLiteral("")) + { + queryStr = QString("SELECT users.user_id " + "FROM public.users " + "WHERE login = '%1' AND password = '%2' AND users.type = '%3' ").arg( + login, + password, + TypeUserDBInstructor); + } + else + { + queryStr = QString("SELECT users.user_id " + "FROM public.users " + "WHERE login = '%1' AND users.type = '%2' ").arg( + login, + TypeUserDBInstructor); + } + + return queryExecInt(queryStr); +} + +QString DataBaseLMS::selectInstructorNameByLogin(QString login) +{ + QString queryStr = QString("SELECT users.name " + "FROM public.users " + "WHERE users.login = '%1' AND users.type = '%2' ").arg( + login, + TypeUserDBInstructor ); + + return queryExecString(queryStr); +} + +bool DataBaseLMS::selectInstructorIsAdmin(int id_instructor) +{ + QString queryStr = QString("SELECT users.is_admin " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_instructor), + TypeUserDBInstructor ); + + return queryExecBool(queryStr); +} + +bool DataBaseLMS::selectInstructorLoggedIn(int id_instructor) +{ + QString queryStr = QString("SELECT users.logged_in " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_instructor), + TypeUserDBInstructor ); + + return queryExecBool(queryStr); +} + +bool DataBaseLMS::selectInstructorArchived(int id_instructor) +{ + QString queryStr = QString("SELECT users.archived " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_instructor), + TypeUserDBInstructor ); + + return queryExecBool(queryStr); +} + +int DataBaseLMS::updateInstructorLoggedIn(int id_instructor, bool loggedIn) +{ + QString queryStr = QString("UPDATE public.users " + "SET logged_in = %1 " + "WHERE user_id = %2 AND users.type = '%3' " + "RETURNING users.user_id").arg( + loggedIn ? "true" : "false", + QString::number(id_instructor), + TypeUserDBInstructor); + + return queryExecInt(queryStr); +} + +bool DataBaseLMS::updateAllInstructorsLoggedIn(bool loggedIn) +{ + QString queryStr = QString("UPDATE public.users " + "SET logged_in = %1 " + "WHERE users.type = '%2' ").arg( + loggedIn ? "true" : "false", + TypeUserDBInstructor); + + QSqlQuery query = QSqlQuery(*db); + + return queryExec(queryStr, &query); +} + +int DataBaseLMS::updateInstructorArchived(int id_instructor, bool archived) +{ + QString queryStr = QString("UPDATE public.users " + "SET archived = %1 " + "WHERE user_id = %2 AND users.type = '%3' " + "RETURNING users.user_id").arg( + archived ? "true" : "false", + QString::number(id_instructor), + TypeUserDBInstructor); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertInstructor() +{ + QString queryStr = QString("INSERT INTO public.users (type, name, login, password, is_admin, archived, logged_in)" + "VALUES ('%1', DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT)" + "RETURNING user_id").arg( + TypeUserDBInstructor); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertInstructor(Instructor instructor) +{ + QString queryStr = QString("INSERT INTO public.users (type, name, login, password, is_admin, archived, logged_in) " + "VALUES ('%1', '%2', '%3', '%4', %5, %6, %7) " + "RETURNING user_id").arg( + TypeUserDBInstructor, + instructor.getName(), + instructor.getLogin(), + instructor.getPassword(), + instructor.getIsAdmin() ? "true" : "false", + instructor.getArchived() ? "true" : "false", + instructor.getLoggedIn() ? "true" : "false"); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::deleteInstructor(int id_instructor) +{ + QString queryStr = QString("DELETE FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' " + "RETURNING users.user_id").arg( + QString::number(id_instructor), + TypeUserDBInstructor); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateInstructor(Instructor instructor) +{ + QString queryStr = QString("UPDATE public.users " + "SET name = '%1', login = '%2', password = '%3', is_admin = %4, archived = %5, logged_in = %6 " + "WHERE user_id = %7 AND users.type = '%8' " + "RETURNING users.user_id").arg( + instructor.getName(), + instructor.getLogin(), + instructor.getPassword(), + instructor.getIsAdmin() ? "true" : "false", + instructor.getArchived() ? "true" : "false", + instructor.getLoggedIn() ? "true" : "false", + QString::number(instructor.getID()), + TypeUserDBInstructor); + + return queryExecInt(queryStr); +} diff --git a/DataBaseLMS/databaselms_tasks.cpp b/DataBaseLMS/databaselms_tasks.cpp new file mode 100644 index 0000000..d47cf8a --- /dev/null +++ b/DataBaseLMS/databaselms_tasks.cpp @@ -0,0 +1,830 @@ +#include "databaselms.h" + +#include +#include +#include +#include + +int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee) +{ + task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки + + QString queryStr = QString("INSERT INTO public.tasks_amm (title, dm_code, fk_trainee_id) " + "VALUES ('%1', '%2', %3) " + "RETURNING tasks_amm.task_id").arg( + task.ammProcedure.title, + task.ammProcedure.dmCode, + QString::number(id_trainee)); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateTaskAMM(TaskAmmFim task) +{ + task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки + + QString queryStr = QString("UPDATE public.tasks_amm SET title = '%1', dm_code = '%2', status = '%3' " + "WHERE task_id = %4 " + "RETURNING tasks_amm.task_id").arg( + task.ammProcedure.title, + task.ammProcedure.dmCode, + task.status, + QString::number(task.getID()) ); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status) +{ + QString queryStr; + bool resBool = false; + int id_trainee = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT users.user_id " + "FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id " + "WHERE tasks_amm.task_id = %1 " + "ORDER BY users.user_id ASC").arg( + QString::number(task_id)); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + id_trainee = query.value(0).toInt(); + } + } + if(!id_trainee) + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("UPDATE public.tasks_amm SET status = '%1' " + "WHERE task_id = %2 " + "RETURNING tasks_amm.task_id").arg( + status, + QString::number(task_id) ); + + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + + resBool = db->commit(); + return id_trainee; +} + +int DataBaseLMS::deleteTaskAMM(int id_task) +{ + QString queryStr; + bool resBool = false; + int id_trainee = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT users.user_id " + "FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id " + "WHERE tasks_amm.task_id = %1 " + "ORDER BY users.user_id ASC").arg( + QString::number(id_task)); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + id_trainee = query.value(0).toInt(); + } + } + if(!id_trainee) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("DELETE FROM public.tasks_amm " + "WHERE task_id = %1 " + "RETURNING tasks_amm.task_id").arg( + QString::number(id_task)); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + + resBool = db->commit(); + return id_trainee; +} + +QList DataBaseLMS::selectTasksAMMofTrainee(int id_trainee) +{ + QList listTasks; + + QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, " + "users.user_id " + "FROM public.tasks_amm JOIN public.users ON users.user_id = tasks_amm.fk_trainee_id " + "WHERE tasks_amm.fk_trainee_id = %1 " + "ORDER BY tasks_amm.task_id ASC").arg( + id_trainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Задача + TaskAmmFim task; + + task.setID(query.value(0).toInt()); + task.ammProcedure.title = query.value(1).toString(); + task.ammProcedure.dmCode = query.value(2).toString(); + task.status = query.value(3).toString(); + + listTasks.append(task); + } + } + + return listTasks; +} + +TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task) +{ + TaskAmmFim task; + + QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status " + "FROM public.tasks_amm " + "WHERE tasks_amm.task_id = %1 " + "ORDER BY tasks_amm.task_id ASC").arg( + id_task); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Задача + task.setID(query.value(0).toInt()); + task.ammProcedure.title = query.value(1).toString(); + task.ammProcedure.dmCode = query.value(2).toString(); + task.status = query.value(3).toString(); + } + } + + return task; +} + +int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) +{ + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки + + queryStr = QString("INSERT INTO public.tasks_fim (title, fk_trainee_id) " + "VALUES ('%1', %2) " + "RETURNING tasks_fim.task_id").arg( + task.title, + QString::number(id_trainee)); + + int task_id = queryExecInt(queryStr); + if(!task_id) + { + resBool = db->rollback(); + return 0; + } + + for(Malfunction malfanction : task.malfunctionList) + { + malfanction.description = malfanction.description.replace("'", "''"); //Задваиваем одинарные кавычки + + queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, fk_task_fim_id) " + "VALUES ('%1', '%2', '%3', %4) " + "RETURNING malfunctions.malfunction_id").arg( + malfanction.num, + malfanction.dmCode, + malfanction.description, + QString::number(task_id)); + + int malfunction_id = queryExecInt(queryStr); + if(!malfunction_id) + { + resBool = db->rollback(); + return 0; + } + + //Sign + for(MalfunctionSign sign : malfanction.malfunctionSigns) + { + sign.description = sign.description.replace("'", "''"); //Задваиваем одинарные кавычки + + queryStr = QString("INSERT INTO public.malf_sign (type, description, fk_malfunction_id) " + "VALUES ('%1', '%2', %3) " + "RETURNING malf_sign.sign_id").arg( + QString::number(sign.type), + sign.description, + QString::number(malfunction_id)); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + } + } + + resBool = db->commit(); + return task_id; +} + +int DataBaseLMS::updateTaskFIM(TaskAmmFim task) +{ + task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки + + QString queryStr = QString("UPDATE public.tasks_fim SET title = '%1', status = '%2' " + "WHERE task_id = %3 " + "RETURNING tasks_fim.task_id").arg( + task.title, + task.status, + QString::number(task.getID()) ); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateStatusTaskFIM(int task_id, QString status) +{ + QString queryStr; + bool resBool = false; + int id_trainee = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT users.user_id " + "FROM public.users JOIN public.tasks_fim ON users.user_id = tasks_fim.fk_trainee_id " + "WHERE tasks_fim.task_id = %1 " + "ORDER BY users.user_id ASC").arg( + QString::number(task_id)); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + id_trainee = query.value(0).toInt(); + } + } + if(!id_trainee) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " + "WHERE task_id = %2 " + "RETURNING tasks_fim.task_id").arg( + status, + QString::number(task_id) ); + + QSqlQuery query1 = QSqlQuery(*db); + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + + resBool = db->commit(); + return id_trainee; +} + +int DataBaseLMS::deleteTaskFIM(int id_task) +{ + QString queryStr; + bool resBool = false; + int id_trainee = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT users.user_id " + "FROM public.users JOIN public.tasks_fim ON users.user_id = tasks_fim.fk_trainee_id " + "WHERE tasks_fim.task_id = %1 " + "ORDER BY users.user_id ASC").arg( + QString::number(id_task)); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + id_trainee = query.value(0).toInt(); + } + } + if(!id_trainee) + { + resBool = db->rollback(); + return 0; + } + + //Выгребаем все malfunction для этой задачи + queryStr = QString("SELECT malfunctions.malfunction_id " + "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id " + "WHERE malfunctions.fk_task_fim_id = %1 " + "ORDER BY malfunctions.malfunction_id ASC").arg( + id_task); + QSqlQuery queryMalf = QSqlQuery(*db); + + if(queryExec(queryStr, &queryMalf)) + { + while (queryMalf.next()) + {//Неисправность + int malfunction_id = 0; + + malfunction_id = queryMalf.value(0).toString().toInt(); + + if(malfunction_id) + { + queryStr = QString("DELETE FROM public.malf_sign " + "WHERE fk_malfunction_id = %1 ").arg( + malfunction_id); + + QSqlQuery querySign = QSqlQuery(*db); + if(!queryExec(queryStr, &querySign)) + { + resBool = db->rollback(); + return 0; + } + } + }; + } + else + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("DELETE FROM public.malfunctions " + "WHERE fk_task_fim_id = %1 ").arg( + QString::number(id_task)); + + QSqlQuery query1 = QSqlQuery(*db); + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("DELETE FROM public.tasks_fim " + "WHERE task_id = %1 " + "RETURNING tasks_fim.task_id").arg( + QString::number(id_task)); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + + resBool = db->commit(); + return id_trainee; +} + +QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) +{ + QList listTasks; + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + queryStr = QString("SELECT tasks_fim.task_id, tasks_fim.title, tasks_fim.status, " + "users.user_id " + "FROM public.tasks_fim JOIN public.users ON users.user_id = tasks_fim.fk_trainee_id " + "WHERE tasks_fim.fk_trainee_id = %1 " + "ORDER BY tasks_fim.task_id ASC").arg( + id_trainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Задача + TaskAmmFim task; + + task.setID(query.value(0).toInt()); + task.title = query.value(1).toString(); + task.status = query.value(2).toString(); + + //Выгребаем все malfunction для этой задачи + queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, " + "tasks_fim.task_id " + "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id " + "WHERE malfunctions.fk_task_fim_id = %1 " + "ORDER BY malfunctions.num ASC").arg( + task.getID()); + + QSqlQuery queryMalf = QSqlQuery(*db); + + if(queryExec(queryStr, &queryMalf)) + { + while (queryMalf.next()) + {//Неисправность + Malfunction malfanction; + int malfunction_id = 0; + + malfunction_id = queryMalf.value(0).toString().toInt(); + malfanction.num = queryMalf.value(1).toString(); + malfanction.dmCode = queryMalf.value(2).toString(); + malfanction.description = queryMalf.value(3).toString(); + + //Выгребаем сигналы для этой неисправности + queryStr = QString("SELECT malf_sign.sign_id, malf_sign.type, malf_sign.description " + "FROM public.malf_sign " + "WHERE fk_malfunction_id = %1 " + "ORDER BY malf_sign.sign_id ASC").arg( + QString::number(malfunction_id)); + + QSqlQuery querySign = QSqlQuery(*db); + if(queryExec(queryStr, &querySign)) + { + while (querySign.next()) + {//Сигналы + MalfunctionSign sign; + sign.type = querySign.value(1).toString().toInt(); + sign.description = querySign.value(2).toString(); + + malfanction.malfunctionSigns.append(sign); + }; + } + + task.addMalfunction(malfanction); + }; + } + else + { + resBool = db->rollback(); + return QList(); + } + + + //Выгребаем отчет для этой задачи + int report_id = 0; + queryStr = QString("SELECT reports.report_id " + "FROM public.reports " + "WHERE fk_task_fim_id = %1 " + "ORDER BY reports.report_id ASC").arg( + QString::number(task.getID())); + + QSqlQuery queryReport = QSqlQuery(*db); + + if(queryExec(queryStr, &queryReport)) + { + if (queryReport.first()) + {//Отчет + report_id = queryReport.value(0).toInt(); + task.report.id = report_id; + } + } + else + { + resBool = db->rollback(); + return QList(); + } + + if(report_id) + {//Отчет есть + //Выгребаем все item отчета + + queryStr = QString("SELECT report_items.item_id, report_items.text, report_items.doc, report_items.dm_code, report_items.title, report_items.result, report_items.fk_report_id, report_items.number " + "FROM public.report_items " + "WHERE fk_report_id = %1 " + "ORDER BY report_items.number ASC").arg( + QString::number(report_id)); + + QSqlQuery queryItems = QSqlQuery(*db); + + if(queryExec(queryStr, &queryItems)) + { + while (queryItems.next()) + {//report_item + FIMReportItem reportItem; + reportItem.id = queryItems.value(0).toInt(); + reportItem.text = queryItems.value(1).toString(); + reportItem.procedure.doc = queryItems.value(2).toString(); + reportItem.procedure.dmCode = queryItems.value(3).toString(); + reportItem.procedure.title = queryItems.value(4).toString(); + reportItem.procedure.result = queryItems.value(5).toString(); + //item_report + //number + + task.report.itemList.append(reportItem); + } + } + else + { + resBool = db->rollback(); + return QList(); + } + } + + listTasks.append(task); + }; + } + else + { + resBool = db->rollback(); + return QList(); + } + + resBool = db->commit(); + return listTasks; +} + +TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task) +{ + TaskAmmFim task; + + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + queryStr = QString("SELECT tasks_fim.task_id, tasks_fim.title, tasks_fim.status " + "FROM public.tasks_fim " + "WHERE tasks_fim.task_id = %1 " + "ORDER BY tasks_fim.task_id ASC").arg( + id_task); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if(query.first()) + {//Задача + + task.setID(query.value(0).toInt()); + task.title = query.value(1).toString(); + task.status = query.value(2).toString(); + + //Выгребаем все malfunction для этой задачи + queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, " + "tasks_fim.task_id " + "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id " + "WHERE malfunctions.fk_task_fim_id = %1 " + "ORDER BY malfunctions.num ASC").arg( + task.getID()); + + QSqlQuery queryMalf = QSqlQuery(*db); + + if(queryExec(queryStr, &queryMalf)) + { + while (queryMalf.next()) + {//Неисправность + Malfunction malfanction; + int malfunction_id = 0; + + malfunction_id = queryMalf.value(0).toString().toInt(); + malfanction.num = queryMalf.value(1).toString(); + malfanction.dmCode = queryMalf.value(2).toString(); + malfanction.description = queryMalf.value(3).toString(); + + //Выгребаем сигналы для этой неисправности + queryStr = QString("SELECT malf_sign.sign_id, malf_sign.type, malf_sign.description " + "FROM public.malf_sign " + "WHERE fk_malfunction_id = %1 " + "ORDER BY malf_sign.sign_id ASC").arg( + QString::number(malfunction_id)); + + QSqlQuery querySign = QSqlQuery(*db); + if(queryExec(queryStr, &querySign)) + { + while (querySign.next()) + {//Сигналы + MalfunctionSign sign; + sign.type = querySign.value(1).toString().toInt(); + sign.description = querySign.value(2).toString(); + + malfanction.malfunctionSigns.append(sign); + }; + } + + task.addMalfunction(malfanction); + }; + } + else + { + resBool = db->rollback(); + return task; + } + + + //Выгребаем отчет для этой задачи + int report_id = 0; + queryStr = QString("SELECT reports.report_id " + "FROM public.reports " + "WHERE fk_task_fim_id = %1 " + "ORDER BY reports.report_id ASC").arg( + QString::number(task.getID())); + + QSqlQuery queryReport = QSqlQuery(*db); + + if(queryExec(queryStr, &queryReport)) + { + if (queryReport.first()) + {//Отчет + report_id = queryReport.value(0).toInt(); + task.report.id = report_id; + } + } + else + { + resBool = db->rollback(); + return task; + } + + if(report_id) + {//Отчет есть + //Выгребаем все item отчета + + queryStr = QString("SELECT report_items.item_id, report_items.text, report_items.doc, report_items.dm_code, report_items.title, report_items.result, report_items.fk_report_id, report_items.number " + "FROM public.report_items " + "WHERE fk_report_id = %1 " + "ORDER BY report_items.number ASC").arg( + QString::number(report_id)); + + QSqlQuery queryItems = QSqlQuery(*db); + + if(queryExec(queryStr, &queryItems)) + { + while (queryItems.next()) + {//report_item + FIMReportItem reportItem; + reportItem.id = queryItems.value(0).toInt(); + reportItem.text = queryItems.value(1).toString(); + reportItem.procedure.doc = queryItems.value(2).toString(); + reportItem.procedure.dmCode = queryItems.value(3).toString(); + reportItem.procedure.title = queryItems.value(4).toString(); + reportItem.procedure.result = queryItems.value(5).toString(); + //item_report + //number + + task.report.itemList.append(reportItem); + } + } + else + { + resBool = db->rollback(); + return task; + } + } + }; + } + else + { + resBool = db->rollback(); + return task; + } + + resBool = db->commit(); + return task; +} + +int DataBaseLMS::deleteReportFIM(int task_id) +{ + QString queryStr; + bool resBool = false; + int report_id = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT reports.report_id " + "FROM public.reports " + "WHERE fk_task_fim_id = %1 " + "ORDER BY reports.report_id ASC").arg( + QString::number(task_id)); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Отчет + report_id = query.value(0).toInt(); + } + } + if(!report_id) + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("DELETE FROM public.report_items " + "WHERE fk_report_id = %1 ").arg( + QString::number(report_id)); + + QSqlQuery query1 = QSqlQuery(*db); + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("DELETE FROM public.reports " + "WHERE report_id = %1 ").arg( + QString::number(report_id)); + + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " + "WHERE task_id = %2 ").arg( + "new", + QString::number(task_id) ); + + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + + + resBool = db->commit(); + return report_id; +} + +int DataBaseLMS::insertReportFIM(TaskAmmFim task) +{ + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + //task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки + + queryStr = QString("INSERT INTO public.reports (fk_task_fim_id) " + "VALUES (%1) " + "RETURNING reports.report_id").arg( + task.getID()); + + int report_id = queryExecInt(queryStr); + if(!report_id) + { + resBool = db->rollback(); + return 0; + } + + int number = 0; + for(FIMReportItem reportItem : task.report.itemList) + { + queryStr = QString("INSERT INTO public.report_items (text, doc, dm_code, title, result, fk_report_id, number) " + "VALUES ('%1', '%2', '%3', '%4', '%5', %6, %7) " + "RETURNING report_items.item_id").arg( + reportItem.text, + reportItem.procedure.doc, + reportItem.procedure.dmCode, + reportItem.procedure.title, + reportItem.procedure.result, + QString::number(report_id), + QString::number(++number)); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + } + + /* + queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " + "WHERE task_id = %2 ").arg( + "checkup", + QString::number(task.getID()) ); + + QSqlQuery query1 = QSqlQuery(*db); + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + */ + + resBool = db->commit(); + return report_id; +} diff --git a/DataBaseLMS/databaselms_trainees.cpp b/DataBaseLMS/databaselms_trainees.cpp new file mode 100644 index 0000000..d351765 --- /dev/null +++ b/DataBaseLMS/databaselms_trainees.cpp @@ -0,0 +1,565 @@ +#include "databaselms.h" + +#include +#include +#include +#include + + +QList DataBaseLMS::selectAllTrainees() +{ + QList listTrainees; + + QString queryStr = QString("SELECT users.user_id, users.name, users.login, users.password, users.archived, users.logged_in, " + "groups.group_id, groups.name, " + "computers.computer_id, computers.name, computers.ip_address, " + "classrooms.classroom_id, classrooms.name " + "FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id " + "LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id " + "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id " + "WHERE users.type = '%1' " + "ORDER BY groups.name, users.name ASC").arg( + TypeUserDBTrainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Обучаемый + Trainee trainee; + + trainee.setID(query.value(0).toInt()); + trainee.setName(query.value(1).toString()); + trainee.setLogin(query.value(2).toString()); + trainee.setPassword(query.value(3).toString()); + trainee.setArchived(query.value(4).toBool()); + trainee.setLoggedIn(query.value(5).toBool()); + + Group group = Group(query.value(6).toInt(), query.value(7).toString()); + trainee.setGroup(group); + + Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); + Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); + trainee.setComputer(computer); + + listTrainees.append(trainee); + } + } + + return listTrainees; +} + +Trainee DataBaseLMS::selectTrainee(int id_trainee) +{ + Trainee trainee; + + QString queryStr = QString("SELECT users.user_id, users.name, users.login, users.password, users.archived, users.logged_in, " + "groups.group_id, groups.name, " + "computers.computer_id, computers.name, computers.ip_address, " + "classrooms.classroom_id, classrooms.name " + "FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id " + "LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id " + "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id " + "WHERE users.user_id = %1 AND users.type = '%2' " + "ORDER BY groups.name, trainees.name ASC").arg( + QString::number(id_trainee), + TypeUserDBTrainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + trainee.setID(query.value(0).toInt()); + trainee.setName(query.value(1).toString()); + trainee.setLogin(query.value(2).toString()); + trainee.setPassword(query.value(3).toString()); + trainee.setArchived(query.value(4).toBool()); + trainee.setLoggedIn(query.value(5).toBool()); + + Group group = Group(query.value(6).toInt(), query.value(7).toString()); + trainee.setGroup(group); + + Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); + Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); + trainee.setComputer(computer); + } + } + + return trainee; +} + +QList DataBaseLMS::selectAllTraineesInGroup(int id_group) +{ + QList listTrainees; + + QString queryStr = QString("SELECT users.user_id, users.name, users.login, users.password, users.archived, users.logged_in, " + "groups.group_id, groups.name, " + "computers.computer_id, computers.name, computers.ip_address, " + "classrooms.classroom_id, classrooms.name " + "FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id " + "LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id " + "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id " + "WHERE users.fk_group_id = %1 AND users.type = '%2' " + "ORDER BY groups.name, users.name ASC").arg( + QString::number(id_group), + TypeUserDBTrainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Обучаемый + Trainee trainee; + + trainee.setID(query.value(0).toInt()); + trainee.setName(query.value(1).toString()); + trainee.setLogin(query.value(2).toString()); + trainee.setPassword(query.value(3).toString()); + trainee.setArchived(query.value(4).toBool()); + trainee.setLoggedIn(query.value(5).toBool()); + + Group group = Group(query.value(6).toInt(), query.value(7).toString()); + trainee.setGroup(group); + + Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); + Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); + trainee.setComputer(computer); + + listTrainees.append(trainee); + } + } + + return listTrainees; +} + +int DataBaseLMS::selectTraineeID(QString login, QString password) +{ + QString queryStr; + + if(password != QStringLiteral("")) + { + queryStr = QString("SELECT users.user_id " + "FROM public.users " + "WHERE login = '%1' AND password = '%2' AND users.type = '%3' ").arg( + login, + password, + TypeUserDBTrainee); + } + else + { + queryStr = QString("SELECT users.user_id " + "FROM public.users " + "WHERE login = '%1' AND users.type = '%2' ").arg( + login, + TypeUserDBTrainee); + } + + return queryExecInt(queryStr); +} + +QString DataBaseLMS::selectTraineeNameByLogin(QString login) +{ + QString queryStr = QString("SELECT users.name " + "FROM public.users " + "WHERE users.login = '%1' AND users.type = '%2' ").arg( + login, + TypeUserDBTrainee); + + return queryExecString(queryStr); +} + +QString DataBaseLMS::selectTraineeNameOnComputer(QString computer_name) +{ + QString queryStr = QString("SELECT users.name " + "FROM public.users JOIN public.computers ON computers.computer_id = users.fk_computer_id " + "WHERE computers.name = '%1' AND users.type = '%2' ").arg( + computer_name, + TypeUserDBTrainee); + + return queryExecString(queryStr); +} + +Trainee DataBaseLMS::selectTraineeOnComputer(QString computer_name) +{ + Trainee trainee; + + QString queryStr = QString("SELECT users.trainee_id, users.name, users.login, users.password, users.archived, users.logged_in, " + "groups.group_id, groups.name, " + "computers.computer_id, computers.name, computers.ip_address, " + "classrooms.classroom_id, classrooms.name " + "FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id " + "LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id " + "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id " + "WHERE computers.name = '%1' AND users.type = '%2' ").arg( + computer_name, + TypeUserDBTrainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + trainee.setID(query.value(0).toInt()); + trainee.setName(query.value(1).toString()); + trainee.setLogin(query.value(2).toString()); + trainee.setPassword(query.value(3).toString()); + trainee.setArchived(query.value(4).toBool()); + trainee.setLoggedIn(query.value(5).toBool()); + + Group group = Group(query.value(6).toInt(), query.value(7).toString()); + trainee.setGroup(group); + + Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); + Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); + trainee.setComputer(computer); + } + } + + return trainee; +} + +bool DataBaseLMS::selectTraineeArchived(int id_trainee) +{ + QString queryStr = QString("SELECT users.archived " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_trainee), + TypeUserDBTrainee); + + return queryExecBool(queryStr); +} + +bool DataBaseLMS::selectTraineeLoggedIn(int id_trainee) +{ + QString queryStr = QString("SELECT users.logged_in " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_trainee), + TypeUserDBTrainee ); + + return queryExecBool(queryStr); +} + +int DataBaseLMS::updateTraineeLoggedIn(int id_trainee, bool loggedIn) +{ + QString queryStr = QString("UPDATE public.users " + "SET logged_in = %1 " + "WHERE user_id = %2 AND users.type = '%3' " + "RETURNING users.user_id").arg( + loggedIn ? "true" : "false", + QString::number(id_trainee), + TypeUserDBTrainee); + + return queryExecInt(queryStr); +} + +bool DataBaseLMS::updateAllTraineesLoggedIn(bool loggedIn) +{ + QString queryStr = QString("UPDATE public.users " + "SET logged_in = %1 " + "WHERE users.type = '%2' ").arg( + loggedIn ? "true" : "false", + TypeUserDBTrainee); + + QSqlQuery query = QSqlQuery(*db); + + return queryExec(queryStr, &query); +} + +int DataBaseLMS::updateTraineeArchived(int id_trainee, bool archived) +{ + QString queryStr = QString("UPDATE public.users " + "SET archived = %1 " + "WHERE user_id = %2 AND users.type = '%3' " + "RETURNING users.user_id").arg( + archived ? "true" : "false", + QString::number(id_trainee), + TypeUserDBTrainee); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertTrainee(int id_group) +{ + QString queryStr = QString("INSERT INTO public.users (type, name, login, password, archived, logged_in, fk_group_id) " + "VALUES ('%1', DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, %2) " + "RETURNING users.user_id").arg( + TypeUserDBTrainee, + QString::number(id_group)); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertTrainee(Trainee trainee) +{ + QString queryStr = QString("INSERT INTO public.users (type, name, login, password, archived, logged_in, fk_group_id) " + "VALUES ('%1', '%2', '%3', '%4', %5, %6, %7) " + "RETURNING users.user_id").arg( + TypeUserDBTrainee, + trainee.getName(), + trainee.getLogin(), + trainee.getPassword(), + trainee.getArchived() ? "true" : "false", + trainee.getLoggedIn() ? "true" : "false", + QString::number(trainee.getGroup().getID())); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::deleteTrainee(int id_trainee) +{ + QString queryStr; + int res = 0; + bool resBool = false; + + resBool = db->transaction(); + + + //Удаление задач AMM + queryStr = QString("DELETE FROM public.tasks_amm " + "WHERE fk_trainee_id = %1 ").arg( + QString::number(id_trainee)); + + QSqlQuery queryTasksAMMDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryTasksAMMDEL)) + { + resBool = db->rollback(); + return 0; + } + + + //Удаление задач FIM + + /*Выборка задач FIM для этого обучаемого*/ + queryStr = QString("SELECT tasks_fim.task_id " + "FROM public.tasks_fim " + "WHERE tasks_fim.fk_trainee_id = %1 " + "ORDER BY tasks_fim.task_id ASC").arg( + id_trainee); + + QSqlQuery queryTasksFIMSEL = QSqlQuery(*db); + if(queryExec(queryStr, &queryTasksFIMSEL)) + { + while (queryTasksFIMSEL.next()) + {//Задача + int task_id = queryTasksFIMSEL.value(0).toInt(); + + /*Выборка неисправностей для этой задачи*/ + queryStr = QString("SELECT malfunctions.malfunction_id " + "FROM public.malfunctions " + "WHERE malfunctions.fk_task_fim_id = %1 " + "ORDER BY malfunctions.malfunction_id ASC").arg( + task_id); + + QSqlQuery queryMulfSEL = QSqlQuery(*db); + if(queryExec(queryStr, &queryMulfSEL)) + { + while (queryMulfSEL.next()) + {//Неисправность + int mulf_id = queryMulfSEL.value(0).toInt(); + + /*Удаление сигналов для этой неисправности*/ + queryStr = QString("DELETE FROM public.mals_signs " + "WHERE mals_signs.fk_mulfunction_id = %1 ").arg( + mulf_id); + QSqlQuery querySign = QSqlQuery(*db); + if(!queryExec(queryStr, &querySign)) + { + resBool = db->rollback(); + return 0; + } + }; + + } + else + { + resBool = db->rollback(); + return 0; + } + + /*Удаление неисправностей*/ + queryStr = QString("DELETE FROM public.malfunctions " + "WHERE malfunctions.fk_task_fim_id = %1 ").arg( + task_id); + QSqlQuery queryMulfDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryMulfDEL)) + { + resBool = db->rollback(); + return 0; + } + + /*Удаление отчетов для задачи*/ + /*Выборка отчетов для этой задачи*/ + queryStr = QString("SELECT reports.report_id " + "FROM public.reports " + "WHERE reports.fk_task_fim_id = %1 " + "ORDER BY reports.report_id ASC").arg( + task_id); + QSqlQuery queryReportsSEL = QSqlQuery(*db); + if(queryExec(queryStr, &queryReportsSEL)) + { + while (queryReportsSEL.next()) + {//отчет + int report_id = queryReportsSEL.value(0).toInt(); + + /*Удаление items для этого отчета*/ + queryStr = QString("DELETE FROM public.report_items " + "WHERE report_items.fk_report_id = %1 ").arg( + report_id); + QSqlQuery queryReportDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryReportDEL)) + { + resBool = db->rollback(); + return 0; + } + }; + + } + else + { + resBool = db->rollback(); + return 0; + } + + /*Удаление отчетов*/ + queryStr = QString("DELETE FROM public.reports " + "WHERE reports.fk_task_fim_id = %1 ").arg( + task_id); + QSqlQuery queryReportsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryReportsDEL)) + { + resBool = db->rollback(); + return 0; + } + // //////////////////////////// + }; + } + else + { + resBool = db->rollback(); + return 0; + } + + /*Удаление непосредственно задач FIM*/ + queryStr = QString("DELETE FROM public.tasks_fim " + "WHERE fk_trainee_id = %1 ").arg( + QString::number(id_trainee)); + + QSqlQuery queryTasksFIMDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryTasksFIMDEL)) + { + resBool = db->rollback(); + return 0; + } + + /*Удаление таймингов для обучаемого*/ + queryStr = QString("DELETE FROM public.timings " + "WHERE fk_trainee_id = %1 ").arg( + QString::number(id_trainee)); + + QSqlQuery queryTimingsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryTimingsDEL)) + { + resBool = db->rollback(); + return 0; + } + // //////////////////////////// + + + //Удаление обучаемого + queryStr = QString("DELETE FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' " + "RETURNING users.user_id").arg( + QString::number(id_trainee), + TypeUserDBTrainee); + + res = queryExecInt(queryStr); + if(res) + { + resBool = db->commit(); + return res; + } + else + { + resBool = db->rollback(); + return 0; + } +} + +int DataBaseLMS::updateTrainee(Trainee trainee) +{ + QString computer_id = (trainee.getComputer().getID() == 0 ? QStringLiteral("null") : QString::number(trainee.getComputer().getID())); + + QString queryStr = QString("UPDATE public.users " + "SET name = '%1', login = '%2', password = '%3', archived = %4, logged_in = %5, " + "fk_group_id = %6, " + "fk_computer_id = %7 " + "WHERE user_id = %8 AND users.type = '%9' " + "RETURNING users.user_id").arg( + trainee.getName(), + trainee.getLogin(), + trainee.getPassword(), + trainee.getArchived() ? "true" : "false", + trainee.getLoggedIn() ? "true" : "false", + QString::number(trainee.getGroup().getID()), + computer_id, + QString::number(trainee.getID()), + TypeUserDBTrainee); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertTimingTrainee(int id_trainee) +{ + QString queryStr = QString("INSERT INTO public.timings (entry_time, exit_time, operating_time, fk_trainee_id) " + "VALUES (DEFAULT, DEFAULT, DEFAULT, %1) " + "RETURNING timings.timing_id").arg( + QString::number(id_trainee)); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateTimingTrainee(int id_trainee, TimingOfTrainee timing) +{ + QString queryStr = QString("UPDATE public.timings " + "SET entry_time = '%1', exit_time = '%2', operating_time = '%3', fk_trainee_id = %4 " + "WHERE timing_id = %5 " + "RETURNING timings.timing_id").arg( + timing.getEntryTimeS(), + timing.getExitTimeS(), + timing.getOperatingTimeS(), + QString::number(id_trainee), + QString::number(timing.getID()) ); + + return queryExecInt(queryStr); +} + +TimingOfTrainee DataBaseLMS::selectTimingTrainee(int id_trainee) +{ + TimingOfTrainee timing(id_trainee); + + QString queryStr = QString("SELECT timings.timing_id, timings.entry_time, timings.exit_time, timings.operating_time, timings.fk_trainee_id " + "FROM public.timings " + "WHERE fk_trainee_id = '%1'").arg(id_trainee); + + QSqlQuery querySel = QSqlQuery(*db); + + if(queryExec(queryStr, &querySel)) + { + if (querySel.first()) + {//Тайминг + timing.setID(querySel.value(0).toInt()); + timing.setEntryTime(querySel.value(1).toDateTime()); + timing.setExitTime(querySel.value(2).toDateTime()); + timing.setOperatingTime(querySel.value(3).toTime()); + timing.setTraineeID(querySel.value(4).toInt()); + } + } + + return timing; +} diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index c439a8a..f8bcb8c 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -5,9 +5,11 @@ #include #include "interfacedatabaselms.h" -InterfaceDataBaseLMS::InterfaceDataBaseLMS(QWidget* parent): - QWidget(parent), - DataBaseLMS() +InterfaceDataBaseLMS::InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent): + //QWidget(parent), + QObject(parent), + DataBaseLMS(ownerWidget), + ownerWidget(ownerWidget) { } diff --git a/DataBaseLMS/interfacedatabaselms.h b/DataBaseLMS/interfacedatabaselms.h index e7484d3..9f0bf0e 100644 --- a/DataBaseLMS/interfacedatabaselms.h +++ b/DataBaseLMS/interfacedatabaselms.h @@ -8,12 +8,12 @@ #include "DataBaseLMS_global.h" #include "databaselms.h" -class DATABASELMS_EXPORT InterfaceDataBaseLMS : public /*QObject*/QWidget, DataBaseLMS +class DATABASELMS_EXPORT InterfaceDataBaseLMS : public QObject, DataBaseLMS { Q_OBJECT public: - InterfaceDataBaseLMS(QWidget* parent = nullptr); + InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent = nullptr); public Q_SLOTS: void slot_LanguageChanged(QString language); @@ -24,6 +24,7 @@ public: bool DisConnectionFromDB(); bool DBisConnected(); + //Инструкторы bool AuthorizationInstructor(QString login, QString password); @@ -55,9 +56,6 @@ public: int entryTraineeOnSimulator(int id_trainee); int exitTraineeFromSimulator(int id_trainee); - - //void setTasks(QString login, QStringList tasks); - QString getNameTraineeOnComputer(QString computer_name); Trainee getTraineeOnComputer(QString computer_name); @@ -67,10 +65,19 @@ public: QList getListTraineesInGroup(int id); QList getListGroups(); QList getListTrainees(); - Trainee getTrainee(int id); - Group getGroup(int group_id); + int newTrainee(int id_group); + int delTrainee(int id); + int editTrainee(Trainee trainee); + + bool isArchivedTrainee(int id); + bool isLoggedInTrainee(int id); + + + //Группы + + Group getGroup(int group_id); int newGroup(); int delGroup(int id); int editGroup(Group group); @@ -79,6 +86,9 @@ public: int delTaskAMM(int id); int editTaskAMM(TaskAmmFim task); + + //Задачи + QList getListTasksAMMofTrainee(int id_trainee); QList getListTasksFIMofTrainee(int id_trainee); @@ -92,15 +102,9 @@ public: int changeStatusTaskFIM(int id_task, QString status); int changeStatusTaskAMM(int id_task, QString status); - int newTrainee(int id_group); - int delTrainee(int id); - int editTrainee(Trainee trainee); - - bool isArchivedTrainee(int id); - bool isLoggedInTrainee(int id); - private: QTranslator qtLanguageTranslator; + QWidget* ownerWidget; }; #endif // INTERFACEDATABASELMS_H diff --git a/DataBaseLMS/resources.qrc b/DataBaseLMS/resources.qrc new file mode 100644 index 0000000..88e906c --- /dev/null +++ b/DataBaseLMS/resources.qrc @@ -0,0 +1,5 @@ + + + resources/blankXML/ErrorDB.xml + + diff --git a/DataBaseLMS/resources/blankXML/ErrorDB.xml b/DataBaseLMS/resources/blankXML/ErrorDB.xml new file mode 100644 index 0000000..62afe20 --- /dev/null +++ b/DataBaseLMS/resources/blankXML/ErrorDB.xml @@ -0,0 +1,3 @@ + + +