Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+657
@@ -0,0 +1,657 @@
|
||||
#include "static_pvsan_import.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
#include <QDir>
|
||||
#include <QSet>
|
||||
#include <ngltools/ngltools_filesystem.h>
|
||||
#include <ngldb/dbtransaction.h>
|
||||
#include <ngldb/nsqlquery.h>
|
||||
|
||||
namespace ProjectDataManagement {
|
||||
|
||||
PvSanImport::PvSanImport(const std::shared_ptr<DatabaseInterface> &db,
|
||||
NGL::INGLLogger &logger):
|
||||
m_version(QStringLiteral("-")),
|
||||
m_db(db),
|
||||
m_logger(logger)
|
||||
{
|
||||
publishDataPvSan();
|
||||
}
|
||||
|
||||
bool PvSanImport::publishDataPvSan()
|
||||
{
|
||||
|
||||
QVector<QString> procedures;
|
||||
QVector<QString> injuries;
|
||||
QVector<QString> material;
|
||||
QVector<QString> kind;
|
||||
QVector<QString> place1;
|
||||
QVector<QString> place2;
|
||||
|
||||
//b->removePdmTranslation()
|
||||
if (!readFile(procedures, material, injuries, kind, place1, place2))
|
||||
{
|
||||
ERROR_LOG(m_logger) << "Can't read pvsan file";
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!addProcedures(procedures))
|
||||
return false;
|
||||
|
||||
if(!addMaterial(material))
|
||||
return false;
|
||||
|
||||
if(!addInjuryPlaces(kind, place1, place2))
|
||||
return false;
|
||||
|
||||
if(!addInjuries(injuries))
|
||||
return false;
|
||||
|
||||
// X X A A B B C C D D E E M M 0 0
|
||||
//0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
|
||||
//0000 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
|
||||
return true;
|
||||
}
|
||||
|
||||
qint64 PvSanImport::getCode(const QString &type, int typeId)
|
||||
{
|
||||
qint64 check = 1ULL;
|
||||
|
||||
qint64 multiplayer = 1ULL;
|
||||
|
||||
switch (type.at(0).unicode())
|
||||
{
|
||||
case 'x':
|
||||
multiplayer = multiplayer<<(55 + typeId);
|
||||
break;
|
||||
case 'A':
|
||||
multiplayer = multiplayer<<(47 + typeId);
|
||||
break;
|
||||
case 'B':
|
||||
multiplayer = multiplayer<<(39+ typeId);
|
||||
break;
|
||||
case 'C':
|
||||
multiplayer = multiplayer<<(31+ typeId);
|
||||
break;
|
||||
case 'D':
|
||||
multiplayer = multiplayer<<(23+ typeId);
|
||||
break;
|
||||
case 'E':
|
||||
multiplayer = multiplayer<<(15+ typeId);
|
||||
break;
|
||||
case 'M':
|
||||
multiplayer = multiplayer<<(7+ typeId);
|
||||
break;
|
||||
default:
|
||||
multiplayer = typeId;
|
||||
break;
|
||||
|
||||
};
|
||||
check = multiplayer;
|
||||
return check;
|
||||
}
|
||||
|
||||
bool PvSanImport::readFile(QVector<QString> &procedures, QVector<QString> &material,
|
||||
QVector<QString> &injuries, QVector<QString> &kind,
|
||||
QVector<QString> &place1, QVector<QString> &place2 )
|
||||
{
|
||||
QString vbkFile = NGL::findFile(NGL::FileType::ConfigFile, QStringLiteral("vbk.csv"));
|
||||
QFile csvFile(vbkFile);
|
||||
DEBUG_LOG(m_logger) << "Start reading File " << vbkFile;
|
||||
|
||||
if (!csvFile.exists())
|
||||
return false;
|
||||
if(!csvFile.open(QIODevice::ReadOnly))
|
||||
return false;
|
||||
DEBUG_LOG(m_logger) << "Opened File";
|
||||
|
||||
bool skip = true;
|
||||
QTextStream in(&csvFile);
|
||||
in.setCodec("latin1");
|
||||
|
||||
//version
|
||||
while (!in.atEnd())
|
||||
{
|
||||
QString line = in.readLine();
|
||||
if (!line.startsWith(QStringLiteral("Version")))
|
||||
continue;
|
||||
|
||||
// ERROR_LOG(m_logger) << line;
|
||||
QStringList versionSplit = line.split(QStringLiteral(";"));
|
||||
if (versionSplit.size() > 1)
|
||||
m_version = versionSplit.at(1);
|
||||
break;
|
||||
}
|
||||
skip = true;
|
||||
|
||||
//injuries
|
||||
while (!in.atEnd())
|
||||
{
|
||||
QString line = in.readLine();
|
||||
if (skip && !line.startsWith(QStringLiteral("VBA-Index")))
|
||||
continue;
|
||||
else if (skip)
|
||||
{
|
||||
//read one more line
|
||||
line = in.readLine();
|
||||
skip = false;
|
||||
}
|
||||
|
||||
//now we read all lines until the end
|
||||
if (!line.isEmpty())
|
||||
injuries.append(line);
|
||||
else
|
||||
break;
|
||||
}
|
||||
skip = true;
|
||||
in.seek(0);
|
||||
|
||||
//Material
|
||||
while (!in.atEnd())
|
||||
{
|
||||
const QString line = in.readLine();
|
||||
if (skip && !line.startsWith(QStringLiteral("sanmat")))
|
||||
continue;
|
||||
else if (skip)
|
||||
{
|
||||
//read one more line
|
||||
in.readLine();
|
||||
skip = false;
|
||||
continue;
|
||||
}
|
||||
//ERROR_LOG(m_logger) << line;
|
||||
|
||||
//now we read all lines until the end
|
||||
if (!line.isEmpty())
|
||||
material.append(line);
|
||||
else
|
||||
break;
|
||||
}
|
||||
skip = true;
|
||||
in.seek(0);
|
||||
|
||||
//procedures
|
||||
while (!in.atEnd())
|
||||
{
|
||||
const QString line = in.readLine();
|
||||
if (skip && !line.startsWith(QStringLiteral("massnahmen.csv")))
|
||||
continue;
|
||||
else if (skip)
|
||||
{
|
||||
//read one more line
|
||||
in.readLine();
|
||||
skip = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
//now we read all lines until the end
|
||||
if (!line.isEmpty())
|
||||
procedures.append(line);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
skip = true;
|
||||
in.seek(0);
|
||||
|
||||
//kind
|
||||
while (!in.atEnd())
|
||||
{
|
||||
const QString line = in.readLine();
|
||||
if (skip && !line.startsWith(QStringLiteral("verwundungstyp")))
|
||||
continue;
|
||||
else if (skip)
|
||||
{
|
||||
//read one more line
|
||||
in.readLine();
|
||||
skip = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
//now we read all lines until the end
|
||||
if (!line.isEmpty())
|
||||
kind.append(line);
|
||||
else
|
||||
break;
|
||||
}
|
||||
skip = true;
|
||||
in.seek(0);
|
||||
|
||||
//palce1
|
||||
while (!in.atEnd())
|
||||
{
|
||||
const QString line = in.readLine();
|
||||
if (skip && !line.startsWith(QStringLiteral("ort1")))
|
||||
continue;
|
||||
else if (skip)
|
||||
{
|
||||
//read one more line
|
||||
in.readLine();
|
||||
skip = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
//now we read all lines until the end
|
||||
if (!line.isEmpty())
|
||||
place1.append(line);
|
||||
else
|
||||
break;
|
||||
}
|
||||
skip = true;
|
||||
in.seek(0);
|
||||
|
||||
//place2
|
||||
while (!in.atEnd())
|
||||
{
|
||||
const QString line = in.readLine();
|
||||
if (skip && !line.startsWith(QStringLiteral("ort2")))
|
||||
continue;
|
||||
else if (skip)
|
||||
{
|
||||
//read one more line
|
||||
in.readLine();
|
||||
skip = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
//now we read all lines until the end
|
||||
if (!line.isEmpty())
|
||||
place2.append(line);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
csvFile.close();
|
||||
|
||||
// ERROR_LOG(m_logger) << "read " << procedures.size() << " procedures from file";
|
||||
// ERROR_LOG(m_logger) << "read " << material.size() << " materials from file";
|
||||
// ERROR_LOG(m_logger) << "read " << injuries.size() << " injuries from file";
|
||||
// ERROR_LOG(m_logger) << "read " << kind.size() << " kinds from file";
|
||||
// ERROR_LOG(m_logger) << "read " << place1.size() << " place1 from file";
|
||||
// ERROR_LOG(m_logger) << "read " << place2.size() << " place2 from file";
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PvSanImport::addProcedures(const QVector<QString> &procedures)
|
||||
{
|
||||
if(procedures.isEmpty())
|
||||
return false;
|
||||
|
||||
//check for DatabaseEntry with ID 1 and it's version
|
||||
Database::PdmSanitationProcedures procTemp;
|
||||
|
||||
if (m_db->selectPdmSanitationProcedures(1, procTemp) && procTemp.version == m_version)
|
||||
return true;
|
||||
|
||||
QString myContext=QStringLiteral("SanitationProcedure");
|
||||
//remove from DB
|
||||
m_db->truncatePdmSanitationProcedures();
|
||||
|
||||
QVector<Database::PdmTranslation> translations;
|
||||
m_db->select(translations);
|
||||
QSet<quint64> idsToRemove;
|
||||
for (const auto &tr : qAsConst(translations))
|
||||
{
|
||||
if (tr.context == myContext)
|
||||
idsToRemove.insert(tr.id);
|
||||
}
|
||||
|
||||
for (quint64 id : idsToRemove )
|
||||
{
|
||||
m_db->removePdmTranslation(id);
|
||||
}
|
||||
|
||||
//insert into db
|
||||
Database::PdmSanitationProcedures pros;
|
||||
pros.id= 0;
|
||||
pros.type = QStringLiteral("-");
|
||||
pros.name = QStringLiteral("Keine");
|
||||
pros.typeId = 0;
|
||||
pros.longName = QStringLiteral("Keine");
|
||||
pros.dataCode = 0;
|
||||
|
||||
m_db->insert(pros);
|
||||
|
||||
|
||||
Database::PdmTranslation trans;
|
||||
trans.key = pros.name;
|
||||
trans.disambiguation = QStringLiteral("name");
|
||||
trans.context = myContext;
|
||||
trans.translation = QStringLiteral("None");
|
||||
trans.isoCode = QStringLiteral("en_GB");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.isoCode = QStringLiteral("en_US");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.translation = pros.name;
|
||||
trans.isoCode = QStringLiteral("de_DE");
|
||||
m_db->insert(trans);
|
||||
|
||||
for (const QString &entry: procedures)
|
||||
{
|
||||
|
||||
QStringList measure = entry.split(QStringLiteral(";"));
|
||||
// ERROR_LOG(m_logger) << entry << " size of split: " << measure.size();
|
||||
if (measure.size() < 34 )
|
||||
continue;
|
||||
Database::PdmSanitationProcedures pros;
|
||||
pros.id = measure.at(0).toInt();
|
||||
pros.name = measure.at(3);
|
||||
pros.longName = measure.at(4);
|
||||
pros.type = measure.at(1);
|
||||
pros.typeId = measure.at(2).toInt();
|
||||
pros.minimumQualification = measure.at(34).toInt() == 0 ? 3 : measure.at(34).toInt();
|
||||
pros.version = m_version;
|
||||
|
||||
pros.dataCode = getCode(pros.type, pros.typeId);
|
||||
if(m_db->insert(pros))
|
||||
{
|
||||
Database::PdmTranslation trans;
|
||||
trans.key = measure.at(3);
|
||||
trans.disambiguation = QStringLiteral("name");
|
||||
trans.context = myContext;
|
||||
trans.translation = measure.at(5);
|
||||
trans.isoCode = QStringLiteral("en_US");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.isoCode = QStringLiteral("en_GB");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.translation = measure.at(3);
|
||||
trans.isoCode = QStringLiteral("de_DE");
|
||||
m_db->insert(trans);
|
||||
|
||||
//long name:
|
||||
trans.id = 0;
|
||||
trans.key = measure.at(4);
|
||||
trans.disambiguation = QStringLiteral("long_name");
|
||||
|
||||
trans.translation = measure.at(4);
|
||||
trans.isoCode = QStringLiteral("de_DE");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.translation = measure.at(6);
|
||||
trans.isoCode = QStringLiteral("en_US");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.isoCode = QStringLiteral("en_GB");
|
||||
m_db->insert(trans);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PvSanImport::addMaterial(const QVector<QString> &material)
|
||||
{
|
||||
if(material.isEmpty())
|
||||
return false;
|
||||
//check for DatabaseEntry with ID 1 and it's version
|
||||
Database::PdmSanitationMaterial matTemp;
|
||||
|
||||
//remove from DB only if version differs
|
||||
if (m_db->selectPdmSanitationMaterial(1, matTemp) && matTemp.version == m_version)
|
||||
return true;
|
||||
|
||||
//m_db->truncatePdmSanitationMaterial();
|
||||
DBTransaction trans(m_db->database());
|
||||
NSqlQuery q(m_db->database());
|
||||
|
||||
QString stmt = QStringLiteral("DELETE FROM pdm_sanitation_material");
|
||||
|
||||
q.prepare(stmt);
|
||||
|
||||
DEBUG_LOG(m_logger) << "Statement: " << stmt;
|
||||
|
||||
if (!q.exec())
|
||||
{
|
||||
WARNING_LOG(m_logger) << "Could not delete sanitation materials";
|
||||
return false;
|
||||
}
|
||||
|
||||
trans.commit();
|
||||
|
||||
QString myContext = QStringLiteral("SanitationMaterial");
|
||||
QVector<Database::PdmTranslation> translations;
|
||||
m_db->select(translations);
|
||||
QSet<quint64> idsToRemove;
|
||||
for (const auto &tr : qAsConst(translations))
|
||||
{
|
||||
if (tr.context == myContext)
|
||||
idsToRemove.insert(tr.id);
|
||||
}
|
||||
|
||||
for (quint64 id : idsToRemove )
|
||||
{
|
||||
m_db->removePdmTranslation(id);
|
||||
}
|
||||
|
||||
//insert into db
|
||||
for (const QString &entry: material)
|
||||
{
|
||||
QStringList material = entry.split(QStringLiteral(";"));
|
||||
if (material.size() < 3 )
|
||||
continue;
|
||||
Database::PdmSanitationMaterial mat;
|
||||
mat.id = material.at(0).toInt();
|
||||
mat.name = material.at(1);
|
||||
mat.version = m_version;
|
||||
|
||||
if(m_db->insert(mat))
|
||||
{
|
||||
Database::PdmTranslation trans;
|
||||
trans.key = material.at(1);
|
||||
trans.disambiguation = QStringLiteral("name");
|
||||
trans.context = myContext;
|
||||
trans.translation = material.at(2);
|
||||
trans.isoCode = QStringLiteral("en_US");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.isoCode = QStringLiteral("en_GB");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.translation = material.at(1);
|
||||
trans.isoCode = QStringLiteral("de_DE");
|
||||
m_db->insert(trans);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PvSanImport::addInjuryPlaces(const QVector<QString> &kind, const QVector<QString> &place1, const QVector<QString> &place2)
|
||||
{
|
||||
if (kind.isEmpty() || place1.isEmpty() || place2.isEmpty())
|
||||
return false;
|
||||
|
||||
//check for DatabaseEntry with ID 1 and it's version
|
||||
Database::PdmSanitationInjuryKind kindTemp;
|
||||
|
||||
if (m_db->selectPdmSanitationInjuryKind(1, kindTemp) && kindTemp.version == m_version)
|
||||
return true;
|
||||
|
||||
QString myContext = QStringLiteral("SanitationInjuryKind");
|
||||
Database::PdmTranslation trans;
|
||||
|
||||
//remove from DB
|
||||
m_db->truncatePdmSanitationInjuryKind();
|
||||
|
||||
QVector<Database::PdmTranslation> translations;
|
||||
m_db->select(translations);
|
||||
QSet<quint64> idsToRemove;
|
||||
for (const auto &tr : qAsConst(translations))
|
||||
{
|
||||
if (tr.context == myContext)
|
||||
idsToRemove.insert(tr.id);
|
||||
}
|
||||
|
||||
for (quint64 id : idsToRemove )
|
||||
{
|
||||
m_db->removePdmTranslation(id);
|
||||
}
|
||||
|
||||
//insert into db
|
||||
trans.context = myContext;
|
||||
Database::PdmSanitationInjuryKind injuryKindDb;
|
||||
for (const QString &kd : qAsConst(kind))
|
||||
{
|
||||
QStringList kde = kd.split(QStringLiteral(";"));
|
||||
if (kde.size() < 3 )
|
||||
continue;
|
||||
injuryKindDb.id = kde.at(0).toInt();
|
||||
injuryKindDb.name = kde.at(1);
|
||||
injuryKindDb.version = m_version;
|
||||
if(m_db->insert(injuryKindDb))
|
||||
{
|
||||
//Add Translation
|
||||
trans.id = 0;
|
||||
trans.key = injuryKindDb.name;
|
||||
trans.disambiguation = QStringLiteral("name");
|
||||
trans.translation = kde.at(2);
|
||||
trans.isoCode = QStringLiteral("en_US");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.isoCode = QStringLiteral("en_GB");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.translation = injuryKindDb.name;
|
||||
trans.isoCode = QStringLiteral("de_DE");
|
||||
m_db->insert(trans);
|
||||
}
|
||||
}
|
||||
//Place1
|
||||
//remove from DB
|
||||
myContext = QStringLiteral("SanitationInjuryPlace1");
|
||||
m_db->truncatePdmSanitationInjuryPlace1();
|
||||
idsToRemove.clear();
|
||||
for (const auto &tr : qAsConst(translations))
|
||||
{
|
||||
if (tr.context == myContext)
|
||||
idsToRemove.insert(tr.id);
|
||||
}
|
||||
|
||||
for (quint64 id : idsToRemove )
|
||||
{
|
||||
m_db->removePdmTranslation(id);
|
||||
}
|
||||
|
||||
//insert into db
|
||||
trans.context = myContext;
|
||||
Database::PdmSanitationInjuryPlace1 placeDb;
|
||||
for (const QString &place : qAsConst(place1))
|
||||
{
|
||||
QStringList pl = place.split(QStringLiteral(";"));
|
||||
if (pl.size() < 3 )
|
||||
continue;
|
||||
placeDb.id = pl.at(0).toInt();
|
||||
placeDb.name = pl.at(1);
|
||||
placeDb.version = m_version;
|
||||
if(m_db->insert(placeDb))
|
||||
{
|
||||
//Add Translation
|
||||
trans.id = 0;
|
||||
trans.key = placeDb.name;
|
||||
trans.disambiguation = QStringLiteral("name");
|
||||
trans.translation = pl.at(2);
|
||||
trans.isoCode = QStringLiteral("en_US");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.isoCode = QStringLiteral("en_GB");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.translation = placeDb.name;
|
||||
trans.isoCode = QStringLiteral("de_DE");
|
||||
m_db->insert(trans);
|
||||
}
|
||||
}
|
||||
|
||||
//Place2
|
||||
//remove from DB
|
||||
myContext = QStringLiteral("SanitationInjuryPlace2");
|
||||
m_db->truncatePdmSanitationInjuryPlace2();
|
||||
idsToRemove.clear();
|
||||
for (const auto &tr : qAsConst(translations))
|
||||
{
|
||||
if (tr.context == myContext)
|
||||
idsToRemove.insert(tr.id);
|
||||
}
|
||||
|
||||
for (quint64 id : idsToRemove )
|
||||
{
|
||||
m_db->removePdmTranslation(id);
|
||||
}
|
||||
|
||||
//insert into db
|
||||
trans.context = myContext;
|
||||
Database::PdmSanitationInjuryPlace2 place2Db;
|
||||
for (const QString &place : qAsConst(place2))
|
||||
{
|
||||
QStringList pl = place.split(QStringLiteral(";"));
|
||||
if (pl.size() < 3 )
|
||||
continue;
|
||||
place2Db.id = pl.at(0).toInt();
|
||||
place2Db.name = pl.at(1);
|
||||
place2Db.version = m_version;
|
||||
|
||||
if(m_db->insert(place2Db))
|
||||
{
|
||||
//Add Translation
|
||||
trans.id = 0;
|
||||
trans.key = place2Db.name;
|
||||
trans.disambiguation = QStringLiteral("name");
|
||||
trans.translation = pl.at(2);
|
||||
trans.isoCode = QStringLiteral("en_US");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.isoCode = QStringLiteral("en_GB");
|
||||
m_db->insert(trans);
|
||||
trans.id = 0;
|
||||
trans.translation = place2Db.name;
|
||||
trans.isoCode = QStringLiteral("de_DE");
|
||||
m_db->insert(trans);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PvSanImport::addInjuries(const QVector<QString> &injuries)
|
||||
{
|
||||
|
||||
if(injuries.isEmpty())
|
||||
return false;
|
||||
//check for DatabaseEntry with ID 1 and it's version
|
||||
QString myContext = QStringLiteral("SanitationInjury");
|
||||
Database::PdmTranslation trans;
|
||||
|
||||
//remove from DB
|
||||
m_db->truncatePdmSanitationInjury();
|
||||
|
||||
//insert into db
|
||||
trans.context = myContext;
|
||||
Database::PdmSanitationInjury injuryDb;
|
||||
int id = 1;
|
||||
for (const QString &injury : qAsConst(injuries))
|
||||
{
|
||||
QStringList kde = injury.split(QStringLiteral(";"));
|
||||
if (kde.size() < 29 )
|
||||
continue;
|
||||
if (kde.at(1).toInt() < 1)
|
||||
continue;
|
||||
injuryDb.id = id++;
|
||||
injuryDb.kind = kde.at(1).toInt();
|
||||
injuryDb.place1 = kde.at(2).toInt();
|
||||
injuryDb.place2 = kde.at(3).toInt();
|
||||
injuryDb.vbg = kde.at(4).toInt();
|
||||
injuryDb.name = kde.at(28) + QStringLiteral(" ") + kde.at(29);
|
||||
m_db->insert(injuryDb);
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
} // namespace ProjectDataManagement
|
||||
Reference in new issue
Block a user