Subversion Repositories OpenInventory

Rev

Rev 111 | Rev 113 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 111 Rev 112
1
#include "mainwindow.h"
1
#include "mainwindow.h"
2
#include "ui_mainwindow.h"
2
#include "ui_mainwindow.h"
3
3
4
4
5
5
6
void MainWindow::getDatabaseData(){
6
void MainWindow::getDatabaseData(){
7
int list_count;
7
int list_count;
8
8
9
if (rootItems.isEmpty()) return;
9
if (rootItems.isEmpty()) return;
10
10
11
list_count = rootItems.count();
11
list_count = rootItems.count();
12
12
13
for (int i=0; i < list_count; i++){
13
for (int i=0; i < list_count; i++){
14
14
15
    buildTree(rootItems.at(i));
15
    buildTree(rootItems.at(i));
16
16
17
}
17
}
18
18
19
}
19
}
20
20
21
void MainWindow::buildTree(QTreeWidgetItem * model_item){
21
void MainWindow::buildTree(QTreeWidgetItem * model_item){
-
 
22
-
 
23
-
 
24
-
 
25
22
QString model_name;
26
QString model_name;
23
QString rootClassID;
27
QString rootClassID;
24
QString rootClassInctance;
28
QString rootClassInctance;
25
29
26
QTreeWidgetItem * item;
30
QTreeWidgetItem * item;
27
model_name = model_item->text(0);
31
model_name = model_item->text(0);
28
if (model_item->checkState(0) == false) return;
32
if (model_item->checkState(0) == false) return;
29
item = new QTreeWidgetItem (ui->treeWidget_2);
33
item = new QTreeWidgetItem (ui->treeWidget_2);
30
item->setText(0, model_name);
34
item->setText(0, model_name);
31
rootClassID = model_item->child(0)->text(1);
35
rootClassID = model_item->child(0)->text(1);
32
rootClassInctance = getClassInctance(rootClassID);
36
rootClassInctance = getClassInctance(rootClassID);
33
if (model_item->child(0)->checkState(0)) // åñëè â ìîäåëè êîðíåâîé êëàññ âûáðàí äëÿ îòîáðàæåíèÿ (ñòîèò ãàëî÷êà), òî
37
if (model_item->child(0)->checkState(0)) // åñëè â ìîäåëè êîðíåâîé êëàññ âûáðàí äëÿ îòîáðàæåíèÿ (ñòîèò ãàëî÷êà), òî
34
    {
38
    {
35
        QTreeWidgetItem * item_tmp;
39
        QTreeWidgetItem * item_tmp;
36
        item_tmp = new QTreeWidgetItem(item);                  // â äåðåâå, îòîáðàæàþùåì îáúåêòû êëàññîâ, ñîçäàåì íîâûé óçåë
40
        item_tmp = new QTreeWidgetItem(item);                  // â äåðåâå, îòîáðàæàþùåì îáúåêòû êëàññîâ, ñîçäàåì íîâûé óçåë
37
        item_tmp->setText(0, model_item->child(0)->text(0));    // ñ íàçâàíèåì êëàññà
41
        item_tmp->setText(0, model_item->child(0)->text(0));    // ñ íàçâàíèåì êëàññà
38
42
39
        showClassObjects(item_tmp, model_item->child(0));  // è âûâîäèì âñå îáúåêòû äàííîãî êëàññà
43
        //showClassObjects(item_tmp, model_item->child(0));  // è âûâîäèì âñå îáúåêòû äàííîãî êëàññà
-
 
44
-
 
45
        showObjects(item_tmp, model_item->child(0), tr(""));
40
    }
46
    }
-
 
47
-
 
48
-
 
49
/*****************************************************/
-
 
50
-
 
51
41
}
52
}
42
53
43
54
44
// ïîëó÷àåì èìÿ òàáëèöû - õðàíèëèùà îáúåêòîâ êëàññà
55
// ïîëó÷àåì èìÿ òàáëèöû - õðàíèëèùà îáúåêòîâ êëàññà
45
QString MainWindow::getClassInctance(QString class_id){
56
QString MainWindow::getClassInctance(QString class_id){
46
    QSqlQuery q;
57
    QSqlQuery q;
47
    QString sql_str;
58
    QString sql_str;
48
    QString result;
59
    QString result;
49
    QString classInctance;
60
    QString classInctance;
50
    int field_inctance;
61
    int field_inctance;
51
    bool ok;
62
    bool ok;
52
    sql_str = tr("select * "
63
    sql_str = tr("select * "
53
                 " from ListOfClasses where  ListOfClasses.ID = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
64
                 " from ListOfClasses where  ListOfClasses.ID = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
54
                 );
65
                 );
55
    sql_str.append(class_id);
66
    sql_str.append(class_id);
56
     sql_str.append(tr("'"));
67
     sql_str.append(tr("'"));
57
    q.prepare(sql_str);
68
    q.prepare(sql_str);
58
69
59
    ok = q.exec();
70
    ok = q.exec();
60
    if (!ok) {
71
    if (!ok) {
61
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
72
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
62
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
73
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
63
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
74
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
64
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
75
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
65
                                                                            return result;
76
                                                                            return result;
66
                     }
77
                     }
67
    field_inctance = q.record().indexOf(tr("TableWhithInstance"));
78
    field_inctance = q.record().indexOf(tr("TableWhithInstance"));
68
    while(q.next()){
79
    while(q.next()){
69
80
70
                  classInctance = q.value(field_inctance).toString();
81
                  classInctance = q.value(field_inctance).toString();
71
                  result.append(classInctance);
82
                  result.append(classInctance);
72
                  }
83
                  }
73
84
74
  return result;
85
  return result;
75
86
76
}
87
}
77
88
78
void MainWindow::showClassObjects(QTreeWidgetItem * parent_item, QTreeWidgetItem * model_item){
89
void MainWindow::showClassObjects(QTreeWidgetItem * parent_item, QTreeWidgetItem * model_item){
79
    QString classID; // èäåíòèôèêàòîð êëàññà
90
    QString classID; // èäåíòèôèêàòîð êëàññà
80
    QString inctance; // èìÿ òàáëèöû, õðàíèëèùà
91
    QString inctance; // èìÿ òàáëèöû, õðàíèëèùà
81
    QSqlQuery q;
92
    QSqlQuery q;
82
    QString sql_str;
93
    QString sql_str;
83
    QString str_tmp;
94
    QString str_tmp;
84
    bool ok;
95
    bool ok;
85
    int field_ID;
96
    int field_ID;
86
    int i;
97
    int i;
87
    classID = model_item->text(1);
98
    classID = model_item->text(1);
88
    inctance = getClassInctance(classID);
99
    inctance = getClassInctance(classID);
89
100
90
    sql_str = tr("select * "
101
    sql_str = tr("select * "
91
                 " from "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
102
                 " from "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
92
                 );
103
                 );
93
    sql_str.append(inctance);
104
    sql_str.append(inctance);
94
    q.prepare(sql_str);
105
    q.prepare(sql_str);
95
106
96
    ok = q.exec();
107
    ok = q.exec();
97
    if (!ok) {
108
    if (!ok) {
98
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
109
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
99
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
110
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
100
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
111
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
101
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
112
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
102
                                                                            return;
113
                                                                            return;
103
                     }
114
                     }
104
115
105
    field_ID = q.record().indexOf(tr("ID"));
116
    field_ID = q.record().indexOf(tr("ID"));
106
117
107
118
108
    while(q.next()){
119
    while(q.next()){
109
                  if (q.record().count() > 1)
120
                  if (q.record().count() > 1)
110
                  {
121
                  {
111
                    QString value_tmp;
122
                    QString value_tmp;
112
                    QString ID_tmp;
123
                    QString ID_tmp;
113
                    QTreeWidgetItem * itm;
124
                    QTreeWidgetItem * itm;
114
                    ID_tmp = q.value(field_ID).toString(); // îïðåäåëÿåì èäåíòèôèêàòîð îáúåêòà
125
                    ID_tmp = q.value(field_ID).toString(); // îïðåäåëÿåì èäåíòèôèêàòîð îáúåêòà
115
                    value_tmp = q.value(1).toString(); // îïðåäåëÿåì èìÿ îáúåêòà (äîëæíî õðàíèòüñÿ â ïåðâîì ïîëå)
126
                    value_tmp = q.value(1).toString(); // îïðåäåëÿåì èìÿ îáúåêòà (äîëæíî õðàíèòüñÿ â ïåðâîì ïîëå)
116
                    itm = new QTreeWidgetItem(parent_item); // äîáàâëÿåì â äåðåâî óçåë, ñîîòâåòñòâóþùèé îáúåêòó
127
                    itm = new QTreeWidgetItem(parent_item); // äîáàâëÿåì â äåðåâî óçåë, ñîîòâåòñòâóþùèé îáúåêòó
117
                    itm->setText(0, value_tmp);
128
                    itm->setText(0, value_tmp);
118
                    for (int i; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû
129
                    for (int i; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû
119
                    {
130
                    {
120
                        QTreeWidgetItem * model_item_tmp;           // åñëè åñòü
131
                        QTreeWidgetItem * model_item_tmp;           // åñëè åñòü
121
                        model_item_tmp = model_item->child(i);      // îòîáðàæàåì îáúåêòû äî÷åðíèõ êëàññîâ
132
                        model_item_tmp = model_item->child(i);      // îòîáðàæàåì îáúåêòû äî÷åðíèõ êëàññîâ
122
                        MainWindow::showObjectChildrens(ID_tmp, itm, model_item_tmp);
133
                        MainWindow::showObjectChildrens(ID_tmp, itm, model_item_tmp);
123
134
124
                    }
135
                    }
125
                  }
136
                  }
126
137
127
             }
138
             }
128
139
129
   
140
   
130
    i++;
141
    i++;
131
}
142
}
132
143
133
144
134
145
135
void MainWindow::showObjectChildrens(QString object_ID, QTreeWidgetItem * object_item, QTreeWidgetItem * model_item){ // îòîáðàçèì îáúåêòû êëàññîâà
146
void MainWindow::showObjectChildrens(QString object_ID, QTreeWidgetItem * object_item, QTreeWidgetItem * model_item){ // îòîáðàçèì îáúåêòû êëàññîâà
136
147
137
    QString classID; // èäåíòèôèêàòîð êëàññà
148
    QString classID; // èäåíòèôèêàòîð êëàññà
138
149
139
    QString inctance; // èìÿ òàáëèöû, õðàíèëèùà
150
    QString inctance; // èìÿ òàáëèöû, õðàíèëèùà
140
    QSqlQuery q;
151
    QSqlQuery q;
141
    QString sql_str;
152
    QString sql_str;
142
    QString str_tmp;
153
    QString str_tmp;
143
    bool ok;
154
    bool ok;
144
    classID = model_item->text(1);
155
    classID = model_item->text(1);
145
    inctance = getClassInctance(classID);
156
    inctance = getClassInctance(classID);
146
157
147
    sql_str = tr("select * "
158
    sql_str = tr("select * "
148
                 " from '"       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
159
                 " from '"       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
149
                 );
160
                 );
150
    sql_str.append(inctance);
161
    sql_str.append(inctance);
151
    sql_str.append(tr("' where "));
162
    sql_str.append(tr("' where "));
152
163
153
164
154
    q.prepare(sql_str);
165
    q.prepare(sql_str);
155
166
156
    ok = q.exec();
167
    ok = q.exec();
157
    if (!ok) {
168
    if (!ok) {
158
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
169
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
159
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
170
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
160
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
171
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
161
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
172
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
162
                                                                            return;
173
                                                                            return;
163
                     }
174
                     }
164
}
175
}
165
176
166
177
167
void MainWindow::showObjects(QTreeWidgetItem * parent_object_item, QTreeWidgetItem * model_item){
178
void MainWindow::showObjects(QTreeWidgetItem * parent_object_item, QTreeWidgetItem * model_item, QString filtr){
-
 
179
    QString classID; // èäåíòèôèêàòîð êëàññà
-
 
180
    QString inctance; // èìÿ òàáëèöû, õðàíèëèùà
-
 
181
    QString className; // èìÿ êëàññà
-
 
182
    int field_ID;
-
 
183
    bool filtr_empty;
-
 
184
    bool ok;
-
 
185
    QSqlQuery q;
-
 
186
    QString sql_str;
-
 
187
    QString str_tmp;
-
 
188
    filtr_empty = filtr.isEmpty();
-
 
189
    classID = model_item->text(1);
-
 
190
    className = model_item->text(0);
-
 
191
    inctance = getClassInctance(classID);
-
 
192
-
 
193
    sql_str = tr("select * "
-
 
194
                 " from "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
-
 
195
                 );
-
 
196
    sql_str.append(inctance);
-
 
197
    if (!filtr.isEmpty())   { // åñëè ôèëüòð íå ïóñòîé
-
 
198
                                 sql_str.append(tr(" "));
-
 
199
                                 sql_str.append(filtr); // äîáàâëÿåì â çàïðîñ ôèëüòð
-
 
200
                            }
-
 
201
-
 
202
    q.prepare(sql_str);
-
 
203
-
 
204
    ok = q.exec();
-
 
205
    if (!ok) {
-
 
206
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
-
 
207
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
-
 
208
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
-
 
209
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
-
 
210
                                                                            return;
-
 
211
                     }
168
212
-
 
213
    field_ID = q.record().indexOf(tr("ID"));
-
 
214
-
 
215
    while(q.next()){
-
 
216
                  if (q.record().count() > 1)
-
 
217
                  {
-
 
218
                    QString value_tmp;
-
 
219
                    QString ID_tmp;
-
 
220
                    QTreeWidgetItem * itm;
-
 
221
                    ID_tmp = q.value(field_ID).toString(); // îïðåäåëÿåì èäåíòèôèêàòîð îáúåêòà
-
 
222
                    value_tmp = q.value(1).toString(); // îïðåäåëÿåì èìÿ îáúåêòà (äîëæíî õðàíèòüñÿ â ïåðâîì ïîëå)
-
 
223
                    itm = new QTreeWidgetItem(parent_object_item); // äîáàâëÿåì â äåðåâî óçåë, ñîîòâåòñòâóþùèé îáúåêòó
-
 
224
                    itm->setText(0, value_tmp);
-
 
225
-
 
226
                    for (int i=0; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû
-
 
227
                    {
-
 
228
                        QTreeWidgetItem * model_item_tmp;           // åñëè åñòü
-
 
229
                        QString pointer_name;
-
 
230
                        QString filtr_tmp;
-
 
231
                        bool pointer_isEmpty;
-
 
232
                        model_item_tmp = model_item->child(i);      // îòîáðàæàåì îáúåêòû äî÷åðíèõ êëàññîâ
-
 
233
                        pointer_name = getPointerFieldName(classID, model_item->child(i)->text(1));
-
 
234
                        pointer_isEmpty = pointer_name.isEmpty();
-
 
235
                        filtr_tmp = tr("where ");
-
 
236
                        filtr_tmp.append(tr("`"));
-
 
237
                        filtr_tmp.append(pointer_name);
-
 
238
                        filtr_tmp.append(tr("` = '"));
-
 
239
                        filtr_tmp.append(ID_tmp);
-
 
240
                         filtr_tmp.append(tr("'"));
-
 
241
                        showObjects(itm,  model_item_tmp, filtr_tmp);
-
 
242
                        //MainWindow::showObjectChildrens(ID_tmp, itm, model_item_tmp);
-
 
243
-
 
244
                    }
-
 
245
-
 
246
-
 
247
                }
-
 
248
-
 
249
              }
-
 
250
-
 
251
-
 
252
-
 
253
-
 
254
    for (int i; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû
-
 
255
        {
-
 
256
-
 
257
-
 
258
        }
-
 
259
-
 
260
}
-
 
261
-
 
262
QString MainWindow::getPointerFieldName(QString parent_class_id, QString chield_class_id){
-
 
263
-
 
264
    QSqlQuery q;
-
 
265
    QString sql_str;
-
 
266
    QString str_tmp;
-
 
267
    QString field;
-
 
268
    QString result;
-
 
269
    int field_name;
-
 
270
    bool ok;
-
 
271
    sql_str = tr("select * "
-
 
272
                 " from `DescriptionOfClasses` where `DescriptionOfClasses`.`FieldType` = 'pointer' and  `DescriptionOfClasses`.`DefaultValue` = "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
-
 
273
                 );
-
 
274
-
 
275
    sql_str.append(tr("'"));
-
 
276
    sql_str.append(parent_class_id);
-
 
277
    sql_str.append(tr("' "));
-
 
278
    sql_str.append(tr(" and  `DescriptionOfClasses`.`ClassIdentifer` = '"));
-
 
279
    sql_str.append(chield_class_id);
-
 
280
    sql_str.append(tr("'"));
-
 
281
    q.prepare(sql_str);
-
 
282
-
 
283
    ok = q.exec();
-
 
284
    if (!ok) {
-
 
285
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
-
 
286
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
-
 
287
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
-
 
288
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
-
 
289
                                                                            return result;
-
 
290
                     }
-
 
291
field_name =  q.record().indexOf(tr("FieldName"));
-
 
292
while(q.next()){
-
 
293
        result = q.value(field_name).toString();
-
 
294
    }
-
 
295
return result;
169
}
296
}
170
297
171
 
298