diff --git a/DataBaseLMS/tasksAmmFim.cpp b/DataBaseLMS/tasksAmmFim.cpp index 526d038..92e370b 100644 --- a/DataBaseLMS/tasksAmmFim.cpp +++ b/DataBaseLMS/tasksAmmFim.cpp @@ -37,3 +37,91 @@ void MalfunctionSign::initialize(int type, QString description) this->type = type; this->description = description; } + + +QString SubProc::getDmCode() const +{ + return dmCode; +} + +QString SubProc::getTitle() const +{ + return title; +} + +void SubProc::setDmCode(const QString &value) +{ + dmCode = value; +} + +void SubProc::setTitle(const QString &value) +{ + title = value; +} + +QString SubProc::getModeListStr() const +{ + return modeListStr; +} + +ModeList SubProc::getModeList() const +{ + return modeList; +} + +void SubProc::setModeList(const ModeList &value) +{ + this->modeList = value; + this->modeListStr = buildCanplay(value); +} + +void SubProc::setModeListStr(const QString &value) +{ + this->modeListStr = value; + this->modeList = parseCanplay(value); +} + +QString SubProc::buildCanplay(ModeList modeList) +{ + QString canplay = QString("%1/%2/%3/%4").arg(modeList.demo?"+":"-", modeList.train?"+":"-", modeList.exam?"+":"-", modeList.autoM?"+":"-"); + return canplay; +} + +ModeList SubProc::parseCanplay(QString canplay) +{ + ModeList modeList; + + if(canplay == "") + { + modeList.demo = false; + modeList.train = false; + modeList.exam = false; + modeList.autoM = false; + } + else + { + QStringList list = canplay.split("/"); + + if(list.at(0) == "+") + modeList.demo = true; + else + modeList.demo = false; + + if(list.at(1) == "+") + modeList.train = true; + else + modeList.train = false; + + if(list.at(2) == "+") + modeList.exam = true; + else + modeList.exam = false; + + if(list.at(3) == "+") + modeList.autoM = true; + else + modeList.autoM = false; + } + + return modeList; +} diff --git a/DataBaseLMS/tasksAmmFim.h b/DataBaseLMS/tasksAmmFim.h index abcb265..1dc2980 100644 --- a/DataBaseLMS/tasksAmmFim.h +++ b/DataBaseLMS/tasksAmmFim.h @@ -13,12 +13,38 @@ struct ModeList bool autoM = false; }; -struct SubProc +class DATABASELMS_EXPORT SubProc { - QString dmCode; - QString title; +public: + SubProc() + { + modeListStr = buildCanplay(modeList); + }; + ~SubProc(){}; + +public: + void setModeList(const ModeList &modeList); + ModeList getModeList() const; + + void setModeListStr(const QString &modeListStr); + QString getModeListStr() const; + + void setDmCode(const QString &value); + QString getDmCode() const; + + void setTitle(const QString &value); + QString getTitle() const; + +public: + static QString buildCanplay(ModeList modeList); + static ModeList parseCanplay(QString canplay); + +private: + QString dmCode = ""; + QString title = ""; ModeList modeList; + QString modeListStr = ""; }; class DATABASELMS_EXPORT ProcedureID diff --git a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp index df235b3..9dffe95 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp @@ -181,9 +181,9 @@ QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id { xmlWriter.writeStartElement("SubProc"); - xmlWriter.writeAttribute("dmCode", subProc.dmCode); - xmlWriter.writeAttribute("title", subProc.title); - //xmlWriter.writeAttribute("canplay", subProc.modeList); //TODO возможно тут нужен canplay + xmlWriter.writeAttribute("dmCode", subProc.getDmCode()); + xmlWriter.writeAttribute("title", subProc.getTitle()); + xmlWriter.writeAttribute("canplay", subProc.getModeListStr()); xmlWriter.writeEndElement(); } diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp index 7761f39..1e64edd 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp @@ -908,8 +908,9 @@ void RecognizeSystem::xmlParserQuerySubProc(PacketType packetType, QByteArray ar if(taskNode.nodeName() == "SubProc") {//Подпроцедура SubProc subProc; - subProc.title = taskNode.toElement().attribute("title"); - subProc.dmCode = taskNode.toElement().attribute("dmCode"); + subProc.setTitle(taskNode.toElement().attribute("title")); + subProc.setDmCode(taskNode.toElement().attribute("dmCode")); + subProc.setModeListStr(taskNode.toElement().attribute("canplay")); listSubProc.append(subProc); } diff --git a/InstructorsAndTrainees/tasks/listsubproc.cpp b/InstructorsAndTrainees/tasks/listsubproc.cpp index b3fd724..1d3dbb9 100644 --- a/InstructorsAndTrainees/tasks/listsubproc.cpp +++ b/InstructorsAndTrainees/tasks/listsubproc.cpp @@ -78,9 +78,9 @@ bool ListSubProc::getListCheckedSubProc(QList* listSubProc) if(item->checkState(0) == Qt::Checked) { SubProc subProc; - subProc.dmCode = item->text(ColumnsTreeSubProc::clmnSP_code); - subProc.title = item->text(ColumnsTreeSubProc::clmnSP_title); - subProc.modeList = parseCanplay(item->text(ColumnsTreeSubProc::clmnSP_canplay)); + subProc.setDmCode(item->text(ColumnsTreeSubProc::clmnSP_code)); + subProc.setTitle(item->text(ColumnsTreeSubProc::clmnSP_title)); + subProc.setModeListStr(item->text(ColumnsTreeSubProc::clmnSP_canplay)); listSubProc->append(subProc); } } @@ -144,51 +144,6 @@ int ListSubProc::calculateWidth_0Column() return width0Column; } -QString ListSubProc::buildCanplay(ModeList modeList) -{ - QString canplay = QString("%1/%2/%3/%4").arg(modeList.demo?"+":"-", modeList.train?"+":"-", modeList.exam?"+":"-", modeList.autoM?"+":"-"); - return canplay; -} - -ModeList ListSubProc::parseCanplay(QString canplay) -{ - ModeList modeList; - - if(canplay == "") - { - modeList.demo = false; - modeList.train = false; - modeList.exam = false; - modeList.autoM = false; - } - else - { - QStringList list = canplay.split("/"); - - if(list.at(0) == "+") - modeList.demo = true; - else - modeList.demo = false; - - if(list.at(1) == "+") - modeList.train = true; - else - modeList.train = false; - - if(list.at(2) == "+") - modeList.exam = true; - else - modeList.exam = false; - - if(list.at(3) == "+") - modeList.autoM = true; - else - modeList.autoM = false; - } - - return modeList; -} - void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode) { if(this->task.ammProcedure.dmCode == dmCode) @@ -199,10 +154,10 @@ void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode) { QTreeWidgetItem* item = new QTreeWidgetItem(treeWidget); item->setIcon(0, QIcon(":/resources/icons/procedure.png")); - item->setText(ColumnsTreeSubProc::clmnSP_title, subProc.title); - item->setText(ColumnsTreeSubProc::clmnSP_code, subProc.dmCode); - item->setText(ColumnsTreeSubProc::clmnSP_canplay, buildCanplay(subProc.modeList)); - item->setToolTip(ColumnsTreeSubProc::clmnSP_title, subProc.title); + item->setText(ColumnsTreeSubProc::clmnSP_title, subProc.getTitle()); + item->setText(ColumnsTreeSubProc::clmnSP_code, subProc.getDmCode()); + item->setText(ColumnsTreeSubProc::clmnSP_canplay, subProc.getModeListStr()); + item->setToolTip(ColumnsTreeSubProc::clmnSP_title, subProc.getTitle()); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); item->setCheckState(ColumnsTreeSubProc::clmnSP_title, Qt::Checked); diff --git a/InstructorsAndTrainees/tasks/listsubproc.h b/InstructorsAndTrainees/tasks/listsubproc.h index 88c201b..e78b684 100644 --- a/InstructorsAndTrainees/tasks/listsubproc.h +++ b/InstructorsAndTrainees/tasks/listsubproc.h @@ -37,8 +37,6 @@ private: void reSetHeadTreeWidget(); void setWidthColumnsTree(); int calculateWidth_0Column(); - QString buildCanplay(ModeList modeList); //TODO Дублируется в DocsUpdater (Server)! - ModeList parseCanplay(QString canplay); //TODO Дублируется в DocsUpdater (Server)! public slots: void slot_UpdateSubProcForDMCode(QString dmCode); diff --git a/ServerLMS/Systems/Parsers/docsanswerparser.cpp b/ServerLMS/Systems/Parsers/docsanswerparser.cpp index 79633ce..371ff37 100644 --- a/ServerLMS/Systems/Parsers/docsanswerparser.cpp +++ b/ServerLMS/Systems/Parsers/docsanswerparser.cpp @@ -19,9 +19,9 @@ QByteArray DocsAnswerParser::listSubProc(QList list, QString dmCode) { QDomNode subProcNode = commonDOM.createElement("SubProc"); listNode.appendChild(subProcNode); - subProcNode.toElement().setAttribute("dmCode", subProc.dmCode); - subProcNode.toElement().setAttribute("title", subProc.title); - subProcNode.toElement().setAttribute("canplay", DocsUpdater::buildCanplay(subProc.modeList)); + subProcNode.toElement().setAttribute("dmCode", subProc.getDmCode()); + subProcNode.toElement().setAttribute("title", subProc.getTitle()); + subProcNode.toElement().setAttribute("canplay", subProc.getModeListStr()); } Tools::saveDOMtoXML("ListSubProc.xml", &commonDOM); diff --git a/ServerLMS/Systems/docsupdater.cpp b/ServerLMS/Systems/docsupdater.cpp index 66adbe4..a6bd365 100644 --- a/ServerLMS/Systems/docsupdater.cpp +++ b/ServerLMS/Systems/docsupdater.cpp @@ -71,15 +71,29 @@ bool DocsUpdater::updateDocsXML() return false; } - for(QList listSP : listSubProcMap) + //Проставляем canplay + for (auto it = listSubProcMap.begin(); it != listSubProcMap.end(); ++it) { - for(SubProc sp : listSP) + QList listSP = it.value(); + QString keyToReplace = it.key(); + + if(listSP.count()) { - QString dmCode = sp.dmCode; - DM* module = getDMmoduleByDMcode(dmCode); - if(module) + for(int i = 0; i < listSP.count(); i++) { - sp.modeList = module->getModeList(); + QString dmCode = listSP.at(i).getDmCode(); + DM* module = getDMmoduleByDMcode(dmCode); + if(module) + { + SubProc sp = listSP.at(i); + sp.setModeList(module->getModeList()); + listSP.replace(i, sp); + } + } + + if (!keyToReplace.isEmpty()) + { + listSubProcMap[keyToReplace] = listSP; } } } @@ -187,14 +201,14 @@ void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent) QList listSubProc; if(processingScenXML(dmCode, canplay, listSubProc)) { - DMmodulParent->setModeList(parseCanplay(canplay)); + DMmodulParent->setModeList(SubProc::parseCanplay(canplay)); nodeMap.namedItem("canplay").setNodeValue(canplay); listSubProcMap.insert(dmCode, listSubProc); } else { - DMmodulParent->setModeList(parseCanplay(canplay)); + DMmodulParent->setModeList(SubProc::parseCanplay(canplay)); nodeMap.namedItem("canplay").setNodeValue(canplay); } } @@ -242,51 +256,6 @@ void DocsUpdater::deleteAllModulsAMM() listAllModulesAMM.clear(); } -ModeList DocsUpdater::parseCanplay(QString canplay) -{ - ModeList modeList; - - if(canplay == "") - { - modeList.demo = false; - modeList.train = false; - modeList.exam = false; - modeList.autoM = false; - } - else - { - QStringList list = canplay.split("/"); - - if(list.at(0) == "+") - modeList.demo = true; - else - modeList.demo = false; - - if(list.at(1) == "+") - modeList.train = true; - else - modeList.train = false; - - if(list.at(2) == "+") - modeList.exam = true; - else - modeList.exam = false; - - if(list.at(3) == "+") - modeList.autoM = true; - else - modeList.autoM = false; - } - - return modeList; -} - -QString DocsUpdater::buildCanplay(ModeList modeList) -{ - QString canplay = QString("%1/%2/%3/%4").arg(modeList.demo?"+":"-", modeList.train?"+":"-", modeList.exam?"+":"-", modeList.autoM?"+":"-"); - return canplay; -} - bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QList &listSubProc) { listSubProc.clear(); @@ -384,8 +353,8 @@ void DocsUpdater::selectSubProc(QDomElement &modeElement, QList &listSu if(!subProcElement.isNull()) { SubProc subProc; - subProc.dmCode = subProcElement.toElement().attribute("dmCode"); - subProc.title = subProcElement.toElement().attribute("title"); + subProc.setDmCode(subProcElement.toElement().attribute("dmCode")); + subProc.setTitle(subProcElement.toElement().attribute("title")); listSubProc.append(subProc); } diff --git a/ServerLMS/Systems/docsupdater.h b/ServerLMS/Systems/docsupdater.h index f11b3f4..1920bcc 100644 --- a/ServerLMS/Systems/docsupdater.h +++ b/ServerLMS/Systems/docsupdater.h @@ -20,9 +20,6 @@ public: bool updateDocsXML(); - static ModeList parseCanplay(QString canplay); - static QString buildCanplay(ModeList modeList); - private: void domElementParserAMM(QDomElement element, Module* moduleParent); void deleteAllModulsAMM();