Fotobot
Get data from your photovoltaic plant
interfaceboxescontroller.cpp
Go to the documentation of this file.
1 
8 #include "static.h"
9 #include <QVariant>
10 #include <QDateTime>
11 
13  qRegisterMetaType<DBT_INTERFACEBOXES>();
14  connect(this, SIGNAL(saveInterfacebox(DBT_INTERFACEBOXES)), Static::db, SLOT(saveInterfacebox(DBT_INTERFACEBOXES)), Qt::QueuedConnection);
15  connect(this, SIGNAL(deleteInterfacebox(int)), Static::db, SLOT(deleteInterfacebox(int)), Qt::QueuedConnection);
16  connect(this, SIGNAL(restartInterfacebox()), Static::interfacebox, SLOT(restart()), Qt::QueuedConnection);
17 }
18 
19 void InterfaceboxesController::servicePrivate(HttpRequest& request) {
20  QByteArray action = request.getParameter("action");
21  if(action.startsWith("add")) {
22  actionAdd(request); return;
23  } else if(action.startsWith("edit")) {
24  actionEdit(request); return;
25  } else if(action.startsWith("delete")) {
26  actionDelete(request); return;
27  } else if(action.startsWith("restart")) {
28  actionRestart(request); return;
29  }
30 
33  QList<DBT_INTERFACEBOXES> interfaceboxes = Static::db->interfaceboxes();
34  write(QString("<h2>%1</h2>\n").arg(tr("Interfaceboxes")));
35  write(QString("<a href=\"/interfaceboxes?action=add\">%1</a>\n").arg(tr("Add an interfacebox")));
36  write("<table>\n");
37  write( QString("<tr class=\"line1st\"><th></th><th>%1</th><th>%2</th>""</tr>")
38  .arg(tr("Description"))
39  .arg(tr("Line"))
40  );
41 
42  QString s2 ("<tr>"
43  "<td><a href=\"/interfaceboxes?action=edit&id=%4\">%1</a> "
44  "<a href=\"/interfaceboxes?action=delete&id=%4\">%2</a></td>"
45  "<td>%3</td><td>%5</td></tr>");
46  QList<DBT_INTERFACEBOXES>::const_iterator i;
47  for(i = interfaceboxes.constBegin(); i != interfaceboxes.constEnd(); ++i) {
48  const DBT_INTERFACEBOXES& l = *i;
49  write(QString(s2)
50  .arg(tr("Edit"), tr("Delete"))
51  .arg(l.description)
52  .arg(l.interfacebox)
53  .arg(l.line)
54  );
55  }
56 
57  write("</table>\n");
58 }
59 
60 QString InterfaceboxesController::getEditFormContents(HttpRequest& request, const DBT_INTERFACEBOXES& interfacebox, bool generator) {
61  Q_UNUSED(request);
62  Q_UNUSED(generator);
63  QString s;
64  s.append(QString("<input type=\"hidden\" name=\"id\" value=\"%1\" />\n").arg(interfacebox.interfacebox));
65  QString i ("<tr><td><label for=\"%2\">%1</label>: </td><td><input type=\"text\" name=\"%2\" value=\"%3\" /></td></tr>\n");
66  s.append(i.arg(tr("Description"), "description", interfacebox.description));
67 
68  // line selectbox
69  QList<DBT_LINES> lines = Static::db->lines();
70  s.append(QString("<tr><td><label for=\"%2\">%1</label>: </td><td><select id=\"%2\" name=\"%2\">\n").arg(tr("Line"), "line"));
71  QList<DBT_LINES>::const_iterator ii;
72  for(ii = lines.constBegin(); ii != lines.constEnd(); ++ii) {
73  const DBT_LINES& l = *ii;
74  s.append(QString("<option value=\"%1\" %4>%1 %2 %3</option>\n")
75  .arg(l.line).arg(l.device, l.description,
76  (l.line == interfacebox.line) ? "selected=\"selected\"" : ""));
77  }
78  s.append("</select></td></tr>\n");
79 
80  return s;
81 }
82 
83 void InterfaceboxesController::readForm(DBT_INTERFACEBOXES& interfacebox, HttpRequest& request) {
84  interfacebox.interfacebox = request.getParameter("id").toInt();
85  interfacebox.description = request.getParameter("description");
86  interfacebox.line = request.getParameter("line").toInt();
87 }
88 
92 void InterfaceboxesController::actionAdd(HttpRequest& request) {
93  qDebug() << "InterfaceboxesController::actionAdd()";
94  QByteArray action = request.getParameter("action");
96  write(QString("<h2>%1</h2>\n").arg(tr("Add an interfacebox")));
97  write("<form method=\"post\">\n"
98  "<input type=\"hidden\" name=\"action\" value=\"add2\" />\n");
99  DBT_INTERFACEBOXES interfacebox;
100  readForm(interfacebox, request);
101  write("<table class=\"formTable\">");
102  write(getEditFormContents(request));
103  write("</table>");
104  write(QString("<input type=\"submit\" value=\"%1\">\n"
105  "</form>\n").arg(tr("Add")));
106  if(action == "add2") {
108  interfacebox.interfacebox= 0;
110  if(true) {
111  emit saveInterfacebox(interfacebox);
112  QString location = QString("/interfaceboxes?message=%1").arg(percentEncode(tr("Interfacebox added.")));
113  redirect(location);
114  } else {
115  write(QString("<p>%1</p>").arg(tr("Interfacebox definition invalid (not added).")));
116  }
117  }
118 }
119 
123 void InterfaceboxesController::actionEdit(HttpRequest& request) {
124  QByteArray action = request.getParameter("action");
125  DBT_INTERFACEBOXES interfacebox;
127  write(QString("<h2>%1</h2>\n").arg(tr("Edit an interfacebox")));
128  write("<form method=\"post\">\n"
129  "<input type=\"hidden\" name=\"action\" value=\"edit2\" />\n");
130  if(action == "edit") {
131  QByteArray id = request.getParameter("id");
132  int idi = id.toInt();
133  if(id.isEmpty() || idi < 1) {
134  redirect(QString("/interfaceboxes?message=%1").arg(percentEncode(tr("Error: Invalid interfacebox ID."))));
135  return;
136  }
137  QList<DBT_INTERFACEBOXES> interfaceboxes = Static::db->interfaceboxes(QList<int>() << idi);
138  if(interfaceboxes.empty()) {
139  redirect(QString("/interfaceboxes?message=%1").arg(percentEncode(tr("Error: no such interfacebox found."))));
140  return;
141  }
142  write("<table class=\"formTable\">");
143  write(getEditFormContents(request, interfaceboxes.at(0)));
144  write("</table>");
145  } else {
146  readForm(interfacebox, request);
147  write("<table class=\"formTable\">");
148  write(getEditFormContents(request, interfacebox));
149  write("</table>");
150  }
151  write(QString("<input type=\"submit\" value=\"%1\">\n"
152  "</form>\n").arg(tr("Edit")));
153  if(action == "edit2") {
156  if(interfacebox.interfacebox> 0 && true) {
157  emit saveInterfacebox(interfacebox);
158  QString location = QString("/interfaceboxes?message=%1").arg(percentEncode(tr("Interfacebox edited.")));
159  redirect(location);
160  } else {
161  write(QString("<p>%1</p>").arg(tr("Error: Interfacebox definition invalid (not edited).")));
162  }
163  }
164 }
165 
169 void InterfaceboxesController::actionDelete(HttpRequest& request) {
170  write(QString("<h2>%1</h2>\n").arg(tr("Delete an interfacebox")));
171  QString location;
172  QByteArray id = request.getParameter("id");
173  int idi = id.toInt();
174  if(!id.isEmpty() && idi > 0) {
175  emit deleteInterfacebox(idi);
176  location = QString("/interfaceboxes?message=%1").arg(percentEncode(tr("Interfacebox deleted.")));
177  } else {
178  location = QString("/interfaceboxes?message=%1").arg(percentEncode(tr("Error: Invalid invertor ID. Interfacebox not deleted.")));
179  }
180  redirect(location);
181 }
182 
183 
187 void InterfaceboxesController::actionRestart(HttpRequest& request) {
188  Q_UNUSED(request);
189  write(QString("<h2>%1</h2>\n")
190  .arg(tr("All interfaceboxes were signalled to restart"))
191  );
192  emit restartInterfacebox();
193 }
194 
QList< DBT_INTERFACEBOXES > interfaceboxes(int line=0)
Returns list of interfaceboxes filtered by line number.
Definition: database.cpp:524
void actionEdit(HttpRequest &request)
QList< DBT_LINES > lines(int line=0)
Returns list of communications lines.
Definition: database.cpp:380
static void readForm(DBT_INTERFACEBOXES &interfacebox, HttpRequest &request)
static QString getEditFormContents(HttpRequest &request, const DBT_INTERFACEBOXES &line=DBT_INTERFACEBOXES(), bool generator=false)
void actionDelete(HttpRequest &request)
void actionRestart(HttpRequest &request)
void actionAdd(HttpRequest &request)
void servicePrivate(HttpRequest &request)
Class describing database table LINES.