/[H6]/DatabaseLayer.cpp
ViewVC logotype

Diff of /DatabaseLayer.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 8 by torben, Wed Aug 30 12:39:09 2006 UTC revision 36 by torben, Mon Sep 4 08:53:10 2006 UTC
# Line 1  Line 1 
1    /*
2     * Primary developers: Hedin & Kevin
3     */
4    
5  #include "StdAfx.h"  #include "StdAfx.h"
6  #include ".\databaselayer.h"  #include ".\databaselayer.h"
7    
8    
9  DatabaseLayer::DatabaseLayer(void)  DatabaseLayer::DatabaseLayer(void)
10  {  {
11          db.OpenEx("ODBC; Description=; DRIVER=SQL Server; SERVER=TK-Teacher; UID=GroupTwo; PWD=toog30");          db.OpenEx("ODBC; Description=; DRIVER=SQL Server; SERVER=TK-Teacher; UID=GroupTwo; PWD=toog30", CDatabase::noOdbcDialog);
12          db.ExecuteSQL("USE GroupTwo");          db.ExecuteSQL("USE GroupTwo");
13  }  }
14    
15  DatabaseLayer::~DatabaseLayer(void)  DatabaseLayer::~DatabaseLayer(void)
16  {  {
17            db.Close();
18  }  }
19    
20  vector<Person> DatabaseLayer::GetPersonAll(void)  vector<Person> DatabaseLayer::GetPersonAll(void)
# Line 18  vector<Person> DatabaseLayer::GetPersonA Line 23  vector<Person> DatabaseLayer::GetPersonA
23          CString id, inits, name, isadmin, pass;          CString id, inits, name, isadmin, pass;
24    
25                  CRecordset rs(&db);                  CRecordset rs(&db);
26                  rs.Open(AFX_DB_USE_DEFAULT_TYPE, "SELECT PersonID, Initialer, Navn, Admin, Pass FROM Person");                  rs.Open(AFX_DB_USE_DEFAULT_TYPE, "SELECT PersonID, Initialer, Navn, Admin, Pass FROM Person ORDER BY Initialer DESC");
27                  while(!rs.IsEOF())                  while(!rs.IsEOF())
28                  {                  {
29                          rs.GetFieldValue((short)0,id);                          rs.GetFieldValue((short)0,id);
# Line 65  Person DatabaseLayer::GetPerson(CString Line 70  Person DatabaseLayer::GetPerson(CString
70                          p.id            = id;                          p.id            = id;
71                          p.inits         = inits;                          p.inits         = inits;
72                          p.name          = name;                          p.name          = name;
73                          p.isadmin       = (isadmin == 1);                          p.isadmin       = (isadmin == "1");
74                          p.pass          = pass;                          p.pass          = pass;
75          }          }
76          return p;          return p;
# Line 94  bool DatabaseLayer::DeletePerson(Person Line 99  bool DatabaseLayer::DeletePerson(Person
99          db.ExecuteSQL(SQL);          db.ExecuteSQL(SQL);
100          return true;          return true;
101  }  }
102    
103    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    
112            checkReservations(barcode);
113            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    bool DatabaseLayer::EquipmentReservation(CString barcode, Person CheckPerson)
127    {
128            CString SQL;
129            SQL.Format("INSERT INTO Resevation (PersonID, Stregkode, Startdato) VALUES( '%s','%s', GetDate())", CheckPerson.id, barcode);
130            db.ExecuteSQL(SQL);
131            checkReservations(barcode);
132            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            //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            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                                       WHERE ( Udstyr.Status = 2 OR Person.Initialer = '" + inits + "') ";
249                    if (barcode != "")
250                            SQL += " AND Udstyr.stregkode = '" + barcode + "' ";
251                    if (name != "")
252                            SQL += " AND Udstyr.Navn LIKE '%" + name + "%' ";
253                    //if (inits != "")
254                    //      SQL += " AND Person.Initialer = '" + inits + "' ";
255                    
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            // 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            for (int i=0; i<buffer.size(); i++) {
288                    //fill Equipment::checkouts
289                    
290                    SQL = "SELECT TOP 10 Udlån.StartDato, Udlån.Afleveringsdato,Udlån.Antaldage, Person.Initialer\
291                                    FROM Udlån\
292                                    INNER JOIN Person ON Udlån.PersonID = Person.PersonID ";
293                    SQL += "WHERE Udlån.Stregkode = " + buffer[i].barcode + " ORDER BY STARTDATO DESC";
294                    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                    SQL = "SELECT Resevation.ResevationID, Resevation.StartDato,  Person.Initialer\
313                                    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                                    rs.GetFieldValue((short)0, res.reservationID);
323                                    rs.GetFieldValue(1, res.startdate);
324                                    rs.GetFieldValue(2, res.inits);
325    
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    //Developed by Torben H. Nielsen
357    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            if (reservationCount > 0 && status == "3") {//equipment is available and has at lease one reservation
377                    SQL = "UPDATE Udstyr SET Status = 2 WHERE Stregkode = '" + barcode + "'";
378                    db.ExecuteSQL(SQL);
379            }
380    }
381    
382    //Developed by Torben H. Nielsen
383    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    

Legend:
Removed from v.8  
changed lines
  Added in v.36

  ViewVC Help
Powered by ViewVC 1.1.20