&ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12 GUI ADM2 &ANALYZE-RESUME &Scoped-define WINDOW-NAME CURRENT-WINDOW &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS fFrameWin /*------------------------------------------------------------------------ File: Description: from cntnrfrm.w - ADM2 SmartFrame Template Input Parameters: Output Parameters: ------------------------------------------------------------------------*/ /* This .W file was created with the Progress AppBuilder. */ /*----------------------------------------------------------------------*/ /* Create an unnamed pool to store all the widgets created by this procedure. This is a good default which assures that this procedure's triggers and internal procedures will execute in this procedure's storage, and that proper cleanup will occur on deletion of the procedure. */ CREATE WIDGET-POOL. /* *************************** Definitions ************************** */ /* Parameters Definitions --- */ /* Local Variable Definitions --- */ DEF VAR FPreisGrp AS LOG NO-UNDO INIT ?. DEF VAR AdFirma AS CHAR NO-UNDO. DEF VAR FBFirma AS CHAR NO-UNDO. DEF VAR Firma AS CHAR NO-UNDO. DEF VAR SAktiv AS LOG NO-UNDO. DEF VAR Progname AS CHAR NO-UNDO. DEF BUFFER BSteuer FOR Steuer. DEF TEMP-TABLE tArtPreis LIKE ArtPreis. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK /* ******************** Preprocessor Definitions ******************** */ &Scoped-define PROCEDURE-TYPE SmartFrame &Scoped-define DB-AWARE no &Scoped-define ADM-CONTAINER FRAME &Scoped-define ADM-SUPPORTED-LINKS Data-Target,Data-Source,Page-Target,Update-Source,Update-Target /* Name of designated FRAME-NAME and/or first browse and/or first query */ &Scoped-define FRAME-NAME fMain /* Standard List Definitions */ &Scoped-Define ENABLED-OBJECTS RECT-7 Btn_Aktionen Btn_Zuteilen /* Custom List Definitions */ /* List-1,List-2,List-3,List-4,List-5,List-6 */ /* _UIB-PREPROCESSOR-BLOCK-END */ &ANALYZE-RESUME /* *********************** Control Definitions ********************** */ /* Definitions of handles for SmartObjects */ DEFINE VARIABLE h_d-aktionen AS HANDLE NO-UNDO. DEFINE VARIABLE h_dyntoolbar AS HANDLE NO-UNDO. DEFINE VARIABLE h_v-aktionen AS HANDLE NO-UNDO. /* Definitions of the field level widgets */ DEFINE BUTTON Btn_Aktionen NO-FOCUS LABEL "Aktionen" SIZE 11 BY 1.33. DEFINE BUTTON Btn_Zuteilen IMAGE-UP FILE "grafik/add.bmp":U NO-FOCUS LABEL "Zuteilen" SIZE 5.2 BY 1.24. DEFINE RECTANGLE RECT-7 EDGE-PIXELS 2 GRAPHIC-EDGE NO-FILL SIZE 58 BY 9.29. /* ************************ Frame Definitions *********************** */ DEFINE FRAME fMain Btn_Aktionen AT ROW 1.67 COL 47 Btn_Zuteilen AT ROW 1.76 COL 27 RECT-7 AT ROW 1.24 COL 2 WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY SIDE-LABELS NO-UNDERLINE THREE-D AT COL 1 ROW 1 SIZE 60 BY 9.67. /* *********************** Procedure Settings ************************ */ &ANALYZE-SUSPEND _PROCEDURE-SETTINGS /* Settings for THIS-PROCEDURE Type: SmartFrame Allow: Basic,Browse,DB-Fields,Query,Smart Container Links: Data-Target,Data-Source,Page-Target,Update-Source,Update-Target Other Settings: PERSISTENT-ONLY COMPILE */ /* This procedure should always be RUN PERSISTENT. Report the error, */ /* then cleanup and return. */ IF NOT THIS-PROCEDURE:PERSISTENT THEN DO: MESSAGE "{&FILE-NAME} should only be RUN PERSISTENT.":U VIEW-AS ALERT-BOX ERROR BUTTONS OK. RETURN. END. &ANALYZE-RESUME _END-PROCEDURE-SETTINGS /* ************************* Create Window ************************** */ &ANALYZE-SUSPEND _CREATE-WINDOW /* DESIGN Window definition (used by the UIB) CREATE WINDOW fFrameWin ASSIGN HEIGHT = 9.67 WIDTH = 60. /* END WINDOW DEFINITION */ */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB fFrameWin /* ************************* Included-Libraries *********************** */ {src/adm2/containr.i} /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* *********** Runtime Attributes and AppBuilder Settings *********** */ &ANALYZE-SUSPEND _RUN-TIME-ATTRIBUTES /* SETTINGS FOR WINDOW fFrameWin VISIBLE,,RUN-PERSISTENT */ /* SETTINGS FOR FRAME fMain NOT-VISIBLE FRAME-NAME */ ASSIGN FRAME fMain:HIDDEN = TRUE. /* _RUN-TIME-ATTRIBUTES-END */ &ANALYZE-RESUME /* Setting information for Queries and Browse Widgets fields */ &ANALYZE-SUSPEND _QUERY-BLOCK FRAME fMain /* Query rebuild information for FRAME fMain _Options = "" _Query is NOT OPENED */ /* FRAME fMain */ &ANALYZE-RESUME /* ************************ Control Triggers ************************ */ &Scoped-define SELF-NAME Btn_Aktionen &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Btn_Aktionen fFrameWin ON CHOOSE OF Btn_Aktionen IN FRAME fMain /* Aktionen */ DO: IF DYNAMIC-FUNCTION('getMutflag':U, Progname) = TRUE THEN RETURN NO-APPLY. RUN START_PROGRAMM ( INPUT 'w-aktionen.w':u ). END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &Scoped-define SELF-NAME Btn_Zuteilen &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Btn_Zuteilen fFrameWin ON CHOOSE OF Btn_Zuteilen IN FRAME fMain /* Zuteilen */ DO: IF DYNAMIC-FUNCTION('getMutflag':U, Progname) = TRUE THEN RETURN NO-APPLY. RUN ZUFUEGEN_AKTION. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &UNDEFINE SELF-NAME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK fFrameWin /* *************************** Main Block *************************** */ SAktiv = DYNAMIC-FUNCTION('getSuperaktiv':U) NO-ERROR. IF SAktiv = ? THEN SAktiv = FALSE. IF SAktiv THEN DO: AdFirma = DYNAMIC-FUNCTION('getAdMandant':U) NO-ERROR. FBFirma = DYNAMIC-FUNCTION('getFBMandant':U) NO-ERROR. Firma = DYNAMIC-FUNCTION('getMandant':U) NO-ERROR. Progname = DYNAMIC-FUNCTION('makeProgname':U,INPUT THIS-PROCEDURE ) NO-ERROR. END. FIND BSteuer NO-LOCK USE-INDEX Steuer-k1 WHERE BSteuer.Firma = Firma NO-ERROR. &IF DEFINED(UIB_IS_RUNNING) <> 0 &THEN RUN initializeObject. &ENDIF /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* ********************** Internal Procedures *********************** */ &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE adm-create-objects fFrameWin _ADM-CREATE-OBJECTS PROCEDURE adm-create-objects : /*------------------------------------------------------------------------------ Purpose: Create handles for all SmartObjects used in this procedure. After SmartObjects are initialized, then SmartLinks are added. Parameters: ------------------------------------------------------------------------------*/ DEFINE VARIABLE currentPage AS INTEGER NO-UNDO. ASSIGN currentPage = getCurrentPage(). CASE currentPage: WHEN 0 THEN DO: RUN constructObject ( INPUT 'd-aktionen.wDB-AWARE':U , INPUT FRAME fMain:HANDLE , INPUT 'AppServiceASInfoASUsePrompt?CacheDuration0CheckCurrentChangedyesDestroyStatelessnoDisconnectAppServernoServerOperatingModeNONEShareDatanoUpdateFromSourcenoForeignFieldsObjectNamed-aktionenOpenOnInityesPromptColumns(NONE)PromptOnDeleteyesRowsToBatch200RebuildOnReposnoToggleDataTargetsyes':U , OUTPUT h_d-aktionen ). RUN repositionObject IN h_d-aktionen ( 4.43 , 39.80 ) NO-ERROR. /* Size in AB: ( 1.86 , 10.80 ) */ RUN constructObject ( INPUT 'v-aktionen.w':U , INPUT FRAME fMain:HANDLE , INPUT 'EnabledObjFldsToDisable?ModifyFields(All)DataSourceNamesUpdateTargetNamesLogicalObjectNameLogicalObjectNamePhysicalObjectNameDynamicObjectnoRunAttributeHideOnInitnoDisableOnInitnoObjectLayout':U , OUTPUT h_v-aktionen ). RUN repositionObject IN h_v-aktionen ( 3.19 , 4.00 ) NO-ERROR. /* Size in AB: ( 6.95 , 54.00 ) */ RUN constructObject ( INPUT 'adm2/dyntoolbar.w':U , INPUT FRAME fMain:HANDLE , INPUT 'EdgePixels2DeactivateTargetOnHidenoDisabledActionsFlatButtonsyesMenunoShowBorderyesToolbaryesActionGroupsNavigationTableIOTypeUpdateSupportedLinksNavigation-sourceToolbarBandsToolbarAutoSizenoToolbarDrawDirectionHorizontalLogicalObjectNameDisabledActionsHiddenActionsResetHiddenToolbarBandsHiddenMenuBandsMenuMergeOrder0RemoveMenuOnHidenoCreateSubMenuOnConflictyesNavigationTargetNameHideOnInitnoDisableOnInitnoObjectLayout':U , OUTPUT h_dyntoolbar ). RUN repositionObject IN h_dyntoolbar ( 1.67 , 4.80 ) NO-ERROR. RUN resizeObject IN h_dyntoolbar ( 1.33 , 21.20 ) NO-ERROR. /* Links to SmartDataObject h_d-aktionen. */ RUN addLink ( h_dyntoolbar , 'Navigation':U , h_d-aktionen ). /* Links to SmartDataViewer h_v-aktionen. */ RUN addLink ( h_d-aktionen , 'Data':U , h_v-aktionen ). /* Adjust the tab order of the smart objects. */ RUN adjustTabOrder ( h_v-aktionen , h_dyntoolbar , 'AFTER':U ). END. /* Page 0 */ END CASE. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE disable_UI fFrameWin _DEFAULT-DISABLE PROCEDURE disable_UI : /*------------------------------------------------------------------------------ Purpose: DISABLE the User Interface Parameters: Notes: Here we clean-up the user-interface by deleting dynamic widgets we have created and/or hide frames. This procedure is usually called when we are ready to "clean-up" after running. ------------------------------------------------------------------------------*/ /* Hide all frames. */ HIDE FRAME fMain. IF THIS-PROCEDURE:PERSISTENT THEN DELETE PROCEDURE THIS-PROCEDURE. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE enable_UI fFrameWin _DEFAULT-ENABLE PROCEDURE enable_UI : /*------------------------------------------------------------------------------ Purpose: ENABLE the User Interface Parameters: Notes: Here we display/view/enable the widgets in the user-interface. In addition, OPEN all queries associated with each FRAME and BROWSE. These statements here are based on the "Other Settings" section of the widget Property Sheets. ------------------------------------------------------------------------------*/ ENABLE RECT-7 Btn_Aktionen Btn_Zuteilen WITH FRAME fMain. {&OPEN-BROWSERS-IN-QUERY-fMain} END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE SETADDBUTTON fFrameWin PROCEDURE SETADDBUTTON : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF INPUT PARAMETER ipAktion AS INT NO-UNDO. DO WITH FRAME {&FRAME-NAME}: CASE ipAktion: WHEN 1 THEN Btn_Zuteilen:SENSITIVE = TRUE. WHEN 2 THEN Btn_Zuteilen:SENSITIVE = FALSE. END CASE. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ZUFUEGEN_AKTION fFrameWin PROCEDURE ZUFUEGEN_AKTION : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF VAR cAktion AS CHAR NO-UNDO. DEF VAR cArtikel AS CHAR NO-UNDO. DEF VAR Artnr AS INT NO-UNDO. DEF VAR Inhalt AS INT NO-UNDO. DEF VAR Jahr AS INT NO-UNDO. DEF VAR i1 AS INT NO-UNDO. DEF VAR cPreisGrp AS CHAR NO-UNDO. DEF VAR Bru_Netto AS LOG NO-UNDO. DEF VAR Betrag AS DEC DECIMALS 4 NO-UNDO. DEF VAR vArt AS INT NO-UNDO. DEF VAR cGruppen AS CHAR NO-UNDO. DEF VAR Grp AS INT NO-UNDO. DEF VAR hDaten AS HANDLE NO-UNDO. DEF VAR dDatum AS DATE NO-UNDO. DEF VAR hArtPreis AS HANDLE NO-UNDO. DEF VAR hNetto AS HANDLE NO-UNDO. DEF VAR hBrutto AS HANDLE NO-UNDO. DEF VAR hMarge AS HANDLE NO-UNDO. DEF VAR hDatum AS HANDLE NO-UNDO. hDaten = DYNAMIC-FUNCTION('getDataSource':U) NO-ERROR. DO WITH FRAME {&FRAME-NAME}: cArtikel = DYNAMIC-FUNCTION('GetArtikel':U) NO-ERROR. RUN GETAKTION IN h_v-aktionen ( OUTPUT cAktion ) NO-ERROR. IF cArtikel = '' THEN RETURN NO-APPLY. IF cArtikel = ? THEN RETURN NO-APPLY. Artnr = INTEGER(ENTRY(2, cArtikel, CHR(01))). Inhalt = INTEGER(ENTRY(3, cArtikel, CHR(01))). Jahr = INTEGER(ENTRY(4, cArtikel, CHR(01))). FIND Artst WHERE RECID(Artst) = INTEGER(ENTRY(1, cArtikel, CHR(01))) NO-LOCK NO-ERROR. IF NOT AVAILABLE Artst THEN RETURN NO-APPLY. IF BSteuer.AktionsPreis = 0 THEN FPreisGrp = TRUE. ELSE FPreisGrp = FALSE. FIND Aktionen USE-INDEX Aktionen-k1 WHERE Aktionen.Firma = Firma AND Aktionen.Aktion = cAktion NO-LOCK NO-ERROR. dDatum = Aktionen.Ab_Datum. cGruppen = ''. DO i1 = 1 TO 50 WHILE Aktionen.Gruppen[i1] <> 0: IF FPreisGrp THEN DO: FIND LAST ArtPreis USE-INDEX ArtPreis-k1 WHERE ArtPreis.Firma = Firma AND ArtPreis.Artnr = Artnr AND ArtPreis.Inhalt = Inhalt AND ArtPreis.Jahr = Jahr AND ArtPreis.Preis_Grp = Aktionen.Gruppen[i1] AND ArtPreis.Aktion = FALSE AND ArtPreis.Aktiv = TRUE NO-LOCK NO-ERROR. IF NOT AVAILABLE ArtPreis THEN NEXT. END. Grp = Aktionen.Gruppen[i1]. IF cGruppen <> '' THEN cGruppen = cGruppen + ';'. cGruppen = cGruppen + STRING(Grp,'999'). FIND AktPreis USE-INDEX AktPreis-k1 WHERE AktPreis.Firma = Firma AND AktPreis.Artnr = Artnr AND AktPreis.Inhalt = Inhalt AND AktPreis.Jahr = Jahr AND AktPreis.Grp = Grp AND AktPreis.Ab_Datum = Aktionen.Ab_Datum NO-LOCK NO-ERROR. IF AVAILABLE AktPreis THEN NEXT. CREATE AktPreis. ASSIGN AktPreis.Firma = Firma AktPreis.Artnr = Artnr AktPreis.Inhalt = Inhalt AktPreis.Jahr = Jahr AktPreis.Grp = Grp AktPreis.Ab_Datum = Aktionen.Ab_Datum AktPreis.Bis_Datum = Aktionen.Bis_Datum AktPreis.Art = Aktionen.Art AktPreis.Wert = Aktionen.Wert AktPreis.Bemerkung = Aktionen.Bemerkung AktPreis.Aktion = Aktionen.Aktion. IF AktPreis.Bemerkung = '' THEN AktPreis.Bemerkung = 'Aktion'. END. IF FPreisGrp THEN DO: EMPTY TEMP-TABLE tArtPreis. CREATE tArtPreis. hArtPreis = BUFFER tArtPreis:HANDLE. hNetto = hArtPreis:BUFFER-FIELD('VK_Netto') . hBrutto = hArtPreis:BUFFER-FIELD('VK_Brutto') . hMarge = hArtPreis:BUFFER-FIELD('Marge') . hDatum = hArtPreis:BUFFER-FIELD('Ab_Datum'). DO i1 = 1 TO NUM-ENTRIES(cGruppen, ';'): Grp = INTEGER(ENTRY(i1, cGruppen, ';')). FIND ArtPreis USE-INDEX ArtPreis-k1 WHERE ArtPreis.Firma = Firma AND ArtPreis.Artnr = Artnr AND ArtPreis.Inhalt = Inhalt AND ArtPreis.Jahr = Jahr AND ArtPreis.Preis_Grp = Grp AND ArtPreis.Aktion = TRUE AND ArtPreis.Ab_Datum = Aktionen.Ab_Datum NO-LOCK NO-ERROR. IF AVAILABLE ArtPreis THEN NEXT. FIND LAST ArtPreis USE-INDEX ArtPreis-k1 WHERE ArtPreis.Firma = Firma AND ArtPreis.Artnr = Artnr AND ArtPreis.Inhalt = Inhalt AND ArtPreis.Jahr = Jahr AND ArtPreis.Preis_Grp = Grp AND ArtPreis.Ab_Datum < Aktionen.Ab_Datum AND ArtPreis.Aktion = FALSE AND ArtPreis.Aktiv = TRUE NO-LOCK NO-ERROR. IF NOT AVAILABLE ArtPreis THEN NEXT. FIND FIRST tArtPreis. BUFFER-COPY ArtPreis TO tArtPreis. RUN FIND_PREISGRUPPE ( INPUT tArtPreis.Preis_Grp, OUTPUT cPreisGrp ) NO-ERROR. IF cPreisGrp = '' THEN NEXT. IF INTEGER(ENTRY(3, cPreisGrp, CHR(01))) = 1 THEN Bru_Netto = TRUE. ELSE Bru_Netto = FALSE. IF Bru_Netto THEN DO: IF Aktionen.Art = 0 THEN tArtPreis.VK_Brutto = tArtPreis.VK_Brutto - Aktionen.Wert. IF Aktionen.Art = 1 THEN tArtPreis.VK_Brutto = tArtPreis.VK_Brutto * (100 - Aktionen.Wert) / 100. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT tArtPreis.VK_Brutto ). vArt = 2. END. ELSE DO: IF Aktionen.Art = 0 THEN tArtPreis.VK_Netto = tArtPreis.VK_Netto - Aktionen.Wert. IF Aktionen.Art = 1 THEN tArtPreis.VK_Netto = tArtPreis.VK_Netto * (100 - Aktionen.Wert) / 100. /* RUN RUNDEN ( INPUT 1, INPUT-OUTPUT tArtPreis.VK_Netto ). */ vArt = 1. END. RUN ARTPREISRECHNEN ( INPUT vArt, INPUT hNetto , INPUT hBrutto, INPUT hMarge , INPUT hDatum , INPUT 'CHF' ). ASSIGN tArtPreis.Ab_Datum = dDatum tArtPreis.Aktion = TRUE tArtPreis.Aktiv = TRUE tArtPreis.AktName = Aktionen.Aktion. CREATE ArtPreis. BUFFER-COPY tArtPreis TO ArtPreis. END. IF VALID-HANDLE ( hDaten ) THEN RUN SET_OPENFLAG IN hDaten ( TRUE ). END. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME