summaryrefslogtreecommitdiff
path: root/server/src/luapraxisd.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2012-01-26 12:07:52 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2012-01-26 12:07:52 +0100
commite9ff9842e9a8c178f5e17c0cf5dde16db1a0d8fc (patch)
treec6fda072fb0af0c36c9da8b259fd1686a6251589 /server/src/luapraxisd.cc
parent9fc31e3d046a19c936f7c6e1e5ab703ce44f9218 (diff)
New diagnose and behandling functions.
Diffstat (limited to 'server/src/luapraxisd.cc')
-rw-r--r--server/src/luapraxisd.cc138
1 files changed, 114 insertions, 24 deletions
diff --git a/server/src/luapraxisd.cc b/server/src/luapraxisd.cc
index 04a83db..b50446c 100644
--- a/server/src/luapraxisd.cc
+++ b/server/src/luapraxisd.cc
@@ -37,6 +37,9 @@
#define luaL_checkbool(L, i) \
(lua_isboolean(L,i) ? lua_toboolean(L,i) : luaL_checkint(L,i))
+#define error(L, m) \
+ ERR(luapraxisd, "%s\n", m); lua_pushstring(L, m); lua_error(L);
+
typedef struct px_userdata {
Praxisd *px;
} px_userdata;
@@ -49,23 +52,95 @@ static int px_addcave(lua_State *L)
const char *cpr = luaL_checkstring(L, 2);
const char *cave = luaL_checkstring(L, 3);
+ const char *txt = luaL_checkstring(L, 4);
+
+ std::string sogeord;
+ std::string sogetxt;
+
+ try {
+ std::vector<Praxisd::cave_t> cavelist = pxu->px->diverse_get_cave("");
+ std::vector<Praxisd::cave_t>::iterator i = cavelist.begin();
+ while(i != cavelist.end()) {
+ Praxisd::cave_t &c = *i;
+ if(strcasecmp(cave, c.cave.c_str()) == 0) {
+ pxu->px->add_sogeord(cpr, c.sogenr, txt);
+ return 0;
+ }
+ i++;
+ }
+
+ std::string text = cave;
+ text += " ";
+ text += txt;
+ pxu->px->add_sogeord(cpr, "CA0003", text.c_str()); // CA0003 == 'ANDET'
+ } catch(const char *msg) {
+ error(L, msg);
+ }
+
+ return 0;
+}
+
+static int px_addbehandling(lua_State *L)
+{
+ px_userdata *pxu;
+ pxu = (px_userdata *)luaL_checkudata(L, 1, "Praxisd");
+ luaL_argcheck(L, pxu, 1, "Praxisd expected");
+
+ const char *cpr = luaL_checkstring(L, 2);
+ const char *behandling = luaL_checkstring(L, 3);
+ const char *text = luaL_checkstring(L, 4);
std::string sogeord;
std::string sogetxt;
- std::vector<Praxisd::cave_t> cavelist = pxu->px->diverse_get_cave("");
- std::vector<Praxisd::cave_t>::iterator i = cavelist.begin();
- while(i != cavelist.end()) {
- Praxisd::cave_t &c = *i;
- if(strcasecmp(cave, c.cave.c_str()) == 0) {
- pxu->px->add_sogeord(cpr, c.sogenr, "");
- return 0;
+ try {
+ std::vector<Praxisd::behandling_t> bhlst =
+ pxu->px->diverse_get_behandling("");
+ std::vector<Praxisd::behandling_t>::iterator i = bhlst.begin();
+ while(i != bhlst.end()) {
+ Praxisd::behandling_t &b = *i;
+ if(strcasecmp(behandling, b.kode.c_str()) == 0) {
+ pxu->px->add_sogeord(cpr, b.sogenr, text);
+ return 0;
+ }
+ i++;
}
- i++;
+ } catch(const char *msg) {
+ error(L, msg);
}
- pxu->px->add_sogeord(cpr, "CA0003", cave); // CA0003 == 'ANDET'
+ return 0;
+}
+
+static int px_adddiagnose(lua_State *L)
+{
+ px_userdata *pxu;
+ pxu = (px_userdata *)luaL_checkudata(L, 1, "Praxisd");
+ luaL_argcheck(L, pxu, 1, "Praxisd expected");
+
+ const char *cpr = luaL_checkstring(L, 2);
+ const char *diagnose = luaL_checkstring(L, 3);
+ const char *text = luaL_checkstring(L, 4);
+
+ std::string sogeord;
+ std::string sogetxt;
+ try {
+ std::vector<Praxisd::diagnose_t> dialst =
+ pxu->px->diverse_get_diagnose("");
+ std::vector<Praxisd::diagnose_t>::iterator i = dialst.begin();
+ while(i != dialst.end()) {
+ Praxisd::diagnose_t &d = *i;
+ if(strcasecmp(diagnose, d.kode.c_str()) == 0) {
+ pxu->px->add_sogeord(cpr, d.sogenr, text);
+ return 0;
+ }
+ i++;
+ }
+ } catch(const char *msg) {
+ error(L, msg);
+ }
+
return 0;
}
@@ -79,25 +154,29 @@ static int px_getcave(lua_State *L)
std::vector<Praxisd::cave_t> cavelist;
- Praxisd::patient_t pat = pxu->px->patient_get_by_cpr(cpr);
- std::vector<Praxisd::sogeord_t>::iterator i = pat.sogeord.begin();
- while(i != pat.sogeord.end()) {
- Praxisd::sogeord_t &s = *i;
- if(s.sogenr[0] == 'C') {
- std::string csogenr = s.sogenr.substr(1, s.sogenr.length() - 1);
- std::vector<Praxisd::cave_t> cl = pxu->px->diverse_get_cave(csogenr);
- if(cl.size() == 1) {
- if(cl[0].cave == "ANDET") cl[0].cave = s.sogetxt;
- cavelist.push_back(cl[0]);
+ try {
+ Praxisd::patient_t pat = pxu->px->patient_get_by_cpr(cpr);
+ std::vector<Praxisd::sogeord_t>::iterator i = pat.sogeord.begin();
+ while(i != pat.sogeord.end()) {
+ Praxisd::sogeord_t &s = *i;
+ if(s.sogenr[0] == 'C') {
+ std::string csogenr = s.sogenr.substr(1, s.sogenr.length() - 1);
+ std::vector<Praxisd::cave_t> cl = pxu->px->diverse_get_cave(csogenr);
+ if(cl.size() == 1) {
+ if(cl[0].cave == "ANDET") cl[0].cave = s.sogetxt;
+ cavelist.push_back(cl[0]);
+ }
}
+
+ i++;
}
-
- i++;
+ } catch(const char *msg) {
+ error(L, msg);
}
lua_createtable(L, 0, cavelist.size());
int top = lua_gettop(L);
-
+
for(size_t i = 0; i < cavelist.size(); i++) {
lua_pushstring(L, cavelist[i].cave.c_str());
lua_rawseti(L, top, i);
@@ -114,7 +193,12 @@ static int px_cavelist(lua_State *L)
const char *sogenr = luaL_checkstring(L, 2);
- std::vector<Praxisd::cave_t> cavelist = pxu->px->diverse_get_cave(sogenr);
+ std::vector<Praxisd::cave_t> cavelist;
+ try {
+ cavelist = pxu->px->diverse_get_cave(sogenr);
+ } catch(const char *msg) {
+ error(L, msg);
+ }
lua_createtable(L, 0, cavelist.size());
int top = lua_gettop(L);
@@ -138,7 +222,11 @@ static int px_new(lua_State *L)
luaL_getmetatable(L, "Praxisd");
lua_setmetatable(L, -2);
- pxu->px = new Praxisd(host, port);
+ try {
+ pxu->px = new Praxisd(host, port);
+ } catch(const char *msg) {
+ error(L, msg);
+ }
return 1;
}
@@ -160,6 +248,8 @@ static const struct luaL_Reg px_meths[] = {
{"cavelist", px_cavelist},
{"getcave", px_getcave},
{"addcave", px_addcave},
+ {"adddiagnose", px_adddiagnose},
+ {"addbehandling", px_addbehandling},
{NULL, NULL}
};