/*------------------------------------------------------------------------ File : ddabsatzzahlen.p Purpose : Syntax : Description : Author(s) : walter.riechsteiner Created : Wed Jun 23 09:36:53 CEST 2021 Notes : ----------------------------------------------------------------------*/ /* *************************** Definitions ************************** */ USING OpenEdge.Core.Collections.List FROM PROPATH. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH. USING src.ch.adprime.api.digitaldrink.DigitalDrinkHandler FROM PROPATH. USING src.ch.adprime.api.digitaldrink.beans.Customer FROM PROPATH. USING src.ch.adprime.api.digitaldrink.beans.Manufacturer FROM PROPATH. USING src.ch.adprime.api.digitaldrink.beans.AbsatzAbschluss FROM PROPATH. USING src.ch.adprime.api.digitaldrink.beans.Parameter FROM PROPATH. USING src.ch.adprime.api.digitaldrink.beans.ResponseStatus FROM PROPATH. USING src.ch.adprime.api.digitaldrink.beans.Sale FROM PROPATH. USING src.ch.adprime.api.digitaldrink.control.AbsatzdatenImport FROM PROPATH. USING src.ch.adprime.api.digitaldrink.control.AbsatzAbschlussImport FROM PROPATH. USING src.ch.adprime.api.digitaldrink.incl.BusinessType FROM PROPATH. USING src.ch.adprime.api.digitaldrink.incl.SalesUnit FROM PROPATH. USING src.ch.adprime.api.digitaldrink.incl.Type FROM PROPATH. DEFINE INPUT PARAMETER ipdVonDatum AS DATE NO-UNDO. DEFINE INPUT PARAMETER ipdBisDatum AS DATE NO-UNDO. DEFINE INPUT PARAMETER ipiHerst AS INTEGER NO-UNDO. DEFINE INPUT PARAMETER ipiLieferant AS INTEGER NO-UNDO. DEFINE INPUT PARAMETER ipcWgr AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER lAbschluss AS LOGICAL NO-UNDO. DEFINE INPUT PARAMETER lTest AS LOGICAL NO-UNDO. DEFINE VARIABLE Firma AS CHARACTER NO-UNDO INIT '1000'. DEFINE VARIABLE iKnr AS INTEGER NO-UNDO. DEFINE VARIABLE iVGeb AS INTEGER NO-UNDO. DEFINE VARIABLE iKGeb AS INTEGER NO-UNDO. DEFINE VARIABLE cWgr AS CHARACTER NO-UNDO. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. DEFINE VARIABLE opErrorMessage AS CHARACTER NO-UNDO. DEFINE VARIABLE cLogFilePfad AS CHARACTER NO-UNDO. DEFINE VARIABLE cLogFile AS CHARACTER NO-UNDO. DEFINE VARIABLE cProgramm AS CHARACTER NO-UNDO. DEFINE VARIABLE iJahr AS INTEGER NO-UNDO. DEFINE VARIABLE iMonat AS INTEGER NO-UNDO. DEFINE VARIABLE cAnmeldung AS CHARACTER NO-UNDO. DEFINE VARIABLE cVGebGLN AS CHARACTER NO-UNDO. DEFINE VARIABLE cHerstGLN AS CHARACTER NO-UNDO. DEFINE VARIABLE cHerst AS CHARACTER NO-UNDO. { propertiesDD.i } { properties.i } DEFINE VARIABLE oDigitalDrinkHandler AS DigitalDrinkHandler NO-UNDO. DEFINE VARIABLE oResponseStatus AS ResponseStatus NO-UNDO. DEFINE VARIABLE oAbsatzDatenImport AS AbsatzdatenImport NO-UNDO. DEFINE VARIABLE oAbsatzAbschlussImport AS AbsatzAbschlussImport NO-UNDO. DEFINE VARIABLE oCustomer AS Customer NO-UNDO. DEFINE VARIABLE oManufacturer AS Manufacturer NO-UNDO. DEFINE VARIABLE oAbsatzAbschluss AS AbsatzAbschluss NO-UNDO. DEFINE VARIABLE oSale AS Sale NO-UNDO. DEFINE TEMP-TABLE tArtbw LIKE Artbw FIELD JJ AS INTEGER FIELD MM AS INTEGER FIELD GLN AS CHARACTER INDEX tArtbw-k1 IS PRIMARY JJ MM GLN. DEFINE TEMP-TABLE tAbschluss FIELD JJ AS INTEGER FIELD MM AS INTEGER FIELD GLN AS CHARACTER FIELD cHerst AS CHARACTER FIELD lOK AS LOGICAL. DEFINE TEMP-TABLE tAbsatzZahlen FIELD JJ AS INTEGER FIELD MM AS INTEGER FIELD Knr AS INTEGER FIELD Artnr AS INTEGER FIELD Inhalt AS INTEGER FIELD Jahr AS INTEGER FIELD Herst AS INTEGER FIELD HerstGln AS CHARACTER FIELD Hersteller AS CHARACTER FIELD Fak_Datum AS DATE FIELD VGeb_Me AS INTEGER FIELD KGeb_Me AS INTEGER FIELD VGeb_Cd AS CHARACTER FIELD KGeb_Cd AS CHARACTER FIELD VGeb_Bez AS CHARACTER FIELD KGeb_Bez AS CHARACTER FIELD VGeb_Inhalt AS INTEGER FIELD KGeb_Inhalt AS INTEGER FIELD Bezeichnung AS CHARACTER FIELD Kgr AS INTEGER FIELD VGeb_gln AS CHARACTER INDEX tAbsatzZahlen-k1 IS PRIMARY JJ MM Knr Artnr Inhalt Jahr INDEX tAbsatzZahlen-k2 JJ MM Herst Knr Artnr Inhalt Jahr. DEFINE BUFFER btAbsatzZahlen FOR tAbsatzZahlen. /* ******************** Preprocessor Definitions ******************** */ /* *************************** Main Block *************************** */ { super/funktionen.i } cAnmeldung = SUBSTITUTE('&2&1&3&1&4&1&5', CHR(01), cBatchUser, cBatchPassw, '1000' ). RUN ANMELDUNG ( INPUT cAnmeldung ). Firma = DYNAMIC-FUNCTION ('getMandant':U) NO-ERROR. cProgramm = ENTRY(1, THIS-PROCEDURE:NAME, '.' ). cLogFilePfad = DYNAMIC-FUNCTION ('getLogFilePfad':U) NO-ERROR. cLogFile = cLogFilePfad + cProgramm + '&1.log'. cLogFile = SUBSTITUTE(cLogFile, STRING(TODAY,'99999999')). OS-DELETE VALUE(cLogFile) NO-ERROR. /*ASSIGN */ /* ipdVonDatum = 01/01/2020 */ /* ipdBisDatum = 06/30/2020.*/ EMPTY TEMP-TABLE tArtbw . EMPTY TEMP-TABLE tAbschluss . FOR EACH Artst NO-LOCK WHERE Artst.Firma = Firma AND Artst.Aktiv = TRUE, FIRST Tabel NO-LOCK WHERE Tabel.Firma = Firma AND Tabel.Recart = 'HERST' AND Tabel.CodeC = '' AND Tabel.CodeI = Artst.Herst AND Tabel.Bez2 <> '', FIRST Artbez NO-LOCK WHERE Artbez.Firma = Artst.Firma AND Artbez.Artnr = Artst.Artnr AND Artbez.Inhalt = Artst.Inhalt AND Artbez.Jahr = Artst.Jahr, FIRST KGebinde NO-LOCK WHERE KGebinde.Firma = Artst.Firma AND KGebinde.Geb_Cd = Artst.KGeb_Cd, FIRST VGebinde NO-LOCK WHERE VGebinde.Firma = Artst.Firma AND VGebinde.Geb_Cd = Artst.VGeb_Cd, EACH Artbw NO-LOCK WHERE Artbw.Firma = Artst.Firma AND Artbw.Artnr = Artst.Artnr AND Artbw.Inhalt = Artst.Inhalt AND Artbw.Jahr = Artst.Jahr AND Artbw.Fak_Dat <> ? AND Artbw.Fak_Dat >= ipdVonDatum AND Artbw.Fak_Dat <= ipdBisDatum AND Artbw.Tr_Art = 1 AND Artbw.lDDUmsatz = FALSE , FIRST Debst NO-LOCK WHERE Debst.Firma = Artst.Firma AND Debst.Knr = Artbw.Knr : IF SUBSTRING(Tabel.Bez2,01,01) < '0' OR SUBSTRING(Tabel.Bez2,01,01) > '9' THEN NEXT. IF ipiHerst <> 999999 THEN DO: IF Artst.Herst <> ipiHerst THEN NEXT. END. cVGebGLN = ''. IF ipiLieferant <> 999999 THEN DO: FIND FIRST ArtLief NO-LOCK WHERE ArtLief.Firma = Artst.Firma AND ArtLief.Artnr = Artst.Artnr AND ArtLief.Inhalt = Artst.Inhalt AND ArtLief.Jahr = Artst.Jahr AND ArtLief.Knr = ipiLieferant NO-ERROR. IF NOT AVAILABLE ArtLief THEN NEXT. cVGebGLN = ArtLief.Strichcode_VGeb. END. ELSE DO: FOR EACH ArtLief NO-LOCK WHERE ArtLief.Firma = Artst.Firma AND ArtLief.Artnr = Artst.Artnr AND ArtLief.Inhalt = Artst.Inhalt AND ArtLief.Jahr = Artst.Jahr AND ArtLief.Strichcode_VGeb <> '': cVGebGLN = ArtLief.Strichcode_VGeb. LEAVE. END. END. IF cVGebGLN = '' THEN NEXT. IF ipcWgr <> '' THEN DO: cWgr = STRING(Artst.Wg_Grp,'999'). IF LOOKUP(cWgr, ipcWgr, ',') = 0 THEN NEXT. END. iKnr = (IF Debst.KnrFak > 0 AND Debst.KnrFak <> Debst.KnrLie THEN Debst.KnrFak ELSE Artbw.Knr). iJahr = YEAR (Artbw.Fak_Dat). iMonat = MONTH(Artbw.Fak_Dat). CREATE tArtbw. BUFFER-COPY Artbw TO tArtbw ASSIGN tArtbw.JJ = iJahr tArtbw.MM = iMonat tArtbw.GLN = Tabel.Bez2. /* Hersteller - GLN */ FIND FIRST tAbsatzZahlen WHERE tAbsatzZahlen.JJ = iJahr AND tAbsatzZahlen.MM = iMonat AND tAbsatzZahlen.Knr = iKnr AND tAbsatzZahlen.Artnr = Artbw.Artnr AND tAbsatzZahlen.Inhalt = Artbw.Inhalt AND tAbsatzZahlen.Jahr = Artbw.Jahr AND tAbsatzZahlen.Fak_Datum = Artbw.Fak_Dat NO-ERROR. IF NOT AVAILABLE tAbsatzZahlen THEN DO: CREATE tAbsatzZahlen. ASSIGN tAbsatzZahlen.JJ = iJahr tAbsatzZahlen.MM = iMonat tAbsatzZahlen.Knr = iKnr tAbsatzZahlen.Artnr = Artbw.Artnr tAbsatzZahlen.Inhalt = Artbw.Inhalt tAbsatzZahlen.Jahr = Artbw.Jahr tAbsatzZahlen.Fak_Datum = Artbw.Fak_Dat tAbsatzZahlen.Herst = Artst.Herst tAbsatzZahlen.HerstGln = Tabel.Bez2 tAbsatzZahlen.Hersteller = Tabel.Bez1 tAbsatzZahlen.Bezeichnung = TRIM(Artbez.Bez1 + ' ' + Artbez.Bez2) tAbsatzZahlen.KGeb_Cd = Artst.KGeb_Cd tAbsatzZahlen.VGeb_Cd = Artst.VGeb_Cd tAbsatzZahlen.KGeb_Bez = KGebinde.Bez tAbsatzZahlen.VGeb_Bez = VGebinde.Bez tAbsatzZahlen.KGeb_Inhalt = KGebinde.Inhalt tAbsatzZahlen.VGeb_Inhalt = VGebinde.Inhalt tAbsatzZahlen.Kgr = Debst.Ku_Grp tAbsatzZahlen.VGeb_gln = cVGebGLN . END. ASSIGN tAbsatzZahlen.KGeb_Me = tAbsatzZahlen.KGeb_Me + Artbw.KGeb_Me tAbsatzZahlen.VGeb_Me = tAbsatzZahlen.VGeb_Me + Artbw.VGeb_Me. END. IF lTest THEN lDebug = TRUE. IF lDebug THEN DO: oDigitalDrinkHandler = NEW DigitalDrinkHandler( INPUT cDevURL_Import, INPUT cDevServerNameIndicator, INPUT cClientId, INPUT cPassword, INPUT cClientName, INPUT iGLN-Huber). END. ELSE DO: oDigitalDrinkHandler = NEW DigitalDrinkHandler( INPUT cURL_Import, INPUT cServerNameIndicator, INPUT cClientId, INPUT cPassword, INPUT cClientName, INPUT iGLN-Huber). END. oDigitalDrinkHandler:lDebug = lDebug. FOR EACH btAbsatzZahlen USE-INDEX tAbsatzZahlen-k2 BREAK BY btAbsatzZahlen.JJ BY btAbsatzZahlen.MM BY btAbsatzZahlen.Herst: IF NOT FIRST-OF (btAbsatzZahlen.Herst) THEN NEXT. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE ('Start Absatzmeldung für Hersteller &1/&2, Jahr &3, Monat &4', btAbsatzZahlen.Herst, btAbsatzZahlen.Hersteller, btAbsatzZahlen.JJ, btAbsatzZahlen.MM) ). oAbsatzDatenImport = NEW AbsatzdatenImport(INPUT cClientId, INPUT cClientName, INPUT iGLN-Huber). oAbsatzDatenImport:lDebug = lDebug. /* ------------------------------------------------------ */ /* Alle Kunden pro Hersteller und Monat */ /* ------------------------------------------------------ */ FOR EACH tAbsatzZahlen WHERE tAbsatzZahlen.JJ = btAbsatzZahlen.JJ AND tAbsatzZahlen.MM = btAbsatzZahlen.MM AND tAbsatzZahlen.Herst = btAbsatzZahlen.Herst BREAK BY tAbsatzZahlen.Knr: IF NOT FIRST-OF ( tAbsatzZahlen.Knr ) THEN NEXT. FIND Adresse NO-LOCK WHERE Adresse.Firma = Firma AND Adresse.Knr = tAbsatzZahlen.Knr NO-ERROR. oCustomer = NEW Customer(). ASSIGN oCustomer:ino = tAbsatzZahlen.Knr oCustomer:cname1 = (IF Adresse.Firma1 <> '' THEN Adresse.Firma1 ELSE Adresse.Name) oCustomer:cname2 = (IF Adresse.Firma2 <> '' THEN Adresse.Firma2 ELSE Adresse.Vorname) oCustomer:cstreet = Adresse.Strasse oCustomer:czipcode = Adresse.Plz oCustomer:ccity = Adresse.Ort oCustomer:ccountry = Adresse.Lkz oCustomer:cphone1 = Adresse.Tel-1 oCustomer:cphone2 = Adresse.Tel-2 oCustomer:cfax = Adresse.Tel-3 oCustomer:ctaxNumber = '' oCustomer:cmail = Adresse.Mail oCustomer:cstreet2 = '' oCustomer:cpostbox = Adresse.Postfach oCustomer:cinfo = '' oCustomer:cgln = ''. CASE tAbsatzZahlen.Kgr: WHEN 15 THEN oCustomer:eBusinessType = BusinessType:SC-02. WHEN 03 OR WHEN 12 OR WHEN 17 OR WHEN 14 THEN oCustomer:eBusinessType = BusinessType:SC-01. WHEN 10 THEN oCustomer:eBusinessType = BusinessType:SC-06. WHEN 04 THEN oCustomer:eBusinessType = BusinessType:SC-16. WHEN 05 OR WHEN 01 THEN oCustomer:eBusinessType = BusinessType:SC-09. WHEN 11 THEN oCustomer:eBusinessType = BusinessType:SC-04. WHEN 07 THEN oCustomer:eBusinessType = BusinessType:SC-11. OTHERWISE oCustomer:eBusinessType = BusinessType:SC-16. END CASE. oAbsatzDatenImport:addCustomer(oCustomer). END. /* ------------------------------------------------------ */ /* Alle Verkäufe eines Herstellers pro Kunde und Monat */ /* ------------------------------------------------------ */ FOR EACH tAbsatzZahlen WHERE tAbsatzZahlen.Herst = btAbsatzZahlen.Herst AND tAbsatzZahlen.JJ = btAbsatzZahlen.JJ AND tAbsatzZahlen.MM = btAbsatzZahlen.MM BREAK BY tAbsatzZahlen.Herst BY tAbsatzZahlen.Knr BY tAbsatzZahlen.Artnr BY tAbsatzZahlen.Inhalt BY tAbsatzZahlen.Jahr : IF FIRST-OF ( tAbsatzZahlen.Herst ) THEN DO: oManufacturer = NEW Manufacturer(). ASSIGN oManufacturer:cgln = tAbsatzZahlen.HerstGln oManufacturer:csalesDescription = tAbsatzZahlen.Hersteller. ASSIGN cHerstGLN = tAbsatzZahlen.HerstGln cHerst = tAbsatzZahlen.Hersteller. END. IF FIRST-OF ( tAbsatzZahlen.Jahr ) THEN DO: ASSIGN iVGeb = 0 iKGeb = 0. END. ASSIGN iVGeb = iVGeb + tAbsatzZahlen.VGeb_Me iKGeb = iKGeb + tAbsatzZahlen.KGeb_Me. IF NOT LAST-OF ( tAbsatzZahlen.Jahr ) THEN NEXT. oSale = NEW Sale(). ASSIGN oSale:icustomerNo = tAbsatzZahlen.Knr oSale:cGTIN = tAbsatzZahlen.VGeb_gln oSale:carticleNoClient = STRING(tAbsatzZahlen.Artnr ,'999999') + '.' + STRING(tAbsatzZahlen.Inhalt,'9999') + '.' + STRING(tAbsatzZahlen.Jahr ,'9999') oSale:carticleName = tAbsatzZahlen.Bezeichnung oSale:ifilling = tAbsatzZahlen.VGeb_Inhalt oSale:ffillingContent = tAbsatzZahlen.KGeb_Inhalt oSale:dtdate = tAbsatzZahlen.Fak_Datum oSale:fnormal = iKGeb * tAbsatzZahlen.KGeb_Inhalt / 10000 oSale:fcampaign = 0 oSale:ffree = 0 oSale:ftotal = iKGeb * tAbsatzZahlen.KGeb_Inhalt / 10000 oSale:eunit = SalesUnit:SU-03. oManufacturer:addSales(oSale). END. oAbsatzDatenImport:addManufacturer(oManufacturer). lRetVal = oDigitalDrinkHandler:getAbsatzDatenImport(INPUT oAbsatzDatenImport, INPUT Type:IMP001, OUTPUT opErrorMessage, OUTPUT oResponseStatus). lRetVal = TRUE. IF lRetVal THEN DO: CREATE tAbschluss. ASSIGN tAbschluss.GLN = cHerstGln tAbschluss.JJ = tAbsatzZahlen.JJ tAbschluss.MM = tAbsatzZahlen.MM tAbschluss.cHerst = cHerst tAbschluss.lOK = FALSE. END. RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE ('Ende Absatzmeldung für Hersteller &1/&2, Jahr &3, Monat &4 -> &5', btAbsatzZahlen.Herst, btAbsatzZahlen.Hersteller, btAbsatzZahlen.JJ, btAbsatzZahlen.MM, STRING(lRetVal,'OK/Fehlerhaft')) ). IF VALID-OBJECT (oSale) THEN DELETE OBJECT oSale. IF VALID-OBJECT (oManufacturer) THEN DELETE OBJECT oManufacturer. IF VALID-OBJECT (oCustomer) THEN DELETE OBJECT oCustomer. IF VALID-OBJECT (oAbsatzDatenImport) THEN DELETE OBJECT oAbsatzDatenImport. END. DO WHILE lAbschluss: FOR EACH tAbschluss: oAbsatzAbschlussImport = NEW AbsatzAbschlussImport(INPUT cClientId, INPUT cClientName, INPUT iGLN-Huber). oAbsatzAbschlussImport:lDebug = lDebug. oAbsatzAbschluss = NEW AbsatzAbschluss (). oAbsatzAbschluss:cgln = tAbschluss.GLN. oAbsatzAbschluss:iYear = tAbschluss.JJ. oAbsatzAbschluss:iMonth = tAbschluss.MM. lRetVal = oAbsatzAbschlussImport:oAbsatzAbschlussList:Add(oAbsatzAbschluss). RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE ('&1 - &2 - &3 - &4 - &5', tAbschluss.cHerst, tAbschluss.GLN, tAbschluss.JJ, tAbschluss.MM, lRetVal) ). lRetVal = oDigitalDrinkHandler:getAbsatzAbschlussImport(INPUT oAbsatzAbschlussImport, INPUT Type:IMP002, OUTPUT opErrorMessage, OUTPUT oResponseStatus). RUN writeLogFile.p ( cProgramm, cLogFile, SUBSTITUTE ('Abschluss Absatzmeldung -> &1 / &2', STRING(lRetVal,'OK/Fehlerhaft'), opErrorMessage) ). tAbschluss.lOK = lRetVal. IF VALID-OBJECT (oAbsatzAbschluss) THEN DELETE OBJECT oAbsatzAbschluss. IF VALID-OBJECT (oAbsatzAbschlussImport) THEN DELETE OBJECT oAbsatzAbschlussImport . END. FOR EACH tAbschluss WHERE tAbschluss.lOK = TRUE, EACH tArtbw USE-INDEX tArtbw-k1 WHERE tArtbw.JJ = tAbschluss.JJ AND tArtbw.MM = tAbschluss.MM AND tArtbw.GLN = tAbschluss.GLN: FIND Artbw WHERE Artbw.Firma = tArtbw.Firma AND Artbw.Trnr = tArtbw.Trnr NO-ERROR. IF NOT AVAILABLE Artbw THEN NEXT. Artbw.lDDUmsatz = TRUE. END. LEAVE. END. FINALLY: IF VALID-OBJECT (oSale) THEN DELETE OBJECT oSale. IF VALID-OBJECT (oManufacturer) THEN DELETE OBJECT oManufacturer. IF VALID-OBJECT (oCustomer) THEN DELETE OBJECT oCustomer. IF VALID-OBJECT (oAbsatzDatenImport) THEN DELETE OBJECT oAbsatzDatenImport. IF VALID-OBJECT (oAbsatzAbschluss) THEN DELETE OBJECT oAbsatzAbschluss. IF VALID-OBJECT (oAbsatzAbschlussImport) THEN DELETE OBJECT oAbsatzAbschlussImport. IF VALID-OBJECT (oDigitalDrinkHandler) THEN DELETE OBJECT oDigitalDrinkHandler. END FINALLY.