From e9ff9842e9a8c178f5e17c0cf5dde16db1a0d8fc Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Thu, 26 Jan 2012 12:07:52 +0100 Subject: New diagnose and behandling functions. --- server/src/luapraxisd.cc | 138 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 114 insertions(+), 24 deletions(-) (limited to 'server/src/luapraxisd.cc') 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 cavelist = pxu->px->diverse_get_cave(""); + std::vector::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 cavelist = pxu->px->diverse_get_cave(""); - std::vector::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 bhlst = + pxu->px->diverse_get_behandling(""); + std::vector::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 dialst = + pxu->px->diverse_get_diagnose(""); + std::vector::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 cavelist; - Praxisd::patient_t pat = pxu->px->patient_get_by_cpr(cpr); - std::vector::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 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::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 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 cavelist = pxu->px->diverse_get_cave(sogenr); + std::vector 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} }; -- cgit v1.2.3