#include #include #include #include "traineesview.h" TraineesView::TraineesView(ConnectorToServer* connectorToServer, TypeView type, QWidget *parent): CommonView(connectorToServer, type, parent) { typeObject = TypeObject::objTrainee; TypeUserDB = User::TypeUserDBTrainee; } void TraineesView::slot_NeedUpdateUI(bool treeInstructor, bool treeTrainee) { updateButtons(); if(authComplited) { if(treeTrainee) loadTraineesFromDB(); } } QString TraineesView::buildStatisticTasksAMM(QList listTasks) { QString stat = "X/X"; int cntAll = 0; int cntCompleted = 0; for(TaskAmmFim task : listTasks) { cntAll++; if(task.status == "completed") cntCompleted++; } stat = QString("%1/%2").arg( QString::number(cntCompleted), QString::number(cntAll)); QString statHTML = QString("

%1/" "%2

").arg( QString::number(cntCompleted), QString::number(cntAll)); return /*stat*/statHTML; } QString TraineesView::buildStatisticTasksFIM(QList listTasks) { QString stat = "X/X/X/X"; int cntAll = 0; int cntCompleted = 0; int cntCheckup = 0; int cntFailed = 0; for(TaskAmmFim task : listTasks) { cntAll++; if(task.status == "completed") cntCompleted++; else if(task.status == "checkup") cntCheckup++; else if(task.status == "failed") cntFailed++; } stat = QString("%1/%2/%3/%4").arg( QString::number(cntCompleted), QString::number(cntFailed), QString::number(cntCheckup), QString::number(cntAll)); QString statHTML = QString("

%1/" "%2/" "%3/" "%4

