/[H6]/DatabaseLayer.cpp
ViewVC logotype

Diff of /DatabaseLayer.cpp

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

revision 16 by torben, Wed Aug 30 21:57:57 2006 UTC revision 17 by torben, Thu Aug 31 16:32:37 2006 UTC
# Line 1  Line 1 
1  #include "StdAfx.h"  #include "StdAfx.h"
2  #include ".\databaselayer.h"  #include ".\databaselayer.h"
3    
 DatabaseLayer::DatabaseLayer(void)  
 {  
         Person p1;  
         p1.id="0";  
         p1.inits="MaPe";  
         p1.isadmin = 0;  
         p1.name="Mads Pedersen";  
         persons.push_back(p1);  
   
         Person p2;  
         p2.id="1";  
         p2.inits = "thn";  
         p2.isadmin = 1;  
         p2.name = "Torben Nielsen";  
         p2.pass = "thn";  
         persons.push_back(p2);  
   
         Person p3;  
         p3.id = "2";  
         p3.inits = "FiKa";  
         p3.isadmin = 0;  
         p3.name = "Finn Karlsen";  
         persons.push_back(p3);  
   
         Equipment e1;  
         e1.barcode = "1234567890123";  
         e1.name = "1 ks. øl";  
         e1.description = "30 Stk. Hancock Høker";  
         e1.placement = "i kælderen";  
         e1.status = "Drukket";  
         equipments.push_back(e1);  
   
 }  
   
 vector<Person> DatabaseLayer::GetPersonAll(void)  
 {  
         return persons;  
 }  
   
 Person DatabaseLayer::GetPerson(CString wantInits)  
 {  
         for (int i=0; i<persons.size(); i++) {  
                 if (persons[i].inits == wantInits)  
                         return persons[i];  
         }  
         Person p;  
         return p;  
 }  
4    
 Equipment DatabaseLayer::GetEquipment(CString wantBarcode)  
 {  
         for (int i=0; i<equipments.size(); i++) {  
                 if (equipments[i].barcode == wantBarcode) {  
                         return equipments[i];  
                 }  
         }  
 }  
   
 bool DatabaseLayer::UpdatePerson(Person ChangePerson)  
 {  
         for (int i=0; i<persons.size(); i++) {  
                 if (persons[i].inits == ChangePerson.inits) {  
                         persons[i] = ChangePerson;  
                         break;  
                 }  
         }  
   
         return true;  
 }  
   
   
 bool DatabaseLayer::UpdateEquipment(Equipment ChangeEquipment)  
 {  
         for (int i=0; i<equipments.size(); i++) {  
                 if (equipments[i].barcode == ChangeEquipment.barcode) {  
                         equipments[i] = ChangeEquipment;  
                         break;  
                 }  
         }  
   
         return true;  
   
 }  
   
 bool DatabaseLayer::AddPerson(Person NewPerson)  
 {  
         persons.push_back(NewPerson);  
         return true;  
 }  
   
   
 vector<Equipment> DatabaseLayer::GetEquipmentAll()  
 {  
         return equipments;  
 }  
   
 bool DatabaseLayer::AddEquipment(Equipment e)  
 {  
         equipments.push_back(e);  
         return true;  
 }  
   
 bool DatabaseLayer::DeletePerson(Person RemovePerson)  
 {  
         //vector kan ikke slette fra midten, så de der ikke slettes kopieres til ny vector  
         //og  gl.vector overskrivets  
   
         vector<Person> newvector;  
         for (int i = 0; i != persons.size(); i++) {  
                 if ( persons[i].inits != RemovePerson.inits) {  
                         newvector.push_back( persons[i] );  
                 }  
         }  
         persons = newvector;  
         return true;  
 }  
   
 /*  
5  DatabaseLayer::DatabaseLayer(void)  DatabaseLayer::DatabaseLayer(void)
6  {  {
7          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");
# Line 127  DatabaseLayer::DatabaseLayer(void) Line 10  DatabaseLayer::DatabaseLayer(void)
10    
11  DatabaseLayer::~DatabaseLayer(void)  DatabaseLayer::~DatabaseLayer(void)
12  {  {
13            db.Close();
14  }  }
15    
16  vector<Person> DatabaseLayer::GetPersonAll(void)  vector<Person> DatabaseLayer::GetPersonAll(void)
# Line 135  vector<Person> DatabaseLayer::GetPersonA Line 19  vector<Person> DatabaseLayer::GetPersonA
19          CString id, inits, name, isadmin, pass;          CString id, inits, name, isadmin, pass;
20    
21                  CRecordset rs(&db);                  CRecordset rs(&db);
22                  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");
23                  while(!rs.IsEOF())                  while(!rs.IsEOF())
24                  {                  {
25                          rs.GetFieldValue((short)0,id);                          rs.GetFieldValue((short)0,id);
# Line 212  bool DatabaseLayer::DeletePerson(Person Line 96  bool DatabaseLayer::DeletePerson(Person
96          return true;          return true;
97  }  }
98    
 */  
