/*------------------------------------------------------------------------ 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.