| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- /*------------------------------------------------------------------------
- File : bestellung_abschliessen.p
- Purpose :
- Syntax :
- Description :
- Author(s) : walter.riechsteiner
- Created : Mon Apr 12 17:48:02 CEST 2021
- Notes :
- ----------------------------------------------------------------------*/
- /* *************************** Definitions ************************** */
- USING OpenEdge.Net.HTTP.*.
- USING OpenEdge.Net.URI.
- USING OpenEdge.Core.*.
- DEFINE INPUT PARAMETER ipcFirma AS CHARACTER NO-UNDO.
- DEFINE INPUT PARAMETER ipiBesnr AS INTEGER NO-UNDO.
- DEFINE OUTPUT PARAMETER opcRetVal AS CHARACTER NO-UNDO.
- /*DEFINE VARIABLE ipcFirma AS CHARACTER NO-UNDO INIT '1000'.*/
- /*DEFINE VARIABLE ipiBesnr AS INTEGER NO-UNDO INIT 146436.*/
- /*DEFINE VARIABLE opcRetVal AS CHARACTER NO-UNDO INIT ''. */
- { properties.i }
- DEFINE TEMP-TABLE tBesko LIKE Besko.
- DEFINE VARIABLE htBesko AS HANDLE NO-UNDO.
- htBesko = TEMP-TABLE tBesko:DEFAULT-BUFFER-HANDLE.
- DEFINE VARIABLE cProgname AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cLogFile AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
- DEFINE VARIABLE cDateiname AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cMailInhalt AS CHARACTER NO-UNDO.
- DEFINE VARIABLE rBesko AS RECID NO-UNDO.
- DEFINE VARIABLE lVerschieben AS LOGICAL NO-UNDO.
- DEFINE VARIABLE lSuper AS LOGICAL NO-UNDO.
- DEFINE BUFFER bBesko FOR Besko.
- DEFINE BUFFER bBesze FOR Besze.
- DEFINE BUFFER bBesEing FOR BesEing.
- { ttsendmail.i }
- /* ******************** Preprocessor Definitions ******************** */
- /* ************************ Function Prototypes ********************** */
- FUNCTION createMailDaten RETURNS LOGICAL
- ( ) FORWARD.
- FUNCTION startMailAnEinkauf RETURNS LOGICAL
- () FORWARD.
- FUNCTION verschiebenBestellung RETURNS LOGICAL
- ( ) FORWARD.
- /* *************************** Main Block *************************** */
- lSuper = DYNAMIC-FUNCTION ('getSuperAktiv':U) NO-ERROR.
- IF lSuper = ? THEN lSuper = FALSE.
- IF NOT lSuper THEN
- DO:
- { super/funktionen.i }
- DEFINE VARIABLE cAnmeldung AS CHARACTER NO-UNDO.
- cAnmeldung = SUBSTITUTE('SYSTEM&1SYSTEM&11000', CHR(01)).
- RUN ANMELDUNG ( cAnmeldung ).
- END.
- opcRetVal = ''.
- RUN ANMELDEN.
- IF opcRetVal = 'ERROR' THEN RETURN.
- lVerschieben = IF RETURN-VALUE = '' THEN TRUE ELSE FALSE.
- DYNAMIC-FUNCTION ('startMailAnEinkauf':U).
- DYNAMIC-FUNCTION ('createMailDaten':U).
- /* RUN SendMailStart.p.*/
- FIND bBesko NO-LOCK WHERE RECID(bBesko) = rBesko.
- IF lVerschieben THEN DYNAMIC-FUNCTION ('verschiebenBestellung':U).
- /* ********************** Internal Procedures *********************** */
- PROCEDURE ANMELDEN:
- /*------------------------------------------------------------------------------*/
- /* Purpose: */
- /* Notes: */
- /*------------------------------------------------------------------------------*/
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
-
- cLogFile = DYNAMIC-FUNCTION ('getLogFilePfad':U) NO-ERROR.
- cProgname = THIS-PROCEDURE:NAME.
- ii = R-INDEX(cProgName, '\').
- IF ii = 0 THEN ii = R-INDEX(cProgName, '/').
- IF ii > 0 THEN cProgname = TRIM(SUBSTRING(cProgname,ii + 1)).
- cProgname = ENTRY(1, cProgname, '.').
- cLogFile = cLogFile + SUBSTITUTE('&1.log', cProgname).
- RUN 'writeLogfile.p' (cProgname, cLogFile, SUBSTITUTE('Programm &1 gestartet', cProgname) ).
-
- lActive = DYNAMIC-FUNCTION ('getSuperAktiv':U) NO-ERROR.
- IF lActive = ? THEN lActive = FALSE.
- IF NOT lActive THEN
- DO:
- RUN 'writeLogfile.p' (cProgname, cLogFile, SUBSTITUTE('Programm &1 konnte sich nicht anmelden', cProgname) ).
- opcRetVal = 'ERROR'.
- RETURN.
- END.
- FIND bBesko NO-LOCK
- WHERE bBesko.Firma = ipcFirma
- AND bBesko.Besnr = ipiBesnr NO-ERROR.
- IF NOT AVAILABLE bBesko THEN
- DO:
- RUN 'writeLogfile.p' (cProgname, cLogFile, SUBSTITUTE('Bestellnumer &1 konnte nicht gefunden werden', ipiBesnr) ).
- opcRetVal = 'ERROR'.
- RETURN.
- END.
- rBesko = RECID(bBesko).
-
- IF bBesko.Best_Sta <> 2 THEN
- DO:
- RUN 'writeLogfile.p' (cProgname, cLogFile, SUBSTITUTE('Bestellnumer &1 hat falschen Status, muss 2 sein!', bBesko.Best_Sta) ).
- opcRetVal = 'ERROR'.
- RETURN.
- END.
-
- ii = 0.
- FOR EACH bBesze NO-LOCK OF bBesko:
- IF bBesze.Artnr = 0 THEN NEXT.
- IF bBesze.Eingang <> 0 THEN ii = ii + 1.
- IF bBesze.lMutiert OR
- ABS(bBesze.MGeli) < (bBesze.Eingang) THEN RETURN 'MAIL'.
- IF NOT bBesze.lVerfall AND
- NOT bBesze.lLotnr THEN NEXT.
- FOR EACH bBesEing NO-LOCK OF bBesze:
- IF bBesze.lVerfall AND bBesEing.Verfall = ? THEN RETURN 'MAIL'.
- IF bBesze.lLotnr AND bBesEing.Lotnr = '' THEN RETURN 'MAIL'.
- END.
- END.
- IF ii = 0 THEN RETURN 'ERROR'.
-
- END PROCEDURE.
- /* ************************ Function Implementations ***************** */
- FUNCTION createMailDaten RETURNS LOGICAL
- ( ):
- /*------------------------------------------------------------------------------*/
- /* Purpose: */
- /* Notes: */
- /*------------------------------------------------------------------------------*/
- DEFINE VARIABLE cBody AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cMailBody AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cAnrede AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cMailTo AS CHARACTER NO-UNDO.
-
- ASSIGN
- cMailTo = cMailToEinkauf
- cAnrede = cMailFromEinkauf.
-
- cMailBody = SUBSTITUTE('File:&1', cDateiName).
- CREATE ASMutation.
- ASSIGN
- ASMutation.asmutation_id = NEXT-VALUE(asmutation_id)
- ASMutation.MutArt = 'MAIL'
- ASMutation.Aktiv = TRUE
- ASMutation.cStatus = ''
- ASMutation.Datum = TODAY
- ASMutation.Firma = ipcFirma
- ASMutation.cFeld_1 = SUBSTITUTE('TO:&1;CC:wr@adaprime.ch', cMailTo )
- ASMutation.cFeld_2 = SUBSTITUTE('Bestellung Nr &1', bBesko.Besnr )
- ASMutation.cFeld_3 = cMailBody
- ASMutation.cKey_1 = ''
- ASMutation.cKey_2 = cDateiName.
- RELEASE ASMutation.
- END FUNCTION.
- FUNCTION startMailAnEinkauf RETURNS LOGICAL
- ( ) :
- /*------------------------------------------------------------------------------*/
- /* Purpose: */
- /* Notes: */
- /*------------------------------------------------------------------------------*/
- DEFINE VARIABLE oClient AS IHttpClient NO-UNDO.
- DEFINE VARIABLE oURI AS URI NO-UNDO.
- DEFINE VARIABLE oCredentials AS Credentials NO-UNDO.
-
- DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
- DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
- DEFINE VARIABLE oResponseBody AS String NO-UNDO.
- DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO.
- DEFINE VARIABLE fio AS LOG NO-UNDO.
- DEFINE VARIABLE cConn AS CHARACTER NO-UNDO.
- DEFINE VARIABLE iTime AS INTEGER NO-UNDO.
- DEFINE VARIABLE ix AS INTEGER NO-UNDO.
- DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cPath AS CHARACTER NO-UNDO.
- DEFINE VARIABLE iAufnr AS INTEGER NO-UNDO.
- DEFINE VARIABLE xFirma AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lRetVal AS LOG NO-UNDO.
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
- DEFINE VARIABLE cMails AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cMail AS CHARACTER NO-UNDO.
-
- cDateiName = DYNAMIC-FUNCTION ('getLogFilePfad':U) NO-ERROR.
- cDateiName = SUBSTITUTE('&1MailAnEinkauf_&2_&3.html', cDateiName, ipcFirma, ipiBesnr).
- OS-DELETE VALUE(cDateiName) NO-ERROR.
-
- RUN writeLogFile.p (cProgname, cLogFile, SUBSTITUTE('Start Mailaufbereitung mit Datei &1', cDateiName) ).
- System.Net.ServicePointManager:CertificatePolicy = NEW AllowCertificatePolicy().
- oClient = ClientBuilder:Build():Client.
- oURI = NEW URI('http', cWebHost, INTEGER(cWebPort) ).
- cPath = '/'
- + cWebPath
- + REPLACE(SUBSTITUTE('/bestellung_mailbody_einkauf.p?Firma=&1£Besnr=&2', ipcFirma, STRING(ipiBesnr)), '£', '&').
- oURI:Path = cPath.
- oRequest = RequestBuilder:Build('POST', oURI):ContentType('application/x-www-form-urlencoded'):Request.
- oResponse = ResponseBuilder:Build():Response.
- oResponse = ClientBuilder:Build():Client:Execute(oRequest).
- oResponseBody = CAST(oResponse:Entity, OpenEdge.Core.STRING).
- lcString = oResponseBody:VALUE.
- COPY-LOB lcString TO FILE cDateiName APPEND NO-CONVERT.
-
- IF VALID-OBJECT(oURI) THEN DELETE OBJECT oURI .
- IF VALID-OBJECT(oClient) THEN DELETE OBJECT oClient.
-
- RETURN TRUE.
-
- END FUNCTION.
- FUNCTION verschiebenBestellung RETURNS LOGICAL
- ( ):
- /*------------------------------------------------------------------------------*/
- /* Purpose: */
- /* Notes: */
- /* Parameters : */
- /*------------------------------------------------------------------------------*/
- DEFINE VARIABLE lOK AS LOGICAL NO-UNDO INIT FALSE.
- DEFINE VARIABLE dBuchdatum AS DATE NO-UNDO INIT TODAY.
- DEFINE VARIABLE nTotale AS DECIMAL NO-UNDO EXTENT 10.
- DEFINE VARIABLE nTotal AS DECIMAL NO-UNDO.
- DEFINE VARIABLE lKomplett AS LOGICAL NO-UNDO.
- DEFINE VARIABLE lEingelagert AS LOGICAL NO-UNDO.
- DYNAMIC-FUNCTION ('setBatch':U, TRUE).
- REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
- FIND Besko NO-LOCK WHERE RECID(Besko) = rBesko.
- IF Besko.Lief_Datum = ? THEN Besko.Lief_Datum = TODAY.
- EMPTY TEMP-TABLE tBesko.
- CREATE tBesko.
- BUFFER-COPY Besko TO tBesko.
- RELEASE Besko.
- LEAVE.
- END.
-
- FIND FIRST tBesko.
- DYNAMIC-FUNCTION ('changeBestellStatus':U, INPUT-OUTPUT htBesko ) NO-ERROR.
- FIND FIRST tBesko.
- nTotal = DYNAMIC-FUNCTION ('calculateBeskoTotal':U, tBesko.Firma, tBesko.Besnr, OUTPUT nTotale ).
-
- DYNAMIC-FUNCTION ('setBatch':U, FALSE).
-
- RETURN TRUE.
-
- END FUNCTION.
|