bestellung_abschliessen.p 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. /*------------------------------------------------------------------------
  2. File : bestellung_abschliessen.p
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Mon Apr 12 17:48:02 CEST 2021
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. /* *************************** Definitions ************************** */
  11. USING OpenEdge.Net.HTTP.*.
  12. USING OpenEdge.Net.URI.
  13. USING OpenEdge.Core.*.
  14. DEFINE INPUT PARAMETER ipcFirma AS CHARACTER NO-UNDO.
  15. DEFINE INPUT PARAMETER ipiBesnr AS INTEGER NO-UNDO.
  16. DEFINE OUTPUT PARAMETER opcRetVal AS CHARACTER NO-UNDO.
  17. /*DEFINE VARIABLE ipcFirma AS CHARACTER NO-UNDO INIT '1000'.*/
  18. /*DEFINE VARIABLE ipiBesnr AS INTEGER NO-UNDO INIT 146436.*/
  19. /*DEFINE VARIABLE opcRetVal AS CHARACTER NO-UNDO INIT ''. */
  20. { properties.i }
  21. DEFINE TEMP-TABLE tBesko LIKE Besko.
  22. DEFINE VARIABLE htBesko AS HANDLE NO-UNDO.
  23. htBesko = TEMP-TABLE tBesko:DEFAULT-BUFFER-HANDLE.
  24. DEFINE VARIABLE cProgname AS CHARACTER NO-UNDO.
  25. DEFINE VARIABLE cLogFile AS CHARACTER NO-UNDO.
  26. DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
  27. DEFINE VARIABLE cDateiname AS CHARACTER NO-UNDO.
  28. DEFINE VARIABLE cMailInhalt AS CHARACTER NO-UNDO.
  29. DEFINE VARIABLE rBesko AS RECID NO-UNDO.
  30. DEFINE VARIABLE lVerschieben AS LOGICAL NO-UNDO.
  31. DEFINE VARIABLE lSuper AS LOGICAL NO-UNDO.
  32. DEFINE BUFFER bBesko FOR Besko.
  33. DEFINE BUFFER bBesze FOR Besze.
  34. DEFINE BUFFER bBesEing FOR BesEing.
  35. { ttsendmail.i }
  36. /* ******************** Preprocessor Definitions ******************** */
  37. /* ************************ Function Prototypes ********************** */
  38. FUNCTION createMailDaten RETURNS LOGICAL
  39. ( ) FORWARD.
  40. FUNCTION startMailAnEinkauf RETURNS LOGICAL
  41. () FORWARD.
  42. FUNCTION verschiebenBestellung RETURNS LOGICAL
  43. ( ) FORWARD.
  44. /* *************************** Main Block *************************** */
  45. lSuper = DYNAMIC-FUNCTION ('getSuperAktiv':U) NO-ERROR.
  46. IF lSuper = ? THEN lSuper = FALSE.
  47. IF NOT lSuper THEN
  48. DO:
  49. { super/funktionen.i }
  50. DEFINE VARIABLE cAnmeldung AS CHARACTER NO-UNDO.
  51. cAnmeldung = SUBSTITUTE('SYSTEM&1SYSTEM&11000', CHR(01)).
  52. RUN ANMELDUNG ( cAnmeldung ).
  53. END.
  54. opcRetVal = ''.
  55. RUN ANMELDEN.
  56. IF opcRetVal = 'ERROR' THEN RETURN.
  57. lVerschieben = IF RETURN-VALUE = '' THEN TRUE ELSE FALSE.
  58. DYNAMIC-FUNCTION ('startMailAnEinkauf':U).
  59. DYNAMIC-FUNCTION ('createMailDaten':U).
  60. /* RUN SendMailStart.p.*/
  61. FIND bBesko NO-LOCK WHERE RECID(bBesko) = rBesko.
  62. IF lVerschieben THEN DYNAMIC-FUNCTION ('verschiebenBestellung':U).
  63. /* ********************** Internal Procedures *********************** */
  64. PROCEDURE ANMELDEN:
  65. /*------------------------------------------------------------------------------*/
  66. /* Purpose: */
  67. /* Notes: */
  68. /*------------------------------------------------------------------------------*/
  69. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  70. cLogFile = DYNAMIC-FUNCTION ('getLogFilePfad':U) NO-ERROR.
  71. cProgname = THIS-PROCEDURE:NAME.
  72. ii = R-INDEX(cProgName, '\').
  73. IF ii = 0 THEN ii = R-INDEX(cProgName, '/').
  74. IF ii > 0 THEN cProgname = TRIM(SUBSTRING(cProgname,ii + 1)).
  75. cProgname = ENTRY(1, cProgname, '.').
  76. cLogFile = cLogFile + SUBSTITUTE('&1.log', cProgname).
  77. RUN 'writeLogfile.p' (cProgname, cLogFile, SUBSTITUTE('Programm &1 gestartet', cProgname) ).
  78. lActive = DYNAMIC-FUNCTION ('getSuperAktiv':U) NO-ERROR.
  79. IF lActive = ? THEN lActive = FALSE.
  80. IF NOT lActive THEN
  81. DO:
  82. RUN 'writeLogfile.p' (cProgname, cLogFile, SUBSTITUTE('Programm &1 konnte sich nicht anmelden', cProgname) ).
  83. opcRetVal = 'ERROR'.
  84. RETURN.
  85. END.
  86. FIND bBesko NO-LOCK
  87. WHERE bBesko.Firma = ipcFirma
  88. AND bBesko.Besnr = ipiBesnr NO-ERROR.
  89. IF NOT AVAILABLE bBesko THEN
  90. DO:
  91. RUN 'writeLogfile.p' (cProgname, cLogFile, SUBSTITUTE('Bestellnumer &1 konnte nicht gefunden werden', ipiBesnr) ).
  92. opcRetVal = 'ERROR'.
  93. RETURN.
  94. END.
  95. rBesko = RECID(bBesko).
  96. IF bBesko.Best_Sta <> 2 THEN
  97. DO:
  98. RUN 'writeLogfile.p' (cProgname, cLogFile, SUBSTITUTE('Bestellnumer &1 hat falschen Status, muss 2 sein!', bBesko.Best_Sta) ).
  99. opcRetVal = 'ERROR'.
  100. RETURN.
  101. END.
  102. ii = 0.
  103. FOR EACH bBesze NO-LOCK OF bBesko:
  104. IF bBesze.Artnr = 0 THEN NEXT.
  105. IF bBesze.Eingang <> 0 THEN ii = ii + 1.
  106. IF bBesze.lMutiert OR
  107. ABS(bBesze.MGeli) < (bBesze.Eingang) THEN RETURN 'MAIL'.
  108. IF NOT bBesze.lVerfall AND
  109. NOT bBesze.lLotnr THEN NEXT.
  110. FOR EACH bBesEing NO-LOCK OF bBesze:
  111. IF bBesze.lVerfall AND bBesEing.Verfall = ? THEN RETURN 'MAIL'.
  112. IF bBesze.lLotnr AND bBesEing.Lotnr = '' THEN RETURN 'MAIL'.
  113. END.
  114. END.
  115. IF ii = 0 THEN RETURN 'ERROR'.
  116. END PROCEDURE.
  117. /* ************************ Function Implementations ***************** */
  118. FUNCTION createMailDaten RETURNS LOGICAL
  119. ( ):
  120. /*------------------------------------------------------------------------------*/
  121. /* Purpose: */
  122. /* Notes: */
  123. /*------------------------------------------------------------------------------*/
  124. DEFINE VARIABLE cBody AS CHARACTER NO-UNDO.
  125. DEFINE VARIABLE cMailBody AS CHARACTER NO-UNDO.
  126. DEFINE VARIABLE cAnrede AS CHARACTER NO-UNDO.
  127. DEFINE VARIABLE cMailTo AS CHARACTER NO-UNDO.
  128. ASSIGN
  129. cMailTo = cMailToEinkauf
  130. cAnrede = cMailFromEinkauf.
  131. cMailBody = SUBSTITUTE('File:&1', cDateiName).
  132. CREATE ASMutation.
  133. ASSIGN
  134. ASMutation.asmutation_id = NEXT-VALUE(asmutation_id)
  135. ASMutation.MutArt = 'MAIL'
  136. ASMutation.Aktiv = TRUE
  137. ASMutation.cStatus = ''
  138. ASMutation.Datum = TODAY
  139. ASMutation.Firma = ipcFirma
  140. ASMutation.cFeld_1 = SUBSTITUTE('TO:&1;CC:wr@adaprime.ch', cMailTo )
  141. ASMutation.cFeld_2 = SUBSTITUTE('Bestellung Nr &1', bBesko.Besnr )
  142. ASMutation.cFeld_3 = cMailBody
  143. ASMutation.cKey_1 = ''
  144. ASMutation.cKey_2 = cDateiName.
  145. RELEASE ASMutation.
  146. END FUNCTION.
  147. FUNCTION startMailAnEinkauf RETURNS LOGICAL
  148. ( ) :
  149. /*------------------------------------------------------------------------------*/
  150. /* Purpose: */
  151. /* Notes: */
  152. /*------------------------------------------------------------------------------*/
  153. DEFINE VARIABLE oClient AS IHttpClient NO-UNDO.
  154. DEFINE VARIABLE oURI AS URI NO-UNDO.
  155. DEFINE VARIABLE oCredentials AS Credentials NO-UNDO.
  156. DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
  157. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  158. DEFINE VARIABLE oResponseBody AS String NO-UNDO.
  159. DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO.
  160. DEFINE VARIABLE fio AS LOG NO-UNDO.
  161. DEFINE VARIABLE cConn AS CHARACTER NO-UNDO.
  162. DEFINE VARIABLE iTime AS INTEGER NO-UNDO.
  163. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  164. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  165. DEFINE VARIABLE cPath AS CHARACTER NO-UNDO.
  166. DEFINE VARIABLE iAufnr AS INTEGER NO-UNDO.
  167. DEFINE VARIABLE xFirma AS CHARACTER NO-UNDO.
  168. DEFINE VARIABLE lRetVal AS LOG NO-UNDO.
  169. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  170. DEFINE VARIABLE cMails AS CHARACTER NO-UNDO.
  171. DEFINE VARIABLE cMail AS CHARACTER NO-UNDO.
  172. cDateiName = DYNAMIC-FUNCTION ('getLogFilePfad':U) NO-ERROR.
  173. cDateiName = SUBSTITUTE('&1MailAnEinkauf_&2_&3.html', cDateiName, ipcFirma, ipiBesnr).
  174. OS-DELETE VALUE(cDateiName) NO-ERROR.
  175. RUN writeLogFile.p (cProgname, cLogFile, SUBSTITUTE('Start Mailaufbereitung mit Datei &1', cDateiName) ).
  176. System.Net.ServicePointManager:CertificatePolicy = NEW AllowCertificatePolicy().
  177. oClient = ClientBuilder:Build():Client.
  178. oURI = NEW URI('http', cWebHost, INTEGER(cWebPort) ).
  179. cPath = '/'
  180. + cWebPath
  181. + REPLACE(SUBSTITUTE('/bestellung_mailbody_einkauf.p?Firma=&1£Besnr=&2', ipcFirma, STRING(ipiBesnr)), '£', '&').
  182. oURI:Path = cPath.
  183. oRequest = RequestBuilder:Build('POST', oURI):ContentType('application/x-www-form-urlencoded'):Request.
  184. oResponse = ResponseBuilder:Build():Response.
  185. oResponse = ClientBuilder:Build():Client:Execute(oRequest).
  186. oResponseBody = CAST(oResponse:Entity, OpenEdge.Core.STRING).
  187. lcString = oResponseBody:VALUE.
  188. COPY-LOB lcString TO FILE cDateiName APPEND NO-CONVERT.
  189. IF VALID-OBJECT(oURI) THEN DELETE OBJECT oURI .
  190. IF VALID-OBJECT(oClient) THEN DELETE OBJECT oClient.
  191. RETURN TRUE.
  192. END FUNCTION.
  193. FUNCTION verschiebenBestellung RETURNS LOGICAL
  194. ( ):
  195. /*------------------------------------------------------------------------------*/
  196. /* Purpose: */
  197. /* Notes: */
  198. /* Parameters : */
  199. /*------------------------------------------------------------------------------*/
  200. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO INIT FALSE.
  201. DEFINE VARIABLE dBuchdatum AS DATE NO-UNDO INIT TODAY.
  202. DEFINE VARIABLE nTotale AS DECIMAL NO-UNDO EXTENT 10.
  203. DEFINE VARIABLE nTotal AS DECIMAL NO-UNDO.
  204. DEFINE VARIABLE lKomplett AS LOGICAL NO-UNDO.
  205. DEFINE VARIABLE lEingelagert AS LOGICAL NO-UNDO.
  206. DYNAMIC-FUNCTION ('setBatch':U, TRUE).
  207. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  208. FIND Besko NO-LOCK WHERE RECID(Besko) = rBesko.
  209. IF Besko.Lief_Datum = ? THEN Besko.Lief_Datum = TODAY.
  210. EMPTY TEMP-TABLE tBesko.
  211. CREATE tBesko.
  212. BUFFER-COPY Besko TO tBesko.
  213. RELEASE Besko.
  214. LEAVE.
  215. END.
  216. FIND FIRST tBesko.
  217. DYNAMIC-FUNCTION ('changeBestellStatus':U, INPUT-OUTPUT htBesko ) NO-ERROR.
  218. FIND FIRST tBesko.
  219. nTotal = DYNAMIC-FUNCTION ('calculateBeskoTotal':U, tBesko.Firma, tBesko.Besnr, OUTPUT nTotale ).
  220. DYNAMIC-FUNCTION ('setBatch':U, FALSE).
  221. RETURN TRUE.
  222. END FUNCTION.