/[H6]/DatabaseLayer.cpp
ViewVC logotype

Annotation of /DatabaseLayer.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 36 - (hide annotations) (download)
Mon Sep 4 08:53:10 2006 UTC (17 years, 8 months ago) by torben
File size: 11625 byte(s)
Bugfix: comparised status var as an integer where we should use string comparison
1 torben 31 /*
2     * Primary developers: Hedin & Kevin
3     */
4 torben 19
5 torben 8 #include "StdAfx.h"
6     #include ".\databaselayer.h"
7    
8    
9     DatabaseLayer::DatabaseLayer(void)
10     {
11 torben 23 db.OpenEx("ODBC; Description=; DRIVER=SQL Server; SERVER=TK-Teacher; UID=GroupTwo; PWD=toog30", CDatabase::noOdbcDialog);
12 torben 8 db.ExecuteSQL("USE GroupTwo");
13     }
14    
15     DatabaseLayer::~DatabaseLayer(void)
16     {
17 torben 17 db.Close();
18 torben 8 }
19    
20     vector<Person> DatabaseLayer::GetPersonAll(void)
21     {
22     vector<Person> buffer;
23     CString id, inits, name, isadmin, pass;
24    
25     CRecordset rs(&db);
26 torben 17 rs.Open(AFX_DB_USE_DEFAULT_TYPE, "SELECT PersonID, Initialer, Navn, Admin, Pass FROM Person ORDER BY Initialer DESC");
27 torben 8 while(!rs.IsEOF())
28     {
29     rs.GetFieldValue((short)0,id);
30     rs.GetFieldValue(1,inits);
31     rs.GetFieldValue(2,name);
32     rs.GetFieldValue(3,isadmin);
33     rs.GetFieldValue(4,pass);
34    
35     Person p;
36     p.id = id;
37     p.inits = inits;
38     p.name = name;
39     p.isadmin = (isadmin == 1);
40     p.pass = pass;
41    
42     buffer.push_back(p);
43    
44     rs.MoveNext();
45     }
46     rs.Close();
47     return buffer;
48     }
49    
50     Person DatabaseLayer::GetPerson(CString wantInits)
51     {
52    
53     CString id, inits, name, isadmin, pass;
54     CString SQL;
55    
56     Person p;
57     //FIX SQL INJECTION
58     SQL = "SELECT PersonID, Initialer, Navn, Admin, Pass FROM Person WHERE (Initialer = '" + wantInits + "')";
59     CRecordset rs(&db);
60     rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
61    
62     if(!rs.IsEOF() )
63     {
64     rs.GetFieldValue((short)0,id);
65     rs.GetFieldValue(1,inits);
66     rs.GetFieldValue(2,name);
67     rs.GetFieldValue(3,isadmin);
68     rs.GetFieldValue(4,pass);
69    
70     p.id = id;
71     p.inits = inits;
72     p.name = name;
73 torben 9 p.isadmin = (isadmin == "1");
74 torben 8 p.pass = pass;
75     }
76     return p;
77     }
78    
79     bool DatabaseLayer::AddPerson(Person NewPerson)
80     {
81     CString SQL;
82     SQL.Format("INSERT into Person(Initialer, Navn, Admin, Pass) VALUES('%s', '%s', '%d', '%s')",NewPerson.inits, NewPerson.name, NewPerson.isadmin, NewPerson.pass);
83     db.ExecuteSQL(SQL);
84     return true;
85     }
86    
87     bool DatabaseLayer::UpdatePerson(Person ChangePerson)
88     {
89     CString SQL;
90     SQL.Format("UPDATE Person SET Initialer = '%s', Navn = '%s', Pass = '%s', Admin = '%d' WHERE PersonID = '%s'", ChangePerson.inits, ChangePerson.name, ChangePerson.pass, ChangePerson.isadmin, ChangePerson.id);
91     db.ExecuteSQL(SQL);
92     return true;
93     }
94    
95     bool DatabaseLayer::DeletePerson(Person RemovePerson)
96     {
97     CString SQL;
98     SQL.Format("DELETE FROM Person WHERE PersonID = '%s'", RemovePerson.id);
99     db.ExecuteSQL(SQL);
100     return true;
101     }
102 torben 9
103 torben 17 bool DatabaseLayer::ReturnEquipment(CString barcode)
104     {
105     CString SQL;
106     SQL.Format("UPDATE Udstyr SET Status = '3' WHERE Stregkode= '%s'", barcode);
107     db.ExecuteSQL(SQL);
108    
109     SQL.Format("UPDATE Udlån SET Afleveringsdato = Getdate() WHERE Stregkode= '%s' AND Afleveringsdato IS NULL ", barcode);
110     db.ExecuteSQL(SQL);
111 torben 27
112     checkReservations(barcode);
113 torben 17 return true;
114     }
115    
116     bool DatabaseLayer::CheckoutEquipment(Person CheckPersID, Equipment CheckEquip, int Numdays)
117     {
118     CString SQL;
119     SQL.Format("UPDATE Udstyr SET Status = '1' WHERE Stregkode = '%s' ", CheckEquip.barcode);
120     db.ExecuteSQL(SQL);
121     SQL.Format("INSERT INTO Udlån (PersonID, Stregkode, Startdato, Antaldage) VALUES( '%s','%s', GetDate(),'%d')", CheckPersID.id, CheckEquip.barcode, Numdays);
122     db.ExecuteSQL(SQL);
123     return true;
124     }
125    
126 torben 27 bool DatabaseLayer::EquipmentReservation(CString barcode, Person CheckPerson)
127 torben 17 {
128     CString SQL;
129 torben 27 SQL.Format("INSERT INTO Resevation (PersonID, Stregkode, Startdato) VALUES( '%s','%s', GetDate())", CheckPerson.id, barcode);
130 torben 17 db.ExecuteSQL(SQL);
131 torben 27 checkReservations(barcode);
132 torben 17 return true;
133     }
134    
135     bool DatabaseLayer::UpdateEquipment(Equipment CheckEquip)
136     {
137     CString SQL;
138     SQL.Format("UPDATE Udstyr SET Navn = '%s', Beskrivelse = '%s', Placering = '%s', Status = '%s' WHERE Stregkode = '%s'", CheckEquip.name, CheckEquip.description, CheckEquip.placement, CheckEquip.status, CheckEquip.barcode);
139     db.ExecuteSQL(SQL);
140     return true;
141     }
142    
143     bool DatabaseLayer::AddEquipment(Equipment AddEquip)
144     {
145     CString SQL;
146     SQL.Format("INSERT into Udstyr(Stregkode, Navn, Beskrivelse, Placering, Status) VALUES('%s', '%s', '%s', '%s', '%s')",AddEquip.barcode, AddEquip.name, AddEquip.description, AddEquip.placement, "3");
147     db.ExecuteSQL(SQL);
148     return true;
149     }
150    
151     vector<Equipment> DatabaseLayer::GetEquipmentAll(void)
152     {
153     vector<Equipment> buffer;
154     CString barcode, name, description, placement, status;
155    
156     CRecordset rs(&db);
157     rs.Open(AFX_DB_USE_DEFAULT_TYPE, "SELECT Stregkode, Navn, Beskrivelse, Placering, Status FROM Udstyr");
158     while(!rs.IsEOF())
159     {
160     rs.GetFieldValue((short)0,barcode);
161     rs.GetFieldValue(1,name);
162     rs.GetFieldValue(2,description);
163     rs.GetFieldValue(3,placement);
164     rs.GetFieldValue(4,status);
165    
166     Equipment p;
167     p.barcode = barcode;
168     p.name = name;
169     p.description = description;
170     p.placement = placement;
171     p.status = status;
172     buffer.push_back(p);
173    
174     rs.MoveNext();
175     }
176     rs.Close();
177     return buffer;
178     }
179    
180     Equipment DatabaseLayer::GetEquipment(CString wantBarcode)
181     {
182    
183     CString barcode,name,description,placement,status;
184    
185     CString SQL;
186    
187     Equipment e;
188    
189     SQL.Format("SELECT Stregkode,Navn,Udstyr.Beskrivelse,Placering,Status.Beskrivelse FROM Udstyr INNER JOIN Status ON Udstyr.Status = Status.StatusID Where (Stregkode = '%s')", wantBarcode);
190     CRecordset rs(&db);
191     rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
192     if (!rs.IsEOF() )
193     {
194     rs.GetFieldValue((short)0,barcode);
195     rs.GetFieldValue(1,name);
196     rs.GetFieldValue(2,description);
197     rs.GetFieldValue(3,placement);
198     rs.GetFieldValue(4,status);
199    
200     e.barcode = barcode;
201     e.name = name;
202     e.description = description;
203     e.placement = placement;
204     e.status = status;
205     }
206     rs.Close();
207     return e;
208     }
209    
210     bool DatabaseLayer::DeleteEquipment(Equipment DelEquip)
211     {
212     CString SQL;
213     SQL.Format("DELETE FROM Udstyr WHERE Stregkode = '%s'", DelEquip.barcode);
214     db.ExecuteSQL(SQL);
215     return true;
216     }
217    
218    
219     // Developed by Torben H. Nielsen
220     vector<Equipment> DatabaseLayer::Search(CString barcode, CString name, CString inits, bool available, bool reserved, bool deposited)
221     {
222     vector<Equipment> buffer;
223    
224 torben 26 //here are the wanted equipments found through 3 seperate queries - I could also
225     //find them all in one query where I joined the 3 selects via a UNION
226 torben 17 CString SQL;
227     if (available == true) {
228     SQL = "SELECT DISTINCT Udstyr.stregkode,Udstyr.Navn,Udstyr.Beskrivelse,Udstyr.Placering,Status.Beskrivelse \
229     FROM Udstyr \
230     INNER JOIN Status ON Udstyr.status = Status.StatusID WHERE Udstyr.Status = 3 ";
231     if (barcode != "")
232     SQL += " AND Udstyr.stregkode = '" + barcode + "' ";
233     if (name != "")
234     SQL += " AND Udstyr.Navn LIKE '%" + name + "%' ";
235    
236     CRecordset rs(&db);
237     rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
238     FillEquipmentVector(buffer,rs);
239     rs.Close();
240     }
241    
242     if (reserved == true) {
243     SQL = "SELECT DISTINCT Udstyr.stregkode,Udstyr.Navn,Udstyr.Beskrivelse,Udstyr.Placering,Status.Beskrivelse \r\n\
244     FROM Udstyr \r\n\
245     INNER JOIN Status ON Udstyr.status = Status.StatusID \r\n\
246     INNER JOIN Resevation ON Udstyr.Stregkode = Resevation.stregkode \r\n\
247     INNER JOIN Person ON Resevation.PersonID = Person.PersonID\r\n\
248 torben 26 WHERE ( Udstyr.Status = 2 OR Person.Initialer = '" + inits + "') ";
249 torben 17 if (barcode != "")
250     SQL += " AND Udstyr.stregkode = '" + barcode + "' ";
251     if (name != "")
252     SQL += " AND Udstyr.Navn LIKE '%" + name + "%' ";
253 torben 26 //if (inits != "")
254     // SQL += " AND Person.Initialer = '" + inits + "' ";
255 torben 17
256     CRecordset rs(&db);
257     rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
258     FillEquipmentVector(buffer,rs);
259     rs.Close();
260     }
261    
262    
263     if (deposited == true) {
264     SQL = "SELECT DISTINCT Udstyr.stregkode,Udstyr.Navn,Udstyr.Beskrivelse,Udstyr.Placering,Status.Beskrivelse \r\n\
265     FROM Udstyr \r\n\
266     INNER JOIN Status ON Udstyr.status = Status.StatusID \r\n\
267     INNER JOIN Udlån ON Udstyr.Stregkode = Udlån.stregkode \r\n\
268     INNER JOIN Person ON Udlån.PersonID = person.PersonID\r\n\
269     WHERE Udstyr.Status = 1 \r\n\
270     AND Udlån.Afleveringsdato IS NULL";
271     if (barcode != "")
272     SQL += " AND Udstyr.stregkode = '" + barcode + "' ";
273     if (name != "")
274     SQL += " AND Udstyr.Navn LIKE '%" + name + "%' ";
275     if (inits != "")
276     SQL += " AND Person.Initialer = '" + inits + "' ";
277    
278     CRecordset rs(&db);
279     rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
280     FillEquipmentVector(buffer,rs);
281     rs.Close();
282     }
283    
284 torben 26 // now I have the equipment rows the user asked for, now I need some more checkout and
285     // reservation data for each piece of equipment
286    
287 torben 17 for (int i=0; i<buffer.size(); i++) {
288     //fill Equipment::checkouts
289    
290 torben 19 SQL = "SELECT TOP 10 Udlån.StartDato, Udlån.Afleveringsdato,Udlån.Antaldage, Person.Initialer\
291 torben 17 FROM Udlån\
292     INNER JOIN Person ON Udlån.PersonID = Person.PersonID ";
293 torben 19 SQL += "WHERE Udlån.Stregkode = " + buffer[i].barcode + " ORDER BY STARTDATO DESC";
294 torben 17 CRecordset rs(&db);
295     rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
296     if (rs.GetRecordCount()>0) {
297     rs.MoveFirst();
298     while ( !rs.IsEOF() ) {
299     Checkout check;
300     rs.GetFieldValue((short)0, check.startdate);
301     rs.GetFieldValue(1, check.enddate);
302     rs.GetFieldValue(2, check.numdays);
303     rs.GetFieldValue(3, check.inits);
304    
305     buffer[i].checkouts.push_back(check);
306     rs.MoveNext();
307     }
308     }
309     rs.Close();
310    
311     // fill Equipment::reservations
312 torben 27 SQL = "SELECT Resevation.ResevationID, Resevation.StartDato, Person.Initialer\
313 torben 17 FROM Resevation\
314     INNER JOIN Person ON Resevation.PersonID = Person.PersonID ";
315     SQL += "WHERE Resevation.Stregkode = " + buffer[i].barcode + " ORDER BY STARTDATO ASC";
316    
317     rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
318     if (rs.GetRecordCount()>0) {
319     rs.MoveFirst();
320     while ( !rs.IsEOF() ) {
321     Reservation res;
322 torben 25 rs.GetFieldValue((short)0, res.reservationID);
323     rs.GetFieldValue(1, res.startdate);
324 torben 27 rs.GetFieldValue(2, res.inits);
325 torben 17
326     buffer[i].reservations.push_back(res);
327     rs.MoveNext();
328     }
329     }
330     rs.Close();
331     }
332    
333     return buffer;
334     }
335    
336     // Developed by Torben H. Nielsen
337     void DatabaseLayer::FillEquipmentVector(vector<Equipment> &buffer, CRecordset &rs)
338     {
339     CString barcode,name,description,placement,status;
340     if (rs.GetRecordCount()>0) {
341     rs.MoveFirst();
342     while (!rs.IsEOF() ) {
343     Equipment eq;
344     rs.GetFieldValue((short)0, eq.barcode);
345     rs.GetFieldValue(1, eq.name);
346     rs.GetFieldValue(2, eq.description);
347     rs.GetFieldValue(3, eq.placement);
348     rs.GetFieldValue(4, eq.status);
349    
350     buffer.push_back(eq);
351    
352     rs.MoveNext();
353     }
354     }
355     }
356 torben 31 //Developed by Torben H. Nielsen
357 torben 27 void DatabaseLayer::checkReservations(CString barcode)
358     {
359     CString scount,status;
360     CString SQL = "SELECT count(*) FROM Resevation WHERE Resevation.Stregkode = '" + barcode + "'";
361     CRecordset rs(&db);
362     rs.Open(AFX_DB_USE_DEFAULT_TYPE,SQL);
363     rs.MoveFirst();
364     rs.GetFieldValue((short)0,scount);
365     int reservationCount = atoi(scount);
366     rs.Close();
367    
368     SQL = "SELECT status FROM Udstyr WHERE Udstyr.Stregkode = '" + barcode + "'";
369     rs.Open(AFX_DB_USE_DEFAULT_TYPE,SQL);
370     if (rs.GetRecordCount() >0) {
371     rs.MoveFirst();
372     rs.GetFieldValue((short)0,status);
373     }
374     rs.Close();
375    
376 torben 36 if (reservationCount > 0 && status == "3") {//equipment is available and has at lease one reservation
377 torben 27 SQL = "UPDATE Udstyr SET Status = 2 WHERE Stregkode = '" + barcode + "'";
378     db.ExecuteSQL(SQL);
379     }
380     }
381    
382 torben 31 //Developed by Torben H. Nielsen
383 torben 27 bool DatabaseLayer::DeleteReservation(CString barcode, CString resid)
384     {
385     CString SQL = "DELETE FROM Resevation WHERE resevationid = " + resid;
386     db.ExecuteSQL(SQL);
387     checkReservations(barcode);
388     return true;
389     }
390    

  ViewVC Help
Powered by ViewVC 1.1.20