usersImpl.cls 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  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. CLASS admin.usersImpl INHERITS WebHandler:
  23. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  24. DEFINE TEMP-TABLE tusers
  25. SERIALIZE-NAME 'users'
  26. FIELD id AS INT64 SERIALIZE-NAME 'id'
  27. FIELD username AS CHARACTER SERIALIZE-NAME 'username'
  28. FIELD password AS CHARACTER SERIALIZE-NAME 'password'
  29. FIELD firstname AS CHARACTER SERIALIZE-NAME 'firstname'
  30. FIELD lastname AS CHARACTER SERIALIZE-NAME 'lastname'
  31. FIELD email AS CHARACTER SERIALIZE-NAME 'email'
  32. FIELD displayname AS CHARACTER SERIALIZE-NAME 'displayname'
  33. FIELD role AS CHARACTER SERIALIZE-NAME 'role'
  34. FIELD language_id AS INTEGER SERIALIZE-NAME 'language_id'
  35. FIELD active AS LOGICAL SERIALIZE-NAME 'active'
  36. FIELD created_at AS CHARACTER SERIALIZE-NAME 'created_at'
  37. FIELD updated_at AS CHARACTER SERIALIZE-NAME 'updated_at'
  38. FIELD iStatus AS INTEGER SERIALIZE-HIDDEN
  39. .
  40. DEFINE VARIABLE htusers AS HANDLE NO-UNDO.
  41. DEFINE TEMP-TABLE tusersUpdate
  42. SERIALIZE-NAME 'users'
  43. FIELD id AS INT64 SERIALIZE-NAME 'id'
  44. FIELD username AS CHARACTER SERIALIZE-NAME 'username'
  45. FIELD password AS CHARACTER SERIALIZE-NAME 'password'
  46. FIELD firstname AS CHARACTER SERIALIZE-NAME 'firstname'
  47. FIELD lastname AS CHARACTER SERIALIZE-NAME 'lastname'
  48. FIELD email AS CHARACTER SERIALIZE-NAME 'email'
  49. FIELD displayname AS CHARACTER SERIALIZE-NAME 'displayname'
  50. FIELD role AS CHARACTER SERIALIZE-NAME 'role'
  51. FIELD language_id AS INTEGER SERIALIZE-NAME 'language_id'
  52. FIELD active AS LOGICAL SERIALIZE-NAME 'active'
  53. FIELD created_at AS CHARACTER SERIALIZE-NAME 'created_at'
  54. FIELD updated_at AS CHARACTER SERIALIZE-NAME 'updated_at'
  55. .
  56. DEFINE VARIABLE htusersUpdate AS HANDLE NO-UNDO.
  57. /*------------------------------------------------------------------------------
  58. Purpose:
  59. Notes:
  60. ------------------------------------------------------------------------------*/
  61. METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
  62. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  63. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  64. DEFINE VARIABLE oBody AS String NO-UNDO.
  65. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  66. DEFINE VARIABLE cDefautlCharSet AS CHARACTER NO-UNDO INIT 'UTF-8'.
  67. DEFINE VARIABLE cCorralationID AS CHARACTER NO-UNDO.
  68. DEFINE VARIABLE cContent-Type AS CHARACTER NO-UNDO.
  69. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  70. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  71. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  72. DEFINE VARIABLE cMandant AS CHARACTER NO-UNDO.
  73. DEFINE VARIABLE cBenutzer AS CHARACTER NO-UNDO.
  74. DEFINE VARIABLE cAnzeigeName AS CHARACTER NO-UNDO.
  75. DEFINE VARIABLE iSprcd AS INTEGER NO-UNDO.
  76. DEFINE VARIABLE cSessionToken AS CHARACTER NO-UNDO.
  77. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  78. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  79. DEFINE VARIABLE cusername AS CHARACTER NO-UNDO.
  80. DEFINE VARIABLE language_id AS INTEGER NO-UNDO.
  81. DEFINE VARIABLE oJsonUsers AS JsonObject NO-UNDO.
  82. DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.
  83. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  84. DEFINE VARIABLE dDateTime AS DATETIME NO-UNDO.
  85. DEFINE VARIABLE cDateTime AS CHARACTER NO-UNDO.
  86. oHeader = poRequest:GetHeader('X-MANDANT-ID').
  87. cMandant = oHeader:VALUE.
  88. oHeader = poRequest:GetHeader('X-USERNAME').
  89. cBenutzer = oHeader:VALUE.
  90. oHeader = poRequest:GetHeader('X-USERDISPLAY').
  91. cAnzeigeName = oHeader:VALUE.
  92. oHeader = poRequest:GetHeader('X-LANGUAGE-ID').
  93. iSprcd = INTEGER(oHeader:VALUE).
  94. oHeader = poRequest:GetHeader('X-SESSION-TOKEN').
  95. cSessionToken = oHeader:VALUE.
  96. outilitiesHandler = NEW utilitiesHandler().
  97. DEFINE BUFFER busers FOR users.
  98. cFunction = poRequest:URI:GetQueryValue("function") NO-ERROR.
  99. cusername = poRequest:URI:GetQueryValue("username") NO-ERROR.
  100. MESSAGE 'Function = ' cFunction 'username = ' cusername.
  101. EMPTY TEMP-TABLE tusers.
  102. EMPTY TEMP-TABLE tusersupdate.
  103. DO WHILE cFunction = 'init':
  104. FOR EACH users NO-LOCK:
  105. CREATE tusers.
  106. BUFFER-COPY users
  107. EXCEPT users.created_at users.updated_at
  108. TO tusers
  109. ASSIGN
  110. tusers.created_at = outilitiesHandler:getCharDateTime( users.created_at )
  111. tusers.updated_at = outilitiesHandler:getCharDateTime( users.updated_at ).
  112. END.
  113. lRetVal = TRUE.
  114. LEAVE.
  115. END.
  116. /* EMPTY TEMP-TABLE tusers. */
  117. /* FIND FIRST users NO-LOCK */
  118. /* WHERE users.username = cusername */
  119. /* AND users.language_id = iSprcd NO-ERROR. */
  120. /* IF NOT AVAILABLE users THEN */
  121. /* DO: */
  122. /* FIND FIRST users NO-LOCK */
  123. /* WHERE users.mandant = cMandant */
  124. /* AND users.username = 'admin' */
  125. /* AND users.language_id = iSprcd NO-ERROR. */
  126. /* IF AVAILABLE users THEN */
  127. /* DO: */
  128. /* FOR EACH users NO-LOCK */
  129. /* WHERE users.mandant = cMandant */
  130. /* AND users.username = 'admin' */
  131. /* AND users.language_id = iSprcd: */
  132. /* CREATE busers. */
  133. /* BUFFER-COPY users */
  134. /* EXCEPT users */
  135. /* TO busers */
  136. /* ASSIGN */
  137. /* busers.username = cusername */
  138. /* busers.erstellt_am = NOW */
  139. /* . */
  140. /* END. */
  141. /* END. */
  142. /* END. */
  143. /* FOR EACH users NO-LOCK */
  144. /* WHERE users.mandant = cMandant */
  145. /* AND users.username = cusername */
  146. /* AND users.language_id = iSprcd: */
  147. /* */
  148. /* CREATE tusers. */
  149. /* BUFFER-COPY users */
  150. /* EXCEPT erstellt_am mutiert_am */
  151. /* TO tusers. */
  152. /* ASSIGN */
  153. /* tusers.cId = SUBSTITUTE('&1&2&3', STRING(users.stufe1,'9999'), STRING(users.stufe2,'9999'), STRING(users.stufe3,'9999') ).*/
  154. /* */
  155. /* dDateTime = (IF users.erstellt_am <> ? THEN users.erstellt_am ELSE NOW). */
  156. /* cDateTime = STRING(dDateTime,'99-99-9999THH:MM:SS'). */
  157. /* tusers.erstellt_am = STRING(YEAR(dDateTime),'9999') */
  158. /* + '-' */
  159. /* + STRING(MONTH(dDateTime),'99') */
  160. /* + '-' */
  161. /* + STRING(DAY(dDateTime),'99') */
  162. /* + SUBSTRING(cDateTime,11). */
  163. /* dDateTime = (IF users.mutiert_am <> ? THEN users.mutiert_am ELSE NOW). */
  164. /* cDateTime = STRING(dDateTime,'99-99-9999THH:MM:SS'). */
  165. /* tusers.mutiert_am = STRING(YEAR(dDateTime),'9999') */
  166. /* + '-' */
  167. /* + STRING(MONTH(dDateTime),'99') */
  168. /* + '-' */
  169. /* + STRING(DAY(dDateTime),'99') */
  170. /* + SUBSTRING(cDateTime,11). */
  171. /* END. */
  172. htusers = TEMP-TABLE tusers:DEFAULT-BUFFER-HANDLE.
  173. cContent-Type = "application/json".
  174. cDefautlCharSet = 'utf-8'.
  175. oJsonResponse = NEW JsonObject().
  176. oParser = NEW ObjectModelParser().
  177. oJsonUsers = NEW JsonObject().
  178. htusers:WRITE-JSON('JsonObject', oJsonUsers).
  179. oBody = NEW STRING(oJsonUsers:GetJsonText()).
  180. WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
  181. // oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
  182. oWriter = NEW WebResponseWriter(oResponse).
  183. oWriter:Open().
  184. oWriter:Close().
  185. RETURN 0.
  186. CATCH e AS Progress.Lang.Error:
  187. END CATCH.
  188. FINALLY:
  189. END FINALLY.
  190. END METHOD.
  191. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  192. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  193. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  194. RETURN result.
  195. END METHOD.
  196. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  197. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  198. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  199. RETURN result.
  200. END METHOD.
  201. /*------------------------------------------------------------------------------
  202. Purpose:
  203. Notes:
  204. ------------------------------------------------------------------------------*/
  205. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  206. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  207. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  208. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  209. DEFINE VARIABLE oJsonUsers AS JsonArray NO-UNDO.
  210. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  211. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  212. DEFINE VARIABLE oFelder AS JsonArray NO-UNDO.
  213. DEFINE VARIABLE oFeld AS JsonObject NO-UNDO.
  214. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  215. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  216. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  217. DEFINE VARIABLE cJSON AS LONGCHAR NO-UNDO.
  218. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  219. DEFINE VARIABLE cTabellen AS CHARACTER NO-UNDO.
  220. DEFINE VARIABLE cMandant AS CHARACTER NO-UNDO.
  221. DEFINE VARIABLE cusername AS CHARACTER NO-UNDO.
  222. DEFINE VARIABLE iSprcd AS INTEGER NO-UNDO.
  223. DEFINE VARIABLE cMaskenId AS CHARACTER NO-UNDO.
  224. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  225. oJsonData:WRITE(lcJsonString, FALSE).
  226. MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
  227. cMandant = oJsonData:GetCharacter('customer_id' ).
  228. cusername = oJsonData:GetCharacter('user_id' ).
  229. iSprcd = INTEGER(oJsonData:GetCharacter('language_id')).
  230. MESSAGE 'HANDLE POST ' cMandant '-' cusername '-' iSprcd.
  231. /*
  232. oParser = NEW ObjectModelParser().
  233. oJsonUsers = NEW JsonArray().
  234. oJsonResponse = NEW JsonObject().
  235. lcJsonString = oJsonData:GetJsonText('menuItems').
  236. oJsonUsers = CAST(oParser:Parse(lcJsonString), JsonArray) NO-ERROR.
  237. oJsonResponse:ADD('menuItems', oJsonUsers).
  238. htusersUpdate = TEMP-TABLE tusersUpdate:DEFAULT-BUFFER-HANDLE.
  239. htusersUpdate:READ-JSON ('JsonObject', oJsonResponse, 'EMPTY').
  240. /* oJsonResponse:WRITE(lcJsonString, FALSE). */
  241. /* htusersUpdate:READ-JSON ('longchar', lcJsonString, 'EMPTY').*/
  242. EMPTY TEMP-TABLE tusers.
  243. FOR EACH users NO-LOCK
  244. WHERE users.mandant = cMandant
  245. AND users.username = cusername
  246. AND users.language_id = iSprcd:
  247. CREATE tusers.
  248. BUFFER-COPY users
  249. EXCEPT erstellt_am mutiert_am
  250. TO tusers
  251. ASSIGN
  252. tusers.istatus = 0.
  253. END.
  254. FOR EACH tusersUpdate:
  255. FIND tusers
  256. WHERE tusers.mandant = cMandant
  257. AND tusers.username = cusername
  258. AND tusers.language_id = isprcd
  259. AND tusers.stufe1 = tusersUpdate.stufe1
  260. AND tusers.stufe2 = tusersUpdate.stufe2
  261. AND tusers.stufe3 = tusersUpdate.stufe3 NO-ERROR.
  262. IF NOT AVAILABLE tusers THEN
  263. DO:
  264. CREATE tusers.
  265. BUFFER-COPY tusersUpdate
  266. EXCEPT Mandant users sprcd erstellt_am mutiert_am
  267. TO tusers
  268. ASSIGN
  269. tusers.mandant = cMandant
  270. tusers.username = cusername
  271. tusers.language_id = iSprcd
  272. tusers.iStatus = 1.
  273. NEXT.
  274. END.
  275. BUFFER-COPY tusersUpdate
  276. EXCEPT Mandant users sprcd erstellt_am mutiert_am
  277. TO tusers
  278. ASSIGN
  279. tusers.istatus = 2.
  280. END.
  281. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  282. FOR EACH tusers:
  283. IF tusers.istatus = 1 THEN
  284. DO:
  285. CREATE users.
  286. BUFFER-COPY tusers
  287. EXCEPT erstellt_am mutiert_am istatus
  288. TO users
  289. ASSIGN
  290. users.erstellt_am = NOW
  291. users.mutiert_am = ?.
  292. END.
  293. FIND users OF tusers.
  294. IF tusers.istatus = 0 THEN
  295. DO:
  296. DELETE users.
  297. NEXT.
  298. END.
  299. ASSIGN
  300. users.menutext = tusers.menutext
  301. users.menulink = tusers.menulink
  302. users.mutiert_am = NOW.
  303. END.
  304. RELEASE users.
  305. LEAVE.
  306. END.
  307. OUTPUT TO 'C:\TEMP\users.csv' NO-MAP NO-CONVERT.
  308. FOR EACH users NO-LOCK:
  309. EXPORT DELIMITER ';' users.
  310. END.
  311. OUTPUT CLOSE.
  312. oResponse = NEW OpenEdge.Web.WebResponse().
  313. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  314. oResponse:ContentType = "application/json;charset=utf-8".
  315. oWriter = NEW WebResponseWriter(oResponse).
  316. oJsonMessage = NEW JsonObject().
  317. oJsonMessage:ADD('success', TRUE).
  318. oJsonMessage:WRITE(lcJsonString, TRUE).
  319. MESSAGE 'Rückmeldung ' STRING(lcJsonString).
  320. oWriter:Open().
  321. oWriter:Write(lcJsonString).
  322. oWriter:Close().
  323. */
  324. CATCH e AS Progress.Lang.Error:
  325. END CATCH.
  326. FINALLY:
  327. /* DELETE OBJECT oJsonConfig. */
  328. /* DELETE OBJECT oJsonMessage.*/
  329. END FINALLY.
  330. END METHOD.
  331. END CLASS.