diff --git a/sources/dataBase/projectdatabase.cpp b/sources/dataBase/projectdatabase.cpp index 7a8adbb01..ac53e5b48 100644 --- a/sources/dataBase/projectdatabase.cpp +++ b/sources/dataBase/projectdatabase.cpp @@ -90,7 +90,7 @@ QVector projectDataBase::elementsInfoFromQuery(const QString &query * @return the header according to @query. * Header can be false, notably when user create is own query. */ -QStringList projectDataBase::headersFromElementsInfoQuery(const QString &query) +QStringList projectDataBase::headersFromElementNomenclatureViewQuery(const QString &query) { QStringList header_string; if (!query.startsWith("SELECT ") && !query.contains("FROM")) { @@ -107,34 +107,27 @@ QStringList projectDataBase::headersFromElementsInfoQuery(const QString &query) return header_string; } - for (int i=0 ; iuuid().toString(); } @@ -255,12 +248,48 @@ bool projectDataBase::createDataBase(const QString &connection_name, const QStri if (!query_.exec(element_info_table)) { qDebug() << " element_info_table query : " << query_.lastError(); } + + createElementNomenclatureView(); } updateDB(); return true; } +void projectDataBase::createElementNomenclatureView() +{ + QString create_view ("CREATE VIEW element_nomenclature_view AS SELECT " + "ei.label AS label," + "ei.plant AS plant," + "ei.location AS location," + "ei.comment AS comment," + "ei.function AS function," + "ei.tension_protocol AS tension_protocol," + "ei.auxiliary1 AS auxiliary1," + "ei.auxiliary2 AS auxiliary2," + "ei.description AS description," + "ei.designation AS designation," + "ei.manufacturer AS manufacturer," + "ei.manufacturer_reference AS manufacturer_reference," + "ei.machine_manufacturer_reference AS machine_manufacturer_reference," + "ei.supplier AS supplier," + "ei.quantity AS quantity," + "ei.unity AS unity," + "d.pos AS diagram_position," + "e.type AS element_type," + "e.sub_type AS element_sub_type," + "di.title AS title," + "di.folio AS folio," + "e.pos AS position " + " FROM element_info ei, diagram_info di, element e, diagram d" + " WHERE ei.element_uuid = e.uuid AND e.diagram_uuid = d.uuid AND di.diagram_uuid = d.uuid"); + + QSqlQuery query(m_data_base); + if (!query.exec(create_view)) { + qDebug() << query.lastError(); + } +} + void projectDataBase::populateDiagramTable() { QSqlQuery query_(m_data_base); diff --git a/sources/dataBase/projectdatabase.h b/sources/dataBase/projectdatabase.h index 610a9d2ba..5aa44cc62 100644 --- a/sources/dataBase/projectdatabase.h +++ b/sources/dataBase/projectdatabase.h @@ -49,13 +49,14 @@ class projectDataBase : public QObject void updateDB(); QETProject *project() const; - static QStringList headersFromElementsInfoQuery(const QString &query); + static QStringList headersFromElementNomenclatureViewQuery(const QString &query); signals: void dataBaseUpdated(); private: bool createDataBase(const QString &connection_name= QString(), const QString &name = QString()); + void createElementNomenclatureView(); void populateDiagramTable(); void populateElementTable(); void populateElementInfoTable(); diff --git a/sources/dataBase/ui/elementquerywidget.cpp b/sources/dataBase/ui/elementquerywidget.cpp index f05e5c49d..fb7760082 100644 --- a/sources/dataBase/ui/elementquerywidget.cpp +++ b/sources/dataBase/ui/elementquerywidget.cpp @@ -29,10 +29,10 @@ ElementQueryWidget::ElementQueryWidget(QWidget *parent) : { ui->setupUi(this); - m_export_info.insert("e.pos", tr("Position")); - m_export_info.insert("di.title", tr("Titre du folio")); - m_export_info.insert("d.pos", tr("Position du folio")); - m_export_info.insert("di.folio", tr("Numéro du folio")); + m_export_info.insert("position", tr("Position")); + m_export_info.insert("title", tr("Titre du folio")); + m_export_info.insert("diagram_position", tr("Position du folio")); + m_export_info.insert("folio", tr("Numéro du folio")); m_button_group.setExclusive(false); m_button_group.addButton(ui->m_all_cb, 0); @@ -149,42 +149,38 @@ QString ElementQueryWidget::queryStr() const } } - QString from = " FROM element_info ei, element e, diagram d, diagram_info di"; - QString where = " WHERE ei.element_uuid = e.uuid" - " AND di.diagram_uuid = d.uuid" - " AND e.diagram_uuid = d.uuid"; + QString from = " FROM element_nomenclature_view"; + QString where; if (ui->m_all_cb->checkState() == Qt::PartiallyChecked) { + where = " WHERE "; bool b = false; - where += " AND ("; if (ui->m_terminal_cb->isChecked()) { if (b) where +=" OR"; - where += " e.type = 'Terminale'"; + where += " element_type = 'Terminale'"; b = true; } if (ui->m_simple_cb->isChecked()) { if (b) where +=" OR"; - where += " e.type = 'Simple'"; + where += " element_type = 'Simple'"; b = true; } if (ui->m_button_cb->isChecked()) { if (b) where +=" OR"; - where += " e.sub_type = 'commutator'"; + where += " element_sub_type = 'commutator'"; b = true; } if (ui->m_coil_cb->isChecked()) { if (b) where +=" OR"; - where += " e.sub_type = 'coil'"; + where += " element_sub_type = 'coil'"; b = true; } if (ui->m_protection_cb->isChecked()) { if (b) where +=" OR"; - where += " e.sub_type = 'protection'"; + where += " element_sub_type = 'protection'"; } - where += ")"; } - QString q(select + column + from + where + filter_ + order_by); return q; @@ -233,8 +229,11 @@ void ElementQueryWidget::setUpItems() { for(QString key : QETApp::elementInfoKeys()) { + if (key == "formula") + continue; + auto item = new QListWidgetItem(QETApp::elementTranslatedInfoKey(key), ui->m_var_list); - item->setData(Qt::UserRole, "ei." + key); + item->setData(Qt::UserRole, key); m_items_list << item; } diff --git a/sources/qetgraphicsitem/ViewItem/nomenclaturemodel.cpp b/sources/qetgraphicsitem/ViewItem/nomenclaturemodel.cpp index e991a53e9..a485ddc33 100644 --- a/sources/qetgraphicsitem/ViewItem/nomenclaturemodel.cpp +++ b/sources/qetgraphicsitem/ViewItem/nomenclaturemodel.cpp @@ -197,7 +197,7 @@ QETProject *NomenclatureModel::project() const { */ void NomenclatureModel::autoHeaders() { - auto headers = projectDataBase::headersFromElementsInfoQuery(m_query); + auto headers = projectDataBase::headersFromElementNomenclatureViewQuery(m_query); for (auto i=0 ; isetHeaderData(i, Qt::Horizontal, headers.at(i)); }