Advertisement
arsinte_andrei

AtpDb.cpp

Jul 22nd, 2014
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "AtpDb.h"
  2.  
  3. #include <QtSql>
  4. #include <QFile>
  5. #include <QMessageBox>
  6. #include <QApplication>
  7.  
  8. QSqlDatabase *AtpDb::mydb = NULL;
  9. bool AtpDb::openStatus = false;
  10. QString AtpDb::dbPath = "";
  11. QString AtpDb::dbType = "";
  12.  
  13. bool AtpDb::readIniFile(){
  14.     dbPath = AtpSettings::getStringValue("Db/Path", "");
  15.     dbType = AtpSettings::getStringValue("Db/Type", "QSQLITE");
  16.     if (dbFileExist(dbPath) && isDriverAvailable(dbType)){
  17.         return true;
  18.     } else {
  19.         return false;
  20.     }
  21. }
  22.  
  23. bool AtpDb::dbFileExist(QString cale){
  24.     QFile db_file(cale);
  25.     if (!db_file.exists()) {
  26.         QMessageBox::critical(0, qApp->tr("Cannot open database"),
  27.         qApp->tr("Database file not found. Create or import one in Tools Settings!"), QMessageBox::Ok);
  28.         return false;
  29.     } else {
  30.         return true;
  31.     }
  32. }
  33.  
  34. bool AtpDb::isDriverAvailable(QString tip){
  35.     if(!QSqlDatabase::isDriverAvailable(tip)){
  36.         QMessageBox::critical(0, qApp->tr("Driver is not available"),
  37.         qApp->tr("Unable to establish a database connection.\n"
  38.         "DataBase driver is not available! Check Database settings"), QMessageBox::Cancel);
  39.         return false;
  40.     }
  41.     return true;
  42. }
  43.  
  44. bool AtpDb::setNewConnection(){
  45.     mydb = new QSqlDatabase(QSqlDatabase::addDatabase(dbType));
  46. //  mydb->addDatabase(dbType);
  47.     mydb->setDatabaseName(dbPath);
  48.     if (!mydb->open()){
  49.         qCritical() << "couldn't connect to database Error[" << mydb->lastError().text() << "]"  << dbPath;
  50.         return false;
  51.     } else {
  52.         qDebug() << "succsessfully connected to database " << dbPath;
  53.         openStatus = true;
  54.         return true;
  55.     }
  56. }
  57.  
  58. bool AtpDb::isOpen(){
  59.     return openStatus;
  60. }
  61.  
  62. void AtpDb::setDataBasePath(QString newPath){
  63.     dbPath = newPath;
  64.     uninit();
  65. }
  66.  
  67. void AtpDb::setDataBaseType(QString newType){
  68.     dbType = newType;
  69.     uninit();
  70. }
  71.  
  72. QSqlQuery *AtpDb::atpCreateView(QString sqlQuerry){
  73.     QSqlQuery *myQuerry = new QSqlQuery(*getDataBase());
  74.     myQuerry->prepare(sqlQuerry);
  75.     myQuerry->exec();
  76.     return myQuerry;
  77. }
  78.  
  79. QSqlQuery *AtpDb::atpDeleteView(QString viewName){
  80.     QSqlQuery *myQuerry = new QSqlQuery(*getDataBase());
  81.     myQuerry->prepare("DROP VIEW " + viewName);
  82.     myQuerry->exec();
  83.     return myQuerry;
  84. }
  85.  
  86. QSqlQuery *AtpDb::atpSelect(QString sqlQuerry, QMap<QString, QVariant> *myArray ) {
  87.     QSqlQuery *myQuerry = new QSqlQuery(*getDataBase());
  88.     myQuerry->prepare(sqlQuerry);
  89. //  qDebug() << myArray;
  90.     if (myArray && !myArray->isEmpty()){
  91.         QMap<QString, QVariant>::const_iterator i;
  92.         for (i = myArray->constBegin(); i != myArray->constEnd(); ++i) {
  93.             myQuerry->bindValue(i.key(), i.value());
  94.             //myQuerry.bindValue(i.key().toUtf8().data(), i.value().toString().toUtf8().data());
  95.         }
  96.     }
  97. //  qDebug() << myQuerry.boundValues();
  98.     myQuerry->exec();
  99. //  qDebug() <<  myQuerry.lastQuery() <<myQuerry.lastError();
  100.     return myQuerry;
  101. }
  102.  
  103. QSqlQuery *AtpDb::atpInsert(QString tableName, QMap<QString, QVariant> *data ) {
  104.     QString fieldNames, fieldValues, temp;
  105.     QMap<QString, QVariant>::const_iterator i1;
  106.     for (i1 = data->constBegin(); i1 != data->constEnd(); ++i1) {
  107.         temp = i1.key();
  108.         fieldValues += temp + ", ";
  109.         fieldNames += temp.remove(0,1) + ", ";
  110.     }
  111.     fieldNames.remove(fieldNames.lastIndexOf(","),1);
  112.     fieldValues.remove(fieldValues.lastIndexOf(","),1);
  113. //  qDebug() << fieldNames << "** - **" << fieldValues;
  114.  
  115.     QSqlQuery *myQuerry = new QSqlQuery(*getDataBase());
  116.     myQuerry->prepare("INSERT INTO " + tableName + " ( " + fieldNames + ") VALUES ( " + fieldValues + ")");
  117. //  qDebug() << data;
  118.     QMap<QString, QVariant>::const_iterator i;
  119.     for (i = data->constBegin(); i != data->constEnd(); ++i) {
  120.         myQuerry->bindValue(i.key(), i.value());
  121.         //myQuerry.bindValue(i.key().toUtf8().data(), i.value().toString().toUtf8().data());
  122.     }
  123. //  qDebug() << myQuerry.boundValues();
  124.     myQuerry->exec();
  125. //  qDebug() <<  myQuerry.lastQuery() <<myQuerry.lastError();
  126.     return myQuerry;
  127. }
  128.  
  129. QSqlQuery *AtpDb::atpUpdate(QString tableName, QMap<QString, QVariant> *data, QString whereTo) {
  130.     QString fieldDetails, fieldNames, fieldValues, temp;
  131.     QMap<QString, QVariant>::const_iterator i1;
  132.     for (i1 = data->constBegin(); i1 != data->constEnd(); ++i1) {
  133.         temp = i1.key();
  134.         fieldValues = temp;
  135.         fieldNames = temp.remove(0,1);
  136.         fieldDetails += fieldNames + " = " + fieldValues + ", ";
  137.     }
  138.     fieldDetails.remove(fieldDetails.lastIndexOf(","),1);
  139.     QSqlQuery *myQuerry = new QSqlQuery(*getDataBase());
  140.     myQuerry->prepare("UPDATE " + tableName + " SET " + fieldDetails + " WHERE " + whereTo);
  141.     QMap<QString, QVariant>::const_iterator i;
  142.     for (i = data->constBegin(); i != data->constEnd(); ++i) {
  143.         myQuerry->bindValue(i.key(), i.value());
  144.     }
  145.     myQuerry->exec();
  146. //  qDebug() <<  myQuerry.lastQuery() <<myQuerry.lastError();
  147.     return myQuerry;
  148. }
  149.  
  150. QSqlQuery *AtpDb::atpDelete(QString tableName, QString whereTo){
  151.     QSqlQuery *myQuerry = new QSqlQuery(*getDataBase());
  152.     myQuerry->prepare("DELETE FROM " + tableName + " WHERE " + whereTo);
  153.     myQuerry->exec();
  154. //  qDebug() <<  myQuerry.lastQuery() <<myQuerry.lastError();
  155.     return myQuerry;
  156. }
  157.  
  158. bool AtpDb::createSQLiteDb(QString dbNewPath, QString dbNewType) {
  159.     uninit();
  160.     if (!isDriverAvailable(dbNewType)){
  161.         return false;
  162.     }
  163.     QSqlDatabase *myNewdb = new QSqlDatabase(QSqlDatabase::addDatabase(dbType));
  164.     myNewdb->addDatabase(dbNewType);
  165.     qDebug() << dbNewType;
  166.     myNewdb->setDatabaseName(dbNewPath);
  167.     if (!myNewdb->open()){
  168.         qCritical() << "couldn't connect to database Error[" << myNewdb->lastError().text() << "]"  << dbPath;
  169.         return false;
  170.     } else {
  171.         qDebug() << "succsessfully connected to database " << dbPath;
  172.     }
  173.     qDebug() << "DB 1";
  174.     QVector<QString> tables(0);
  175.     tables.append("CREATE TABLE client_list_tbl(client_id integer   PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, client_name text, client_address text, client_tel text, client_mob text, client_email text);");
  176.     tables.append("CREATE TABLE company_tbl (comp_id INTEGER        PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, comp_name text, comp_addres text, comp_www text, comp_director text, comp_tel text, comp_mob text, comp_email text);");
  177.     tables.append("CREATE TABLE for_tbl (for_id integer             PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, for_name text);");
  178.     tables.append("CREATE TABLE group_tbl (group_id integer         PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, group_place text);");
  179.     tables.append("CREATE TABLE invoice_tbl (inv_id integer         PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, inv_quote_id  integer,   inv_date date, inv_for_id integer, inv_value real);");
  180.     tables.append("CREATE TABLE login_tbl (login_id integer         PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, login_username  text, login_password  text);");
  181.     tables.append("CREATE TABLE materiale_tbl ( mat_id integer      PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, mat_name text, mat_price1 real, mat_price2 real, mat_supplier_id  integer);");
  182.     tables.append("CREATE TABLE plata_tbl (plata_id integer         PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, plata_detalii  text);");
  183.     tables.append("CREATE TABLE punct_price ( punct_id integer      PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, punct_name    text, punct_price1  real,  punct_price2  real);");
  184.     tables.append("CREATE TABLE quotation_detail_tbl (qd_id integer PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, qd_q_id  integer, qd_item_place integer, qd_price_id integer, qd_quantity1 integer, qd_quantity2 integer, qd_note text);");
  185.     tables.append("CREATE TABLE quotation_tbl (q_id integer         PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, q_client_id integer, q_company_id integer, q_data date, q_price1 real, q_price2 real, q_price3 real, q_mytotal real);");
  186.     tables.append("CREATE TABLE receipt (re_id integer              PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, re_inv_id integer, re_total real, re_client_id integer, re_comp_id integer);");
  187.     tables.append("CREATE TABLE receipt_detail_tbl (red_id integer  PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, red_re_id integer, red_data date, red_amount real, red_detail integer, red_note text);");
  188.     tables.append("CREATE TABLE supplier_tbl (supplier_id integer   PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, supplier_name text, supplier_addres text, supplier_telephon text, supplier_mob text, supplier_email text, supplier_web text);");
  189.     QSqlQuery *myquerry = new QSqlQuery(*myNewdb);
  190.     for (int i = 0; i < tables.size(); ++i) {
  191.         myquerry->exec(tables[i]);
  192.         qDebug() << myquerry->lastQuery();
  193.         qDebug() << myquerry->lastError();
  194.     }
  195.     mydb = myNewdb;
  196.     return true;
  197. }
  198.  
  199. QSqlDatabase *AtpDb::getDataBase(){
  200.     if (mydb == NULL){
  201.         if(readIniFile()){
  202.             setNewConnection();
  203.         }
  204.     }
  205.     return mydb;
  206. }
  207.  
  208. QSqlQuery *AtpDb::quotationDetailView(int qId){
  209.     QString viewTableStr = QString (" "
  210.         "CREATE VIEW IF NOT EXISTS quotation_detail_view_%1 "
  211.         "AS "
  212.         "SELECT quotation_detail_tbl.qd_id, quotation_detail_tbl.qd_q_id, "
  213.             "quotation_detail_tbl.qd_group_place, group_tbl.group_place, "
  214.             "quotation_detail_tbl.qd_point_id, punct_price.punct_name, quotation_detail_tbl.qd_point_q1, quotation_detail_tbl.qd_point_q2, punct_price.punct_price1, punct_price.punct_price2, "
  215.                 "(quotation_detail_tbl.qd_point_q1 * punct_price.punct_price1) AS 'qd_p_total1', "
  216.                 "(quotation_detail_tbl.qd_point_q2 * punct_price.punct_price1) AS 'qd_p_total2', "
  217.                 "((quotation_detail_tbl.qd_point_q1 + quotation_detail_tbl.qd_point_q2) * punct_price.punct_price2) AS 'qd_p_total_my', "
  218.             "quotation_detail_tbl.qd_mat_id, materiale_tbl.mat_name, quotation_detail_tbl.qd_mat_q1, quotation_detail_tbl.qd_mat_q2, materiale_tbl.mat_price1, materiale_tbl.mat_price2, "
  219.                 "(quotation_detail_tbl.qd_mat_q1 * materiale_tbl.mat_price1) AS 'qd_m_total1', "
  220.                 "(quotation_detail_tbl.qd_mat_q2 * materiale_tbl.mat_price1) AS 'qd_m_total2', "
  221.                 "((quotation_detail_tbl.qd_mat_q1 + quotation_detail_tbl.qd_mat_q2) * materiale_tbl.mat_price2) AS 'qd_m_total_my', "
  222.             "quotation_detail_tbl.qd_discount, quotation_detail_tbl.qd_notes  "
  223.         "FROM quotation_detail_tbl "
  224.             "LEFT OUTER JOIN punct_price ON quotation_detail_tbl.qd_point_id = punct_price.punct_id "
  225.             "LEFT OUTER JOIN group_tbl ON quotation_detail_tbl.qd_group_place = group_tbl.group_id "
  226.             "LEFT OUTER JOIN materiale_tbl ON quotation_detail_tbl.qd_mat_id = materiale_tbl.mat_id "
  227.         "WHERE quotation_detail_tbl.qd_q_id = %1 ").arg(qId) ;
  228.     return atpCreateView(viewTableStr);
  229. }
  230.  
  231. QSqlQuery *AtpDb::quotationView(){
  232.     QString viewTableStr = " "
  233.         "CREATE VIEW IF NOT EXISTS quotation_view "
  234.         "AS "
  235.         "SELECT quotation_tbl.q_id, company_tbl.comp_name, client_list_tbl.client_name, quotation_tbl.q_data, quotation_tbl.q_price1, quotation_tbl.q_price2, quotation_tbl.q_price3, quotation_tbl.q_mytotal "
  236.         "FROM quotation_tbl "
  237.              "LEFT OUTER JOIN company_tbl "
  238.                   "ON quotation_tbl.q_company_id = company_tbl.comp_id "
  239.              "LEFT OUTER JOIN client_list_tbl "
  240.                   "ON quotation_tbl.q_client_id = client_list_tbl.client_id;";
  241.     return atpCreateView(viewTableStr);
  242. }
  243.  
  244. void AtpDb::uninit() {
  245.     if (mydb!=NULL) {
  246.         delete mydb;
  247.         mydb = NULL;
  248.     }
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement