]> Shamusworld >> Repos - schematic/blob - src/scmwidget.cpp
07b9cd18f2c41ce13b25b2d16644e2091e2bb115
[schematic] / src / scmwidget.cpp
1 //
2 // scmwidget.cpp - Main widget container
3 //
4 // by James Hammons
5 // (C) 2012 Underground Software
6 //
7 // JLH = James Hammons <jlhamm@acm.org>
8 //
9 // Who  When        What
10 // ---  ----------  -------------------------------------------------------------
11 // JLH  09/24/2012  Created this file
12 //
13
14 #include "scmwidget.h"
15 #include <QtSql>
16 #include "addresswidget.h"
17 #include "contactwidget.h"
18
19
20 SCMWidget::SCMWidget(QWidget * parent/*= 0*/): QWidget(parent),
21         purchaseOrders(new QTreeView),
22         vendorName(new QLabel),
23         ndaSigned(new QLabel),
24         vendorAddress(new QTabWidget),
25         vendorContact(new QTabWidget),
26         vendorClass(new QListWidget),
27         username(new QLabel),
28         vendorLevel(new VendorLevelWidget),
29         alerts(new QListWidget),
30         notes(new QListWidget),
31         vaw1(new AddressWidget(this)),
32         vcw1(new ContactWidget(this)),
33
34         nextVendorButton(new QToolButton),
35         previousVendorButton(new QToolButton),
36         editVendor(new QPushButton("Edit Vendor")),
37         addVendor(new QPushButton("Add Vendor")),
38         addLocation(new QPushButton("Add Location")),
39         addContact(new QPushButton("Add Contact")),
40         createAlert(new QPushButton("Create")),
41         createNote(new QPushButton("Create")),
42         showOpen(new QPushButton("Open")),
43         showClosed(new QPushButton("Closed")),
44         showAll(new QPushButton("All")),
45         createPO(new QPushButton("Create")),
46         vendorRelated(new QCheckBox("Related to this Vendor")),
47         vidCursor(0)
48 {
49         // Create main page widgets & layout
50
51         purchaseOrders->setRootIsDecorated(false);
52         purchaseOrders->setAlternatingRowColors(true);
53
54         QAbstractItemModel * model = new QStandardItemModel(0, 7);
55         model->setHeaderData(0, Qt::Horizontal, tr("PO #"));
56         model->setHeaderData(1, Qt::Horizontal, tr("Vendor"));
57         model->setHeaderData(2, Qt::Horizontal, tr("Desc."));
58         model->setHeaderData(3, Qt::Horizontal, tr("OAD"));
59         model->setHeaderData(4, Qt::Horizontal, tr("UAD"));
60         model->setHeaderData(5, Qt::Horizontal, tr("Docs"));
61         model->setHeaderData(6, Qt::Horizontal, tr("FAI"));
62
63         model->insertRow(0);
64         model->setData(model->index(0, 0), "FE823724");
65         model->setData(model->index(0, 1), "Sanford & Sons");
66         model->setData(model->index(0, 2), "Misc. Junk");
67         model->setData(model->index(0, 3), "09/30/2012");
68         model->setData(model->index(0, 4), "");
69         model->setData(model->index(0, 5), "");
70         model->setData(model->index(0, 6), "");
71
72         model->insertRow(0);
73         model->setData(model->index(0, 0), "89237923-123");
74         model->setData(model->index(0, 1), "Digikey");
75         model->setData(model->index(0, 2), "Small capacitors");
76         model->setData(model->index(0, 3), "10/08/2012");
77         model->setData(model->index(0, 4), "11/30/2012");
78         model->setData(model->index(0, 5), "1");
79         model->setData(model->index(0, 6), "Yes");
80
81         model->insertRow(0);
82         model->setData(model->index(0, 0), "T9234CS32");
83         model->setData(model->index(0, 1), "Big, Faceless Company");
84         model->setData(model->index(0, 2), "Important Stuff you need RIGHT NOW");
85         model->setData(model->index(0, 3), "09/28/2012");
86         model->setData(model->index(0, 4), "09/29/2012");
87         model->setData(model->index(0, 5), "5");
88         model->setData(model->index(0, 6), "Yes");
89
90         purchaseOrders->setModel(model);
91
92         nextVendorButton->setArrowType(Qt::RightArrow);
93         nextVendorButton->setToolTip(tr("Move to next Vendor in Database."));
94         previousVendorButton->setArrowType(Qt::LeftArrow);
95         previousVendorButton->setToolTip(tr("Move to previous Vendor in Database."));
96
97         QFont * vendorFont = new QFont;
98         vendorFont->setPointSize(12);
99         vendorName->setFont(*vendorFont);
100         vendorName->setText("Vendor Name");
101
102         QHBoxLayout * hbox1 = new QHBoxLayout;
103         hbox1->addWidget(previousVendorButton);
104         hbox1->addWidget(nextVendorButton);
105         hbox1->addWidget(vendorName);
106
107         // Vendor address widgets
108
109 //      vaw1->SetFields("123 Any Street", "Any City", "Anywhere", "USA", "01234");
110         vendorAddress->addTab(vaw1, tr("Primary"));
111         vendorAddress->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
112
113         // Vendor contact widgets
114
115 //      vcw1->SetFields("Sales", "Joe Blow", "joe.blow@widget.com", "Singapore", "512-222-2222", "", "512-122-2123");
116         vendorContact->addTab(vcw1, tr("Contact #1"));
117         vendorContact->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
118
119         // Vendor class list
120
121         QVBoxLayout * vbox1 = new QVBoxLayout;
122         vbox1->addWidget(vendorClass);
123         QGroupBox * gb1 = new QGroupBox(tr("Vendor Classes"));
124         gb1->setLayout(vbox1);
125
126         // Vendor action push buttons
127
128         QVBoxLayout * vbox4 = new QVBoxLayout;
129         QHBoxLayout * hbox3 = new QHBoxLayout;
130         QGroupBox * gb2 = new QGroupBox(tr("Vendor Actions"));
131
132         vbox4->addWidget(editVendor);
133         vbox4->addWidget(addVendor);
134         vbox4->addWidget(addLocation);
135         vbox4->addWidget(addContact);
136         gb2->setLayout(vbox4);
137
138         hbox3->addWidget(vendorLevel);
139         hbox3->addWidget(gb2);
140
141         // Alerts & notes
142
143         QVBoxLayout * vbox5 = new QVBoxLayout;
144         QHBoxLayout * hbox4 = new QHBoxLayout;
145         QHBoxLayout * hbox5 = new QHBoxLayout;
146
147         QLabel * label1 = new QLabel(tr("Alerts"));
148         QLabel * label2 = new QLabel(tr("Notes"));
149         hbox4->addWidget(label1);
150         hbox4->addStretch();
151         hbox4->addWidget(createAlert);
152         hbox5->addWidget(label2);
153         hbox5->addStretch();
154         hbox5->addWidget(createNote);
155
156         vbox5->addLayout(hbox4);
157         vbox5->addWidget(alerts);
158         vbox5->addLayout(hbox5);
159         vbox5->addWidget(notes);
160
161         // Purchase Order headers
162
163         QHBoxLayout * hbox6 = new QHBoxLayout;
164         QLabel * label3 = new QLabel(tr("Purchase Orders"));
165         hbox6->addWidget(label3);
166         hbox6->addSpacing(32);
167         hbox6->addWidget(showOpen);
168         hbox6->addWidget(showClosed);
169         hbox6->addWidget(showAll);
170         hbox6->addSpacing(16);
171         hbox6->addWidget(vendorRelated);
172         hbox6->addStretch();
173         hbox6->addWidget(createPO);
174
175         // Horizontal line
176
177         QFrame * hline = new QFrame(this);
178         hline->setFrameShape(QFrame::HLine);
179         hline->setFrameShadow(QFrame::Sunken);
180
181         QFrame * hline2 = new QFrame(this);
182         hline2->setFrameShape(QFrame::HLine);
183         hline2->setFrameShadow(QFrame::Sunken);
184
185         QHBoxLayout * hbox2 = new QHBoxLayout;
186         QVBoxLayout * vbox2 = new QVBoxLayout;
187         QVBoxLayout * vbox3 = new QVBoxLayout;
188
189         vbox3->addWidget(vendorContact);
190 //      vbox3->addWidget(vendorLevel);
191         vbox3->addLayout(hbox3);
192
193         vbox2->addWidget(vendorAddress);
194         vbox2->addWidget(gb1);
195
196         hbox2->addLayout(vbox2);
197         hbox2->addLayout(vbox3);
198         hbox2->addLayout(vbox5);
199
200         QVBoxLayout * mainLayout = new QVBoxLayout;
201         mainLayout->addWidget(username);
202         mainLayout->addWidget(hline);
203         mainLayout->addLayout(hbox1);
204         mainLayout->addLayout(hbox2);
205         mainLayout->addWidget(hline2);
206         mainLayout->addLayout(hbox6);
207         mainLayout->addWidget(purchaseOrders);
208         setLayout(mainLayout);
209
210         // Set up actions
211
212         connect(nextVendorButton, SIGNAL(clicked()), this, SLOT(GetNextVendor()));
213         connect(previousVendorButton, SIGNAL(clicked()), this, SLOT(GetPreviousVendor()));
214
215         GetVendorIDs();
216         GetVendor(vendorID[vidCursor]);
217 }
218
219
220 void SCMWidget::GetNextVendor(void)
221 {
222         if (vidCursor < (vendorID.size() - 1))
223         {
224                 vidCursor++;
225                 GetVendor(vendorID[vidCursor]);
226         }
227 }
228
229
230 void SCMWidget::GetPreviousVendor(void)
231 {
232         if (vidCursor > 0)
233         {
234                 vidCursor--;
235                 GetVendor(vendorID[vidCursor]);
236         }
237 }
238
239
240 void SCMWidget::GetVendorIDs(void)
241 {
242         vendorID.clear();
243
244         QSqlQuery query;
245         query.prepare("SELECT vid FROM Vendor ORDER BY name");
246         query.exec();
247
248         while (query.next())
249         {
250                 int vid = query.value(0).toInt();
251                 vendorID.push_back(vid);
252         }
253 }
254
255
256 void SCMWidget::GetVendor(int key)
257 {
258         // Get main vendor data
259         QSqlQuery query;
260         query.prepare("SELECT v.name, signedNDA, l.address, city, state, country, code, "
261                 "c.name, email, c.address, phone1, phone2, fax, description, v.vlid FROM "
262                 "Vendor AS v LEFT OUTER JOIN Location AS l ON v.vid = l.vid "
263                 "LEFT OUTER JOIN (Contact AS c JOIN ContactType AS ct ON c.ctid = ct.ctid) "
264                 "ON v.vid = c.vid WHERE v.vid = ?");
265         query.addBindValue(key);
266         query.exec();
267
268         // There's a possibility that the query will return multiple rows (which we need
269         // to handle, with multiple tabs), but for now, we ignore any and grab the first.
270         if (query.next())
271         {
272                 vendorName->setText(query.value(0).toString());
273
274                 vaw1->SetFields(query.value(2).toString(),
275                         query.value(3).toString(), query.value(4).toString(),
276                         query.value(5).toString(), query.value(6).toString());
277                 vcw1->SetFields(query.value(13).toString(),
278                         query.value(7).toString(), query.value(8).toString(),
279                         query.value(9).toString(), query.value(10).toString(),
280                         query.value(11).toString(), query.value(12).toString());
281
282                 int vlid = query.value(14).toInt();
283                 vendorLevel->DoQuery(vlid);
284         }
285
286         // Get vendor classes
287         query.prepare("SELECT description FROM VendorSpecificTypes AS vst, VendorType AS vt "
288                 "WHERE vst.vid = ? AND vst.vtid = vt.vtid ORDER BY seqNo");
289         query.addBindValue(key);
290         query.exec();
291
292         vendorClass->clear();
293
294         while (query.next())
295         {
296                 QListWidgetItem * item = new QListWidgetItem(query.value(0).toString());
297                 vendorClass->addItem(item);
298         }
299 }
300