").arg( QString::number(cntCompleted), QString::number(cntFailed), QString::number(cntCheckup), QString::number(cntAll)); return /*stat*/statHTML; } void TraineesView::loadTraineesFromDB() { mtxTreeWidget.lock(); //Обновление дерева treeWidget->clear(); QList listGroups; QList listTrainees; listGroups = connectorToServer->getListGroups(); listTrainees = connectorToServer->getListTrainees(); for(Group group : listGroups) { //Группа int cntChildsNotArchived = 0; QTreeWidgetItem *ItemGroup = new QTreeWidgetItem(treeWidget); ItemGroup->setText(ColumnsTreeUsers::clmn_ID, QString::number(group.getID())); ItemGroup->setText(ColumnsTreeUsers::clmn_Name, group.getName()); ItemGroup->setIcon(ColumnsTreeUsers::clmn_Name, QIcon(QStringLiteral(":/resources/icons/group.png"))); setItemColor(ItemGroup, QColor(220, 220, 220)); //Обучаемые for(Trainee trainee : listTrainees) { if(trainee.getGroup().getID() != group.getID()) continue; QTreeWidgetItem *ItemTrainee = new QTreeWidgetItem(); ItemTrainee->setText(ColumnsTreeUsers::clmn_ID, QString::number(trainee.getID())); ItemTrainee->setText(ColumnsTreeUsers::clmn_Name, trainee.getName()); ItemTrainee->setText(ColumnsTreeUsers::clmn_Login, trainee.getLogin()); ItemTrainee->setText(ColumnsTreeUsers::clmn_Password, trainee.getPassword()); ItemTrainee->setText(ColumnsTreeUsers::clmn_Class, trainee.getComputer().getClassroom().getName()); ItemTrainee->setText(ColumnsTreeUsers::clmn_Computer, trainee.getComputer().getName()); ItemTrainee->setText(ColumnsTreeUsers::clmn_IP_address, trainee.getComputer().getIpAddress()); //ItemTrainee->setText(ColumnsTreeUsers::clmn_AMMtasks, statAMM); //ItemTrainee->setText(ColumnsTreeUsers::clmn_FIMtasks, statFIM); //Сокрытие пароля ItemTrainee->setText(ColumnsTreeUsers::clmn_Password, QStringLiteral("******")); if(trainee.getArchived()) {//Архивный ItemTrainee->setText(ColumnsTreeUsers::clmn_Archived, tr("yes")); ItemTrainee->setIcon(ColumnsTreeUsers::clmn_Name, QIcon(QStringLiteral(":/resources/icons/archive.png"))); setItemColorArchive(ItemTrainee); } else {//Не Архивный ItemTrainee->setText(ColumnsTreeUsers::clmn_Archived, tr("no")); ItemTrainee->setIcon(ColumnsTreeUsers::clmn_Name, QIcon(QStringLiteral(":/resources/icons/trainee.png"))); setItemColorNoArchive(ItemTrainee); cntChildsNotArchived++; } if(trainee.getLoggedIn()) {//Залогинен //ItemTrainee->setText(ColumnsTreeUsers::clmn_Logged, tr("yes")); ItemTrainee->setIcon(ColumnsTreeUsers::clmn_Logged, QIcon(QStringLiteral(":/resources/icons/circleGreen.png"))); } else {//Не Залогинен //ItemTrainee->setText(ColumnsTreeUsers::clmn_Logged, tr("no")); //ItemTrainee->setIcon(ColumnsTreeUsers::clmn_Logged, QIcon(QStringLiteral(":/resources/icons/circleGray.png"))); } ItemGroup->addChild(ItemTrainee); QList listAMM = connectorToServer->getListTasksAMMforTrainee(trainee.getID()); QList listFIM = connectorToServer->getListTasksFIMforTrainee(trainee.getID()); QString statAMM = buildStatisticTasksAMM(listAMM); QString statFIM = buildStatisticTasksFIM(listFIM); QPlainTextEdit *plainTextEditAMM = new QPlainTextEdit(); plainTextEditAMM->setObjectName("plainTextEditAMM"); plainTextEditAMM->setFocusPolicy(Qt::FocusPolicy::NoFocus); plainTextEditAMM->setReadOnly(true); plainTextEditAMM->setEnabled(false); treeWidget->setItemWidget(ItemTrainee, ColumnsTreeUsers::clmn_AMMtasks, plainTextEditAMM); plainTextEditAMM->appendHtml(statAMM); QPlainTextEdit *plainTextEditFIM = new QPlainTextEdit(); plainTextEditFIM->setObjectName("plainTextEditAMM"); plainTextEditFIM->setFocusPolicy(Qt::FocusPolicy::NoFocus); plainTextEditFIM->setReadOnly(true); plainTextEditFIM->setEnabled(false); treeWidget->setItemWidget(ItemTrainee, ColumnsTreeUsers::clmn_FIMtasks, plainTextEditFIM); plainTextEditFIM->appendHtml(statFIM); //Скрываем архивных (при необходимости) if(trainee.getArchived()) if(! archiveVisible) ItemTrainee->setHidden(true); //Скрываем незалогиненых (при необходимости) if(! trainee.getLoggedIn()) if(! notLoggedInVisible) ItemTrainee->setHidden(true); mtxmapNewMsg.lock(); if(mapNewMsg.contains(trainee.getID())) {//Есть непрочитанные сообщения от него if(mapNewMsg.value(trainee.getID())) { if(lastCurrentID == trainee.getID()) { //mapNewMsg.take(lastCurrentID); } else { /* for (int i = 0; i < ColumnsTreeUsers::clmn_count; i++) { ItemTrainee->setBackground(i, QBrush(QColor(250, 210, 1))); } */ ItemTrainee->setIcon(ColumnsTreeUsers::clmn_Messages, QIcon(QStringLiteral(":/resources/icons/sendMsg.png"))); ItemTrainee->setText(ColumnsTreeUsers::clmn_Messages, QString::number(mapNewMsg.value(trainee.getID()))); } } } mtxmapNewMsg.unlock(); } //if(! archiveVisible && cntChildsNotArchived == 0) //delete ItemGroup; } treeWidget->expandAll(); /* //if(typeView == TypeView::control) { QTreeWidgetItem * item = treeWidget->topLevelItem(0); if(item != nullptr) { QTreeWidgetItem * itemChild = item->child(0); if(itemChild != nullptr) treeWidget->setCurrentItem(itemChild); } }*/ if(typeObject == TypeObject::objGroup) setCurrentGroup(lastCurrentID); else setCurrentTrainee(lastCurrentID); treeWidget->sortItems(ColumnsTreeUsers::clmn_Name, Qt::SortOrder::AscendingOrder); mtxTreeWidget.unlock(); waitAnimationWidget->hideWithStop(); } void TraineesView::setCurrentGroup(int id) { typeObject = TypeObject::objGroup; for(int i = 0; i < treeWidget->topLevelItemCount(); i++) { QTreeWidgetItem * item = treeWidget->topLevelItem(i); if(item != nullptr) if(item->text(ColumnsTreeUsers::clmn_ID).toInt() == id) { treeWidget->setCurrentItem(item); return; } } /* QTreeWidgetItem * item = treeWidget->topLevelItem(0); if(item != nullptr) treeWidget->setCurrentItem(item); */ } void TraineesView::setCurrentTrainee(int id) { typeObject = TypeObject::objTrainee; for(int i = 0; i < treeWidget->topLevelItemCount(); i++) { QTreeWidgetItem * item = treeWidget->topLevelItem(i); if(item != nullptr) { for (int j = 0; j < item->childCount(); j++) { QTreeWidgetItem * itemChild = item->child(j); if(itemChild != nullptr) if(itemChild->text(ColumnsTreeUsers::clmn_ID).toInt() == id) { treeWidget->setCurrentItem(itemChild); return; } }//for (int j = 0; j < item->childCount(); j++) } }//for(int i = 0; i < treeWidget->topLevelItemCount(); i++) /* QTreeWidgetItem * item = treeWidget->topLevelItem(0); if(item != nullptr) treeWidget->setCurrentItem(item); */ }