dashboardImpl.cls 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. /*------------------------------------------------------------------------
  2. File : adresse_dict
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Thu Jun 26 13:56:20 CEST 2025
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. BLOCK-LEVEL ON ERROR UNDO, THROW.
  11. USING OpenEdge.Core.String FROM PROPATH.
  12. USING OpenEdge.Net.HTTP.IHttpResponse FROM PROPATH.
  13. USING OpenEdge.Net.HTTP.StatusCodeEnum FROM PROPATH.
  14. USING OpenEdge.Web.IWebRequest FROM PROPATH.
  15. USING OpenEdge.Web.WebHandler FROM PROPATH.
  16. USING OpenEdge.Web.WebResponseWriter FROM PROPATH.
  17. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  18. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
  19. USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
  20. USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
  21. USING utilities.utilitiesHandler FROM PROPATH.
  22. USING OpenEdge.Net.HTTP.HttpHeader FROM PROPATH.
  23. CLASS dashboard.dashboardImpl INHERITS WebHandler:
  24. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  25. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  26. DEFINE VARIABLE cAnzeigeName AS CHARACTER NO-UNDO.
  27. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  28. DEFINE VARIABLE cSessionToken AS CHARACTER NO-UNDO.
  29. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  30. DEFINE TEMP-TABLE tcompanies
  31. SERIALIZE-NAME 'companies'
  32. FIELD company AS CHARACTER SERIALIZE-NAME 'company'
  33. FIELD company_name AS CHARACTER SERIALIZE-NAME 'company_name'
  34. FIELD lSelected AS LOGICAL SERIALIZE-NAME 'selected'
  35. .
  36. DEFINE TEMP-TABLE tLevel1
  37. SERIALIZE-NAME ''
  38. FIELD menu_id AS INTEGER
  39. FIELD menu_text AS CHARACTER
  40. FIELD menu_link AS CHARACTER
  41. FIELD openMode AS CHARACTER
  42. FIELD admin AS LOGICAL
  43. FIELD level1_recid AS RECID SERIALIZE-HIDDEN
  44. .
  45. DEFINE TEMP-TABLE tLevel2
  46. SERIALIZE-NAME 'children'
  47. FIELD level1_recid AS RECID SERIALIZE-HIDDEN
  48. FIELD menu_id AS INTEGER
  49. FIELD menu_text AS CHARACTER
  50. FIELD menu_link AS CHARACTER
  51. FIELD openMode AS CHARACTER
  52. FIELD admin AS LOGICAL
  53. FIELD level2_recid AS RECID SERIALIZE-HIDDEN
  54. .
  55. DEFINE TEMP-TABLE tLevel3
  56. SERIALIZE-NAME 'children'
  57. FIELD level2_recid AS RECID SERIALIZE-HIDDEN
  58. FIELD menu_id AS INTEGER
  59. FIELD menu_text AS CHARACTER
  60. FIELD menu_link AS CHARACTER
  61. FIELD openMode AS CHARACTER
  62. FIELD admin AS LOGICAL
  63. FIELD level3_recid AS RECID SERIALIZE-HIDDEN
  64. .
  65. DEFINE DATASET menu_structur SERIALIZE-HIDDEN
  66. FOR tLevel1, tLevel2, tLevel3
  67. PARENT-ID-RELATION RELATION1 FOR tLevel1, tLevel2
  68. PARENT-ID-FIELD level1_recid
  69. PARENT-ID-RELATION RELATION2 FOR tLevel2, tLevel3
  70. PARENT-ID-FIELD level2_recid
  71. .
  72. DEFINE VARIABLE hDSmenu_structur AS HANDLE NO-UNDO.
  73. /*------------------------------------------------------------------------------
  74. Purpose:
  75. Notes:
  76. ------------------------------------------------------------------------------*/
  77. METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
  78. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  79. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  80. DEFINE VARIABLE oBody AS String NO-UNDO.
  81. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  82. DEFINE VARIABLE oJsonMenu AS JsonObject NO-UNDO.
  83. DEFINE VARIABLE cDefautlCharSet AS CHARACTER NO-UNDO INIT 'UTF-8'.
  84. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  85. DEFINE VARIABLE cContent-Type AS CHARACTER NO-UNDO.
  86. DEFINE VARIABLE cCorralationID AS CHARACTER NO-UNDO.
  87. DEFINE VARIABLE lcJsonInhalt AS LONGCHAR NO-UNDO.
  88. DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.
  89. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  90. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  91. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  92. DEFINE VARIABLE lAdmin AS LOGICAL NO-UNDO INIT FALSE.
  93. DEFINE VARIABLE htwebmenu AS HANDLE NO-UNDO.
  94. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  95. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  96. DEFINE VARIABLE rtlevel1 AS RECID NO-UNDO.
  97. DEFINE VARIABLE rtlevel2 AS RECID NO-UNDO.
  98. DEFINE VARIABLE cnewuser_name AS CHARACTER NO-UNDO.
  99. outilitiesHandler = NEW utilitiesHandler().
  100. outilitiesHandler:getHeaderData(
  101. INPUT poRequest ,
  102. OUTPUT ccompany ,
  103. OUTPUT cuser_name ,
  104. OUTPUT cAnzeigeName ,
  105. OUTPUT ilanguage_id ,
  106. OUTPUT cSessionToken
  107. ).
  108. cFunction = poRequest:URI:GetQueryValue("function").
  109. MESSAGE 'GET ' ccompany '-' cuser_name '-' cAnzeigeName '-' ilanguage_id '-' cFunction '-' cSessionToken.
  110. lRetVal = FALSE.
  111. DO WHILE cFunction = 'init':
  112. hDSmenu_structur = DATASET menu_structur:HANDLE.
  113. EMPTY TEMP-TABLE tlevel1.
  114. EMPTY TEMP-TABLE tlevel2.
  115. EMPTY TEMP-TABLE tlevel3.
  116. cnewuser_name = cuser_name.
  117. lAdmin = FALSE.
  118. DO WHILE TRUE.
  119. FIND FIRST webmenu NO-LOCK
  120. WHERE webmenu.company = ccompany
  121. AND webmenu.user_name = cnewuser_name NO-ERROR.
  122. IF AVAILABLE webmenu THEN LEAVE.
  123. IF cnewuser_name = 'Admin' THEN LEAVE.
  124. cnewuser_name = 'Admin'.
  125. END.
  126. FIND FIRST users NO-LOCK
  127. WHERE users.user_name = cnewuser_name NO-ERROR.
  128. IF NOT AVAILABLE users THEN LEAVE.
  129. lAdmin = users.lAdmin.
  130. FOR EACH webmenu NO-LOCK
  131. WHERE webmenu.company = ccompany
  132. AND webmenu.user_name = cnewuser_name
  133. AND webmenu.level1 > 0 :
  134. IF NOT lAdmin AND
  135. webmenu.menu_link <> '' AND
  136. webmenu.ladmin THEN NEXT.
  137. IF webmenu.level2 = 0 THEN
  138. DO:
  139. CREATE tlevel1.
  140. ASSIGN
  141. tlevel1.level1_recid = RECID(tLevel1)
  142. tlevel1.menu_id = webmenu.level1
  143. tlevel1.menu_text = webmenu.menu_title
  144. tlevel1.menu_link = webmenu.menu_link
  145. tlevel1.openMode = webmenu.openmode
  146. tlevel1.admin = webmenu.ladmin
  147. rtlevel1 = RECID(tlevel1).
  148. NEXT.
  149. END.
  150. IF webmenu.level3 = 0 THEN
  151. DO:
  152. CREATE tlevel2.
  153. ASSIGN
  154. tlevel2.level1_recid = rtlevel1
  155. tlevel2.level2_recid = RECID(tLevel2)
  156. tlevel2.menu_id = webmenu.level2
  157. tlevel2.menu_text = webmenu.menu_title
  158. tlevel2.menu_link = webmenu.menu_link
  159. tlevel2.openmode = webmenu.openmode
  160. tlevel2.admin = webmenu.ladmin
  161. rtlevel2 = RECID(tlevel2).
  162. NEXT.
  163. END.
  164. CREATE tlevel3.
  165. ASSIGN
  166. tlevel3.level2_recid = rtlevel2
  167. tlevel3.level3_recid = RECID(tLevel3)
  168. tlevel3.menu_id = webmenu.level3
  169. tlevel3.menu_text = webmenu.menu_title
  170. tlevel3.menu_link = webmenu.menu_link
  171. tlevel3.openMode = webmenu.openmode
  172. tlevel3.admin = webmenu.ladmin
  173. .
  174. END.
  175. /* htWebMenu = outilitiesHandler:getWebMenuStructure(*/
  176. /* INPUT ccompany , */
  177. /* INPUT cuser_name, */
  178. /* INPUT ilanguage_id ) . */
  179. cContent-Type = "application/json".
  180. cDefautlCharSet = 'utf-8'.
  181. oJsonResponse = NEW JsonObject().
  182. oJsonMenu = NEW JsonObject().
  183. oJsonMenu:READ(hDSmenu_structur).
  184. oJsonMenu:WRITE(lcJsonInhalt, FALSE).
  185. ii = INDEX(lcJsonInhalt, '[').
  186. lcJsonInhalt = SUBSTRING(lcJsonInhalt, ii).
  187. ii = R-INDEX(lcJsonInhalt, ']').
  188. lcJsonInhalt = SUBSTRING(lcJsonInhalt,01,ii).
  189. MESSAGE STRING(lcJsonInhalt).
  190. lRetVal = TRUE.
  191. LEAVE.
  192. END.
  193. oBody = NEW STRING(lcJsonInhalt).
  194. WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
  195. // oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
  196. oWriter = NEW WebResponseWriter(oResponse).
  197. oWriter:Open().
  198. oWriter:Close().
  199. RETURN 0.
  200. CATCH e AS Progress.Lang.Error:
  201. END CATCH.
  202. FINALLY:
  203. END FINALLY.
  204. END METHOD.
  205. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  206. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  207. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  208. RETURN result.
  209. END METHOD.
  210. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  211. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  212. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  213. RETURN result.
  214. END METHOD.
  215. /*------------------------------------------------------------------------------
  216. Purpose:
  217. Notes:
  218. ------------------------------------------------------------------------------*/
  219. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  220. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  221. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  222. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  223. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  224. DEFINE VARIABLE oMessage AS JsonObject NO-UNDO.
  225. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  226. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  227. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  228. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  229. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  230. DEFINE VARIABLE lcErrorMessage AS LONGCHAR NO-UNDO.
  231. DEFINE VARIABLE lError AS LOGICAL NO-UNDO.
  232. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  233. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  234. oHeader = poRequest:GetHeader('X-COMPANY').
  235. ccompany = oHeader:VALUE.
  236. oHeader = poRequest:GetHeader('X-USER-NAME').
  237. cuser_name = oHeader:VALUE.
  238. oHeader = poRequest:GetHeader('X-DISPLAY-NAME').
  239. cAnzeigeName = oHeader:VALUE.
  240. oHeader = poRequest:GetHeader('X-LANGUAGE-ID').
  241. ilanguage_id = INTEGER(oHeader:VALUE).
  242. oHeader = poRequest:GetHeader('X-SESSION-TOKEN').
  243. cSessionToken = oHeader:VALUE.
  244. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  245. MESSAGE 'getJsonFromRequest = ' lRetVal.
  246. oJsonData:WRITE(lcJsonString, FALSE).
  247. MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
  248. MESSAGE ccompany '-' cuser_name '-' cSessionToken.
  249. lcErrorMessage = ''.
  250. lError = FALSE.
  251. outilitiesHandler = NEW utilitiesHandler().
  252. DO WHILE TRUE:
  253. FIND FIRST users NO-LOCK
  254. WHERE users.user_name = cuser_name NO-ERROR.
  255. /* IF NOT AVAILABLE users THEN */
  256. /* DO: */
  257. /* lError = TRUE. */
  258. /* outilitiesHandler:getErrorMessage ( */
  259. /* INPUT '1990', */
  260. /* INPUT 1 , /* Sprcd*/ */
  261. /* INPUT '' , /* Parameter */*/
  262. /* OUTPUT lcMessage */
  263. /* ). */
  264. /* LEAVE. */
  265. /* END. */
  266. ilanguage_id = users.language_id.
  267. /* IF users.password <> cPassword THEN */
  268. /* DO: */
  269. /* lError = TRUE. */
  270. /* outilitiesHandler:getErrorMessage ( */
  271. /* INPUT '1992', */
  272. /* INPUT ilanguage_id, /* Sprcd*/ */
  273. /* INPUT '' , /* Parameter */*/
  274. /* OUTPUT lcMessage */
  275. /* ). */
  276. /* LEAVE. */
  277. /* END. */
  278. FIND FIRST userauthorization NO-LOCK
  279. WHERE userauthorization.company = ccompany
  280. AND userauthorization.user_name = cuser_name NO-ERROR.
  281. /* IF NOT AVAILABLE userauthorization THEN */
  282. /* DO: */
  283. /* lError = TRUE. */
  284. /* outilitiesHandler:getErrorMessage ( */
  285. /* INPUT '1991' , */
  286. /* INPUT ilanguage_id, /* Sprcd*/ */
  287. /* INPUT '' , /* Parameter */*/
  288. /* OUTPUT lcMessage */
  289. /* ). */
  290. /* LEAVE. */
  291. /* END. */
  292. /* REPEAT TRANSACTION ON ERROR UNDO, LEAVE: */
  293. /* FIND FIRST userdata NO-LOCK */
  294. /* WHERE userdata.user_name = cuser_name */
  295. /* AND userdata.record_type = 'LOGIN' */
  296. /* AND userdata.key_type = 'company' NO-ERROR.*/
  297. /* IF NOT AVAILABLE userdata THEN */
  298. /* DO: */
  299. /* CREATE userdata. */
  300. /* ASSIGN */
  301. /* userdata.user_name = cuser_name */
  302. /* userdata.record_type = 'LOGIN' */
  303. /* userdata.key_type = 'company'. */
  304. /* END. */
  305. /* ASSIGN */
  306. /* userdata.cfield_1 = ccompany */
  307. /* userdata.cfield_2 = cuser_name. */
  308. /* RELEASE userdata. */
  309. /* LEAVE. */
  310. /* END. */
  311. oResponse = NEW OpenEdge.Web.WebResponse().
  312. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  313. oResponse:ContentType = "application/json;charset=utf-8".
  314. oWriter = NEW WebResponseWriter(oResponse).
  315. oJsonResponse = NEW JsonObject().
  316. oJsonResponse:ADD('success' , TRUE ).
  317. oJsonResponse:ADD('session_token', cSessionToken).
  318. oJsonResponse:ADD('company' , ccompany ).
  319. oJsonResponse:ADD('user_name' , cuser_name ).
  320. oJsonResponse:ADD('language_id' , ilanguage_id ).
  321. oJsonResponse:WRITE(lcJsonString, FALSE).
  322. MESSAGE 'Rückmeldung ' STRING(lcJsonString).
  323. oWriter:Open().
  324. oWriter:Write(lcJsonString).
  325. oWriter:Close().
  326. RETURN 0.
  327. END.
  328. MESSAGE 'Meldung von getErrorMessage ' STRING(lcMessage).
  329. oResponse = NEW OpenEdge.Web.WebResponse().
  330. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  331. oResponse:ContentType = "application/json;charset=utf-8".
  332. oWriter = NEW WebResponseWriter(oResponse).
  333. oParser = NEW ObjectModelParser().
  334. oJsonResponse = NEW JsonObject().
  335. oJsonResponse:ADD('success', FALSE).
  336. oJsonResponse:ADD('message', 'ungültiger users oder ungültiges Passwort!') NO-ERROR.
  337. oJsonResponse:WRITE(lcJsonString, TRUE).
  338. MESSAGE 'Rückmeldung ' STRING(lcJsonString).
  339. oWriter:Open().
  340. oWriter:Write(lcJsonString).
  341. oWriter:Close().
  342. RETURN 0.
  343. CATCH e AS Progress.Lang.Error:
  344. END CATCH.
  345. FINALLY:
  346. DELETE OBJECT oParser NO-ERROR.
  347. END FINALLY.
  348. END METHOD.
  349. /*------------------------------------------------------------------------------
  350. Purpose:
  351. Notes:
  352. ------------------------------------------------------------------------------*/
  353. METHOD PUBLIC LOGICAL POSTDATAFILLDS(
  354. INPUT iphDS AS HANDLE
  355. ):
  356. RETURN TRUE.
  357. END METHOD.
  358. END CLASS.