/[H6]/PostgresLayer.cpp
ViewVC logotype

Annotation of /PostgresLayer.cpp

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20