summaryrefslogtreecommitdiff
path: root/client/praxisd.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2011-10-12 12:09:50 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2011-10-12 12:09:50 +0200
commitffc19fdcd0845dbd85c2bba990c590fcc5fba670 (patch)
treef8a397c2c3a24f2b7fe180c7402f36919e784179 /client/praxisd.cc
parent29b92e2906823878a7c516dc454d9ae8654de8fb (diff)
Finalised the praxisd communination code. Still untested though...
Diffstat (limited to 'client/praxisd.cc')
-rw-r--r--client/praxisd.cc336
1 files changed, 323 insertions, 13 deletions
diff --git a/client/praxisd.cc b/client/praxisd.cc
index 2367eb1..d8b3444 100644
--- a/client/praxisd.cc
+++ b/client/praxisd.cc
@@ -27,20 +27,330 @@
*/
#include "praxisd.h"
-#ifdef TEST_PRAXISD
-//Additional dependency files
-//deps:
-//Required cflags (autoconf vars may be used)
-//cflags:
-//Required link options (autoconf vars may be used)
-//libs:
-#include "test.h"
+#include <QDomDocument>
-TEST_BEGIN;
+#include <QNetworkReply>
-// TODO: Put some testcode here (see test.h for usable macros).
-TEST_TRUE(false, "No tests yet!");
+#define DOCAVE(x) if(element.tagName() == #x) cave.x = element.text()
+static QVector<Praxisd::cave_t> getCaveList(QByteArray data)
+{
+ QDomDocument doc;
+ doc.setContent(data);
-TEST_END;
+ QVector<Praxisd::cave_t> cavelist;
-#endif/*TEST_PRAXISD*/
+ QDomNode praxisd = doc.documentElement().firstChild();
+ QDomNodeList nodes = praxisd.childNodes();
+ for(int i = 0; i < nodes.count(); i++) {
+ QDomNode node = nodes.at(i);
+ QDomElement element = node.toElement();
+ if(element.tagName() == "div_cave") {
+
+ Praxisd::cave_t cave;
+ cave.sogenr = element.attribute("sogenr");
+
+ QDomNodeList nodes = element.childNodes();
+ for(int j = 0; j < nodes.count(); j++) {
+ QDomNode node = nodes.at(j);
+ QDomElement element = node.toElement();
+ DOCAVE(cave);
+ DOCAVE(bemaerkning1);
+ DOCAVE(bemaerkning2);
+ DOCAVE(bemaerkning3);
+ }
+
+ cavelist.push_back(cave);
+ }
+ }
+
+ return cavelist;
+}
+
+#define DOPATIENT(x) if(element.tagName() == #x) patient.x = element.text()
+static Praxisd::patient_t getPatient(QByteArray data)
+{
+ QDomDocument doc;
+ doc.setContent(data);
+
+ Praxisd::patient_t patient;
+
+ QDomNode praxisd = doc.documentElement().firstChild();
+ QDomNode patnode = praxisd.firstChild();
+
+ QDomElement patelement = patnode.toElement();
+ patient.cpr = patelement.attribute("cpr");
+
+ QDomNodeList nodes = patnode.childNodes();
+ for(int i = 0; i < nodes.count(); i++) {
+ QDomNode node = nodes.at(i);
+ QDomElement element = node.toElement();
+
+ DOPATIENT(fornavne);
+ DOPATIENT(efternavn);
+ DOPATIENT(stilling);
+ DOPATIENT(gade);
+ DOPATIENT(by);
+ DOPATIENT(telefonnumre);
+ DOPATIENT(sikringsgr);
+ DOPATIENT(amtsnr);
+ DOPATIENT(sygekontor);
+ DOPATIENT(henvnr);
+ DOPATIENT(frilinie1);
+ DOPATIENT(frilinie2);
+ DOPATIENT(frilinie3);
+ DOPATIENT(frilinie4);
+ DOPATIENT(frilinie5);
+
+ if(element.tagName() == "sogeords") {
+ Praxisd::sogeord_t sogeord;
+
+ QDomNodeList nodes = element.childNodes();
+ for(int j = 0; j < nodes.count(); j++) {
+ QDomNode node = nodes.at(j);
+ QDomElement element = node.toElement();
+ sogeord.sogenr = element.attribute("sogenr");
+ sogeord.sogedato = element.attribute("sogedato");
+ sogeord.sogetxt = element.text();
+ }
+
+ patient.sogeord.push_back(sogeord);
+ }
+
+ DOPATIENT(ydernr);
+ DOPATIENT(created);
+ DOPATIENT(donottouch);
+ DOPATIENT(visus);
+ DOPATIENT(labkort);
+ DOPATIENT(medkort);
+ DOPATIENT(jlock);
+ DOPATIENT(unknown1);
+ DOPATIENT(henvdato);
+ DOPATIENT(aarhund);
+ DOPATIENT(fakturadato);
+ DOPATIENT(fakturabelob);
+ DOPATIENT(betaldato);
+ DOPATIENT(betalbelob);
+ DOPATIENT(jdato);
+ DOPATIENT(unknown250);
+ DOPATIENT(unknown251);
+ DOPATIENT(jtime);
+ }
+
+ return patient;
+}
+
+#define DODOKMENU(x) if(element.tagName() == #x) dokmenu.x = element.text()
+QVector<Praxisd::dokmenu_t> getDokMenu(QByteArray data)
+{
+ QDomDocument doc;
+ doc.setContent(data);
+
+ QVector<Praxisd::dokmenu_t> dokmenus;
+
+ QDomNode praxisd = doc.documentElement().firstChild();
+ QDomNodeList nodes = praxisd.childNodes();
+ for(int i = 0; i < nodes.count(); i++) {
+ QDomNode node = nodes.at(i);
+ QDomElement element = node.toElement();
+ if(element.tagName() == "dokmenu") {
+
+ Praxisd::dokmenu_t dokmenu;
+ dokmenu.cpr = element.attribute("cpr");
+
+ QDomNodeList nodes = element.childNodes();
+ for(int j = 0; j < nodes.count(); j++) {
+ QDomNode node = nodes.at(j);
+ QDomElement element = node.toElement();
+ DODOKMENU(group);
+ DODOKMENU(subject);
+ if(element.tagName() == "filename") {
+ dokmenu.filename = element.text();
+ dokmenu.filesize = element.attribute("filesize").toUInt();
+ dokmenu.date = element.attribute("date");
+ }
+ }
+
+ dokmenus.push_back(dokmenu);
+ }
+ }
+
+ return dokmenus;
+}
+
+Praxisd::Praxisd(QString host, unsigned short int port)
+{
+ QUrl url;
+ url.setHost(host);
+ url.setPort(port);
+ url.setScheme("http");
+
+ request.setUrl(url);
+
+ manager = new QNetworkAccessManager(this);
+ connect(manager, SIGNAL(finished(QNetworkReply*)),
+ this, SLOT(replyFinished(QNetworkReply*)));
+}
+
+void Praxisd::replyFinished(QNetworkReply *reply)
+{
+ if(reply->error() == QNetworkReply::NoError) {
+
+ reply_t type = replytypes[reply];
+ switch(type) {
+ case journal:
+ emit gotJournal(reply->readAll());
+ break;
+
+ case cavelist:
+ emit gotCave(getCaveList(reply->readAll()));
+ break;
+
+ case patient:
+ emit gotPatient(getPatient(reply->readAll()));
+ break;
+
+ case dokmenu:
+ emit gotDokMenu(getDokMenu(reply->readAll()));
+ break;
+
+ case dokmenufile:
+ emit gotDokMenuFile(reply->readAll());
+ break;
+ }
+ } else {
+ emit networkError(reply->errorString());
+ }
+ replytypes.erase(replytypes.find(reply));
+}
+
+void Praxisd::makeTransfer(reply_t t, QString uri,
+ QMap<QString, QString> params)
+{
+ request.setRawHeader("User-Agent", "Pracro Client v"VERSION);
+
+ QUrl url;
+ url.setHost(request.url().host());
+ url.setPort(request.url().port());
+ url.setScheme(request.url().scheme());
+
+ url.setPath(uri);
+
+ QMap<QString, QString>::iterator i = params.begin();
+ while(i != params.end()) {
+ url.addQueryItem(i.key(), i.value());
+ i++;
+ }
+
+ request.setUrl(url);
+
+ QNetworkReply* r = manager->get(request);
+ replytypes[r] = t;
+}
+
+void Praxisd::journal_get_by_cpr(QString cpr)
+{
+ QMap<QString, QString> params;
+ params["cpr"] = cpr;
+ makeTransfer(journal, "/praxisd/1.0/journal/get_by_cpr", params);
+}
+
+void Praxisd::diverse_get_cave(QString sogenr)
+{
+ QMap<QString, QString> params;
+ params["sogenr"] = sogenr;
+ makeTransfer(cavelist, "/praxisd/1.0/diverse/get_all_by_sogenr", params);
+}
+
+void Praxisd::patient_get_by_cpr(QString cpr)
+{
+ QMap<QString, QString> params;
+ params["cpr"] = cpr;
+ makeTransfer(patient, "/praxisd/1.0/patient/get_by_cpr", params);
+}
+
+void Praxisd::dokmenu_get_all_by_cpr(QString cpr)
+{
+ QMap<QString, QString> params;
+ params["cpr"] = cpr;
+ makeTransfer(dokmenu, "/praxisd/1.0/dokmenu/get_all_by_cpr", params);
+}
+
+void Praxisd::dokmenu_get_by_cpr_and_name(QString cpr, QString name)
+{
+ cpr = cpr;
+ name = name;
+ // uri = host + "/praxisd/1.0/dokmenu/get_by_cpr_and_name?cpr=" + cpr + "&name=" + name;
+ QMap<QString, QString> params;
+ params["cpr"] = cpr;
+ params["name"] = name;
+ makeTransfer(dokmenufile, "/praxisd/1.0/dokmenu/get_by_cpr_and_name", params);
+}
+
+PraxisdSync::PraxisdSync(QString host, unsigned short int port)
+ : praxisd(host, port)
+{
+ connect(&praxisd, SIGNAL(gotCaveList(QVector<Praxisd::cave_t>)),
+ this, SLOT(gotCaveList(QVector<Praxisd::cave_t>)));
+
+ start();
+}
+
+void PraxisdSync::run()
+{
+ while(true) {
+ wsem.acquire();
+
+ switch(request_type) {
+ case Praxisd::journal:
+ break;
+ case Praxisd::cavelist:
+ praxisd.diverse_get_cave(request_sogenr);
+ break;
+ case Praxisd::patient:
+ break;
+ case Praxisd::dokmenu:
+ break;
+ case Praxisd::dokmenufile:
+ break;
+ }
+ }
+}
+
+void PraxisdSync::gotCaveList(QVector<Praxisd::cave_t> cl)
+{
+ cavelist = cl;
+ rsem.release();
+}
+
+QString PraxisdSync::journal_get_by_cpr(QString cpr)
+{
+ return cpr;
+}
+
+QVector<Praxisd::cave_t> PraxisdSync::diverse_get_cave(QString sogenr)
+{
+ request_type = Praxisd::cavelist;
+ request_sogenr = sogenr;
+
+ wsem.release();
+ rsem.acquire();
+
+ return cavelist;
+}
+
+Praxisd::patient_t PraxisdSync::patient_get_by_cpr(QString cpr)
+{
+ cpr = "";
+ return Praxisd::patient_t();
+}
+
+QVector<Praxisd::dokmenu_t> PraxisdSync::dokmenu_get_all_by_cpr(QString cpr)
+{
+ cpr = "";
+ return QVector<Praxisd::dokmenu_t>();
+}
+
+QString PraxisdSync::dokmenu_get_by_cpr_and_name(QString cpr, QString name)
+{
+ return cpr + name;
+}