1 |
<%pre> |
2 |
#include <tntdb/connect.h> |
3 |
#include <tntdb/connection.h> |
4 |
#include <tntdb/result.h> |
5 |
#include <tntdb/row.h> |
6 |
|
7 |
#include <sstream> |
8 |
#include "common.h" |
9 |
|
10 |
|
11 |
inline std::string convert_bool(bool input) |
12 |
{ |
13 |
return input ? "on" : "off"; |
14 |
} |
15 |
|
16 |
</%pre> |
17 |
|
18 |
<%config> |
19 |
dburl; |
20 |
</%config> |
21 |
|
22 |
<&header title="Installation details"> |
23 |
</&header> |
24 |
|
25 |
<%args> |
26 |
int id; |
27 |
</%args> |
28 |
|
29 |
<h2>Installation details</h2> |
30 |
|
31 |
|
32 |
<{ |
33 |
tntdb::Connection conn; |
34 |
|
35 |
conn = tntdb::connect(dburl); |
36 |
|
37 |
std::stringstream query; |
38 |
query << "SELECT c.name, c.address AS caddress, i.description, i.address AS iadress, i.furnacetype, i.updaterate "; |
39 |
query << "FROM installation i INNER JOIN customer c ON c.id = i.customerid "; |
40 |
query << "WHERE i.id = " << id; |
41 |
|
42 |
std::ostream& out = reply.out(); |
43 |
|
44 |
tntdb::Result res = conn.select(query.str()); |
45 |
|
46 |
if (res.size() >0 ) |
47 |
{ |
48 |
}> |
49 |
|
50 |
<table border=1 cellspacing=0 align='center'> |
51 |
<tr> |
52 |
<td><b>Customer</b>: </td> |
53 |
<td><b><$ res[0].getString(0) $></b></td> |
54 |
</tr> |
55 |
<tr> |
56 |
<td>Customer address: </td> |
57 |
<td><$$ nl2br(res[0].getString(1)) $></td> |
58 |
</tr> |
59 |
<tr> |
60 |
<td><b>Installation: </b></td> |
61 |
<td><b><$ res[0].getString(2) $></b></td> |
62 |
</tr> |
63 |
<tr> |
64 |
<td>Location: </td> |
65 |
<td><$$ nl2br(res[0].getString(3)) $></td> |
66 |
</tr> |
67 |
<tr> |
68 |
<td>Furnace type: </td> |
69 |
<td><$ res[0].getString(4) $></td> |
70 |
</tr> |
71 |
<tr> |
72 |
<td>Update rate: </td> |
73 |
<td><$ res[0].getInt(5) $></td> |
74 |
</tr> |
75 |
|
76 |
|
77 |
</table> |
78 |
|
79 |
|
80 |
<p align="center"><img src="temperaturegraph?id=<$id$>"></p> |
81 |
|
82 |
<{ |
83 |
query.str(""); //reset stringstream |
84 |
query << "SELECT messagenr, date_trunc('second', logtime) AS logtime, temperature, flamedetector, solidfuelempty, conveyorerror,powerfailure "; |
85 |
query << "FROM logtable "; |
86 |
query << "WHERE installationnr = " << id; |
87 |
query << "ORDER BY messagenr DESC"; |
88 |
res = conn.select(query.str()); |
89 |
|
90 |
|
91 |
out << "<table border=1 cellspacing=0 align='center'>\n"; |
92 |
out << "<tr><th> Message# </th><th> Logtime </th><th> Temperature </th><th> Flamedetector </th><th> Solidfuel empty </th><th> Conveyor error </th><th> Power failure </th></tr>\n"; |
93 |
|
94 |
for (int i=0; i<res.size(); ++i) |
95 |
{ |
96 |
int messagenr = res[i].getInt(0); |
97 |
std::string logtime = res[i].getString(1); |
98 |
int temperature = res[i].getInt(2); |
99 |
bool flamedetector = res[i].getBool(3); |
100 |
bool solidfuelempty = res[i].getBool(4); |
101 |
bool conveyorerror = res[i].getBool(5); |
102 |
bool powerfailure = res[i].getBool(6); |
103 |
|
104 |
std::string critical = " class='critical'"; |
105 |
|
106 |
out << "<tr>"; |
107 |
|
108 |
out << "<td align='center'>" << messagenr << "</td>\n"; |
109 |
out << "<td align='center'>" << logtime << "</td>\n"; |
110 |
out << "<td align='center'" << (temperature >90 ? critical : "" ) << ">" << temperature << "</td>\n"; |
111 |
out << "<td align='center'" << (flamedetector==false ? critical : "") << ">" << convert_bool(flamedetector) << "</td>\n"; |
112 |
out << "<td align='center'>" << convert_bool(solidfuelempty) << "</td>\n"; |
113 |
out << "<td align='center'" << (conveyorerror==true ? critical : "") << ">" << convert_bool(conveyorerror) << "</td>\n"; |
114 |
out << "<td align='center'" << (powerfailure==true ? critical : "") << ">" << convert_bool(powerfailure) << "</td>\n"; |
115 |
|
116 |
out << "</tr>"; |
117 |
} |
118 |
|
119 |
|
120 |
}> |
121 |
|
122 |
|
123 |
|
124 |
<{ |
125 |
} |
126 |
else |
127 |
{ |
128 |
reply.out() << "<i>No installation with this ID</i>"; |
129 |
} |
130 |
|
131 |
}> |
132 |
|
133 |
<&footer> |
134 |
</&footer> |