99    bool DatabaseLayer::ReturnEquipment(CString barcode)
100    {
101            CString SQL;
102            SQL.Format("UPDATE Udstyr SET Status = '3' WHERE Stregkode= '%s'", barcode);
103            db.ExecuteSQL(SQL);
104            
105            SQL.Format("UPDATE Udlån SET Afleveringsdato = Getdate() WHERE Stregkode= '%s' AND Afleveringsdato IS NULL ", barcode);
106            db.ExecuteSQL(SQL);
107            return true;
108    }
109    
110    bool DatabaseLayer::CheckoutEquipment(Person CheckPersID, Equipment CheckEquip, int Numdays)
111    {
112            CString SQL;
113            SQL.Format("UPDATE Udstyr SET Status = '1' WHERE Stregkode = '%s' ", CheckEquip.barcode);
114            db.ExecuteSQL(SQL);
115            SQL.Format("INSERT INTO Udlån (PersonID, Stregkode, Startdato, Antaldage) VALUES( '%s','%s', GetDate(),'%d')", CheckPersID.id, CheckEquip.barcode, Numdays);
116            db.ExecuteSQL(SQL);
117            return true;
118    }
119    
120    bool DatabaseLayer::EquipmentReservation(Person CheckPersID, Equipment CheckEquip, int Numdays)
121    {
122            CString SQL;
123            SQL.Format("UPDATE Udstyr SET Status = '2' WHERE Stregkode = '%s' ", CheckEquip.barcode);
124            db.ExecuteSQL(SQL);
125            SQL.Format("INSERT INTO Resevation (PersonID, Stregkode, Startdato, Antaldage) VALUES( '%s','%s', GetDate(),'%d')", CheckPersID.id, CheckEquip.barcode, Numdays);
126            db.ExecuteSQL(SQL);
127            return true;
128    }
129    
130    bool DatabaseLayer::UpdateEquipment(Equipment CheckEquip)
131    {
132            CString SQL;
133            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);
134            db.ExecuteSQL(SQL);
135            return true;
136    }
137    
138    bool DatabaseLayer::AddEquipment(Equipment AddEquip)
139    {
140            CString SQL;
141            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");
142            db.ExecuteSQL(SQL);
143            return true;
144    }
145    
146    vector<Equipment> DatabaseLayer::GetEquipmentAll(void)
147    {
148            vector<Equipment> buffer;
149            CString barcode, name, description, placement, status;
150    
151            CRecordset rs(&db);
152            rs.Open(AFX_DB_USE_DEFAULT_TYPE, "SELECT Stregkode, Navn, Beskrivelse, Placering, Status FROM Udstyr");
153            while(!rs.IsEOF())
154            {
155                    rs.GetFieldValue((short)0,barcode);
156                    rs.GetFieldValue(1,name);
157                    rs.GetFieldValue(2,description);
158                    rs.GetFieldValue(3,placement);
159                    rs.GetFieldValue(4,status);
160                    
161                    Equipment p;
162                    p.barcode               = barcode;
163                    p.name                  = name;
164                    p.description   = description;
165                    p.placement             = placement;
166                    p.status                = status;
167                    buffer.push_back(p);
168    
169                    rs.MoveNext();
170            }
171            rs.Close();
172            return buffer;
173    }
174    
175    Equipment DatabaseLayer::GetEquipment(CString wantBarcode)
176    {
177    
178            CString barcode,name,description,placement,status;
179    
180            CString SQL;
181    
182            Equipment e;
183    
184            SQL.Format("SELECT Stregkode,Navn,Udstyr.Beskrivelse,Placering,Status.Beskrivelse FROM Udstyr INNER JOIN Status ON Udstyr.Status = Status.StatusID Where (Stregkode = '%s')", wantBarcode);
185            CRecordset rs(&db);
186            rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
187            if (!rs.IsEOF() )
188            {
189                    rs.GetFieldValue((short)0,barcode);
190                    rs.GetFieldValue(1,name);
191                    rs.GetFieldValue(2,description);
192                    rs.GetFieldValue(3,placement);
193                    rs.GetFieldValue(4,status);
194    
195                    e.barcode = barcode;
196                    e.name = name;
197                    e.description = description;
198                    e.placement = placement;
199                    e.status = status;
200            }
201            rs.Close();
202            return e;
203    }
204    
205    bool DatabaseLayer::DeleteEquipment(Equipment DelEquip)
206    {
207            CString SQL;
208            SQL.Format("DELETE FROM Udstyr WHERE Stregkode = '%s'", DelEquip.barcode);
209            db.ExecuteSQL(SQL);
210            return true;
211    }
212    
213    
214    // Developed by Torben H. Nielsen
215    vector<Equipment> DatabaseLayer::Search(CString barcode, CString name, CString inits, bool available, bool reserved, bool deposited)
216    {
217            vector<Equipment> buffer;
218    
219            CString SQL;
220            if (available == true) {
221                    SQL = "SELECT DISTINCT Udstyr.stregkode,Udstyr.Navn,Udstyr.Beskrivelse,Udstyr.Placering,Status.Beskrivelse \
222                                       FROM Udstyr \
223                                       INNER JOIN Status ON Udstyr.status = Status.StatusID WHERE Udstyr.Status = 3 ";
224                    if (barcode != "")
225                            SQL += " AND Udstyr.stregkode = '" + barcode + "' ";
226                    if (name != "")
227                            SQL += " AND Udstyr.Navn LIKE '%" + name + "%' ";
228                    
229                    CRecordset rs(&db);
230                    rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
231                    FillEquipmentVector(buffer,rs);
232                    rs.Close();
233            }
234            
235            if (reserved == true) {
236                    SQL = "SELECT DISTINCT Udstyr.stregkode,Udstyr.Navn,Udstyr.Beskrivelse,Udstyr.Placering,Status.Beskrivelse \r\n\
237                                       FROM Udstyr \r\n\
238                                       INNER JOIN Status ON Udstyr.status = Status.StatusID \r\n\
239                                       INNER JOIN Resevation ON Udstyr.Stregkode = Resevation.stregkode \r\n\
240                                       INNER JOIN Person ON Resevation.PersonID = Person.PersonID\r\n\
241                                       WHERE Udstyr.Status = 2 ";
242                    if (barcode != "")
243                            SQL += " AND Udstyr.stregkode = '" + barcode + "' ";
244                    if (name != "")
245                            SQL += " AND Udstyr.Navn LIKE '%" + name + "%' ";
246                    if (inits != "")
247                            SQL += " AND Person.Initialer = '" + inits + "' ";
248                    
249                    CRecordset rs(&db);
250                    rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
251                    FillEquipmentVector(buffer,rs);
252                    rs.Close();
253            }
254    
255    
256            if (deposited == true) {
257                    SQL = "SELECT DISTINCT Udstyr.stregkode,Udstyr.Navn,Udstyr.Beskrivelse,Udstyr.Placering,Status.Beskrivelse \r\n\
258                                       FROM Udstyr \r\n\
259                                       INNER JOIN Status ON Udstyr.status = Status.StatusID \r\n\
260                                       INNER JOIN Udlån ON Udstyr.Stregkode = Udlån.stregkode \r\n\
261                                       INNER JOIN Person ON Udlån.PersonID = person.PersonID\r\n\
262                                       WHERE Udstyr.Status = 1 \r\n\
263                                       AND Udlån.Afleveringsdato IS NULL";
264                    if (barcode != "")
265                            SQL += " AND Udstyr.stregkode = '" + barcode + "' ";
266                    if (name != "")
267                            SQL += " AND Udstyr.Navn LIKE '%" + name + "%' ";
268                    if (inits != "")
269                            SQL += " AND Person.Initialer = '" + inits + "' ";
270    
271                    CRecordset rs(&db);
272                    rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
273                    FillEquipmentVector(buffer,rs);
274                    rs.Close();
275            }
276    
277            for (int i=0; i<buffer.size(); i++) {
278                    //fill Equipment::checkouts
279                    
280                    SQL = "SELECT Udlån.StartDato, Udlån.Afleveringsdato,Udlån.Antaldage, Person.Initialer\
281                                    FROM Udlån\
282                                    INNER JOIN Person ON Udlån.PersonID = Person.PersonID ";
283                    SQL += "WHERE Udlån.Stregkode = " + buffer[i].barcode + " ORDER BY STARTDATO ASC";
284                    CRecordset rs(&db);
285                    rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
286                    if (rs.GetRecordCount()>0) {
287                            rs.MoveFirst();
288                            while ( !rs.IsEOF() ) {
289                                    Checkout check;
290                                    rs.GetFieldValue((short)0, check.startdate);
291                                    rs.GetFieldValue(1, check.enddate);
292                                    rs.GetFieldValue(2, check.numdays);
293                                    rs.GetFieldValue(3, check.inits);
294    
295                                    buffer[i].checkouts.push_back(check);
296                                    rs.MoveNext();
297                            }
298                    }
299                    rs.Close();
300                                    
301                    // fill Equipment::reservations
302                    SQL = "SELECT Resevation.StartDato, Resevation.Antaldage, Person.Initialer\
303                                    FROM Resevation\
304                                    INNER JOIN Person ON Resevation.PersonID = Person.PersonID ";
305                    SQL += "WHERE Resevation.Stregkode = " + buffer[i].barcode + " ORDER BY STARTDATO ASC";
306                    
307                    rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
308                    if (rs.GetRecordCount()>0) {
309                            rs.MoveFirst();
310                            while ( !rs.IsEOF() ) {
311                                    Reservation res;
312                                    rs.GetFieldValue((short)0, res.startdate);
313                                    rs.GetFieldValue(1, res.numdays);
314                                    rs.GetFieldValue(2, res.inits);
315    
316                                    buffer[i].reservations.push_back(res);
317                                    rs.MoveNext();
318                            }
319                    }
320                    rs.Close();
321            }
322    
323            return buffer;
324    }
325    
326    // Developed by Torben H. Nielsen
327    void DatabaseLayer::FillEquipmentVector(vector<Equipment> &buffer, CRecordset &rs)
328    {
329            CString barcode,name,description,placement,status;
330            if (rs.GetRecordCount()>0) {
331                    rs.MoveFirst();
332                    while (!rs.IsEOF() ) {
333                            Equipment eq;
334                            rs.GetFieldValue((short)0, eq.barcode);
335                            rs.GetFieldValue(1, eq.name);
336                            rs.GetFieldValue(2, eq.description);
337                            rs.GetFieldValue(3, eq.placement);
338                            rs.GetFieldValue(4, eq.status);
339    
340                            buffer.push_back(eq);
341    
342                            rs.MoveNext();
343                    }
344            }
345    }

Legend:
Removed from v.16  
changed lines
  Added in v.17

  ViewVC Help
Powered by ViewVC 1.1.20