#include "databaselms.h" #include #include #include int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee) { QString queryStr; bool resBool = false; resBool = db->transaction(); task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки 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)); int task_id = queryExecInt(queryStr); if(!task_id) { resBool = db->rollback(); return 0; } for(SubProc subProc : task.listSubProc) { subProc.setTitle(subProc.getTitle().replace("'", "''")); //Задваиваем одинарные кавычки queryStr = QString("INSERT INTO public.subprocs (dm_code, title, canplay, fk_task_amm_id) " "VALUES ('%1', '%2', '%3', %4) " "RETURNING subprocs.subproc_id").arg( subProc.getDmCode(), subProc.getTitle(), subProc.getModeListStr(), QString::number(task_id)); int subproc_id = queryExecInt(queryStr); if(!subproc_id) { resBool = db->rollback(); return 0; } } resBool = db->commit(); return task_id; } 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 queryUserSEL = QSqlQuery(*db); if(queryExec(queryStr, &queryUserSEL)) { if (queryUserSEL.first()) {//Обучаемый id_trainee = queryUserSEL.value(0).toInt(); } } if(!id_trainee) { resBool = db->rollback(); return 0; } queryStr = QString("DELETE FROM public.subprocs " "WHERE fk_task_amm_id = %1 ").arg( QString::number(id_task)); QSqlQuery querySubProcDEL = QSqlQuery(*db); if(!queryExec(queryStr, &querySubProcDEL)) { 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; bool resBool = false; resBool = db->transaction(); 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(); //Выгребаем все subproc для этой задачи queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, " "tasks_amm.task_id " "FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id " "WHERE subprocs.fk_task_amm_id = %1 " "ORDER BY subprocs.subproc_id ASC").arg( task.getID()); QSqlQuery querySubProc = QSqlQuery(*db); if(queryExec(queryStr, &querySubProc)) { while (querySubProc.next()) {//Подпроцедура SubProc subProc; int subproc_id = 0; subproc_id = querySubProc.value(0).toString().toInt(); subProc.setDmCode(querySubProc.value(1).toString()); subProc.setTitle(querySubProc.value(2).toString()); subProc.setModeListStr(querySubProc.value(3).toString()); task.listSubProc.append(subProc); }; } else { resBool = db->rollback(); return QList(); } listTasks.append(task); } } else { resBool = db->rollback(); return QList(); } resBool = db->commit(); return listTasks; } TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task) { TaskAmmFim task; QString queryStr; bool resBool = false; resBool = db->transaction(); 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(); //Выгребаем все subproc для этой задачи queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, " "tasks_amm.task_id " "FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id " "WHERE subprocs.fk_task_amm_id = %1 " "ORDER BY subprocs.subproc_id ASC").arg( task.getID()); QSqlQuery querySubProc = QSqlQuery(*db); if(queryExec(queryStr, &querySubProc)) { while (querySubProc.next()) {//Подпроцедура SubProc subProc; int subproc_id = 0; subproc_id = querySubProc.value(0).toString().toInt(); subProc.setDmCode(querySubProc.value(1).toString()); subProc.setTitle(querySubProc.value(2).toString()); subProc.setModeListStr(querySubProc.value(3).toString()); task.listSubProc.append(subProc); }; } else { resBool = db->rollback(); return TaskAmmFim(); } } } else { resBool = db->rollback(); return TaskAmmFim(); } resBool = db->commit(); return task; }