IDENTIFICATION DIVISION. PROGRAM-ID. CHARGE-PROGRAM. AUTHOR. JONAS WIK. DATE-WRITTEN. OCTOBER 21ST 2002. DATE-COMPILED. ***************************************************************** ** ** Purpose of the program: ** Input: ** FIELD COLS. TYPE ** ** ** Output: ** ** Date Due: October 14th 2002 ** Date Assigned: September 30th 2002 ** Dataset Name: ** ***************************************************************** ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. ** FILE-CONTROL. SELECT PRICE-FILE ASSIGN TO PRICE-INPUT ORGANIZATION IS LINE SEQUENTIAL. SELECT QTY-FILE ASSIGN TO QTY-INPUT ORGANIZATION IS LINE SEQUENTIAL. SELECT REPORT-FILE ASSIGN TO CHARGE-REPORT. ** DATA DIVISION. ** FILE SECTION. ** FD PRICE-FILE LABEL RECORDS ARE OMITTED RECORDING MODE IS F. 01 PF-REC. 05 PF-ITEM-NUM PIC X(4). 05 PF-ITEM-PRICE PIC 9(3)V99. ** FD QTY-FILE LABEL RECORDS ARE OMITTED RECORDING MODE IS F. 01 QF-REC. 05 QF-ITEM-NUM PIC X(4). 05 QF-QTY-SOLD PIC 99. 05 QF-SLS-TAX-CODE PIC 9. 05 QF-ITEM-WEIGHT PIC 99. ** FD REPORT-FILE LABEL RECORDS ARE OMITTED RECORDING MODE IS F. 01 CHARGE-REPORT-REC PIC X(132). ** WORKING-STORAGE SECTION. 01 WS-CALCULATION-FIELDS. 05 WC-ITEM-PRICE PIC 9(3)V99. 05 WC-EXTENDED-AMOUNT PIC 9(6)V99. 05 WC-SALES-TAX PIC 9(4)V99. 05 WC-FREIGHT-CHARGES PIC 9(4)V99. 05 WC-DISCOUNT PIC 9(5)V99. 05 WC-TAX-RATE PIC V99. 05 WC-ITEM-FREIGHT PIC 99V99. 05 WC-WEIGHT PIC 999. 05 WC-TEMP-WEIGHT PIC 999. 05 WC-DISC-RATE PIC V999. 05 WC-TOTAL PIC 9(6)V99. 01 WS-DATE. 05 PIC XX. 05 WD-YEAR PIC 99. 05 WD-MONTH PIC 99. 05 WD-DAY PIC 99. 05 PIC X(13). 01 WS-SWITCHES. 05 WS-FOUND-SW PIC X(3) VALUE ' NO'. 05 WS-FOUND-SW2 PIC X(3) VALUE ' NO'. 88 FOUND VALUE 'YES'. 05 WS-EOF-SW PIC X(3). 05 WS-EOF-SW2 PIC X(3). 01 PRICE-TABLE. 05 PRICE-TABS OCCURS 20 TIMES ASCENDING KEY PT-ITEM-NUM INDEXED BY C D. 10 PT-ITEM-NUM PIC X(4). 10 PT-ITEM-PRICE PIC 9(3)V99. 01 SALESTAX-TABLE. 05 FILLER PIC X(3) VALUE '105'. 05 FILLER PIC X(3) VALUE '207'. 05 FILLER PIC X(3) VALUE '309'. 05 FILLER PIC X(3) VALUE '406'. 05 FILLER PIC X(3) VALUE '504'. 05 FILLER PIC X(3) VALUE '608'. ** 01 SLSTAX-TAB REDEFINES SALESTAX-TABLE. 05 TAX-TABS OCCURS 6 TIMES INDEXED BY I. 10 TT-TAX-CODE PIC 9. 10 TT-TAX-RATE PIC V99. 01 FREIGHT-TABLE. 05 FILLER PIC X(7) VALUE '0200550'. 05 FILLER PIC X(7) VALUE '0350825'. 05 FILLER PIC X(7) VALUE '0501250'. 05 FILLER PIC X(7) VALUE '0702000'. 05 FILLER PIC X(7) VALUE '0902640'. 05 FILLER PIC X(7) VALUE '1203200'. ** 01 FREIGHT-TAB REDEFINES FREIGHT-TABLE. 05 FREIGHT-TABS OCCURS 6 TIMES INDEXED BY J. 10 FT-WEIGHT PIC 999. 10 FT-CHARGE PIC 99V99. ** ** 01 PRICE-INPUT PIC X(9) VALUE "J:HW2.DAT". 01 QTY-INPUT PIC X(11) VALUE "J:ASMT2.DAT". 01 CHARGE-REPORT PIC X(12) VALUE "J:CHGREP.DAT". ** ** 01 CHARGE-REPORT-HEADER1. 05 FILLER PIC X(9) VALUE "JONAS WIK". 05 FILLER PIC X(26). 05 FILLER PIC X(14) VALUE "FREIGHT REPORT". 05 FILLER PIC X(32). 05 FILLER PIC X(6) VALUE "DATE: ". 05 HEADING-MONTH PIC Z9. 05 FILLER PIC X VALUE '/'. 05 HEADING-DAY PIC Z9. 05 FILLER PIC X VALUE '/'. 05 HEADING-YEAR PIC 99. ** 01 CHARGE-REPORT-HEADER2. 05 FILLER PIC X(11) VALUE "ITEM NUMBER". 05 FILLER PIC XX. 05 FILLER PIC X(13) VALUE "QUANTITY SOLD". 05 FILLER PIC XX. 05 FILLER PIC X(15) VALUE "EXTENDED AMOUNT". 05 FILLER PIC XX. 05 FILLER PIC X(9) VALUE "SALES TAX". 05 FILLER PIC XX. 05 FILLER PIC X(15) VALUE "FREIGHT CHARGES". 05 FILLER PIC XX. 05 FILLER PIC X(8) VALUE "DISCOUNT". 05 FILLER PIC XX. 05 FILLER PIC X(13) VALUE "TOTAL CHARGES". ** ** 01 CHARGE-REPORT-MSG-LINE. 05 FILLER PIC X(4). 05 MSG-ITEM-NUM PIC X(4). 05 FILLER PIC XX. 05 MSG-LINE-ITEM PIC X(30). ** ** 01 CHARGE-REPORT-DETAIL-LINE. 05 FILLER PIC X(4). 05 CR-ITEM-NUM PIC X(4). 05 FILLER PIC X(10). 05 CR-QTY-SOLD PIC Z9. 05 FILLER PIC X(10). 05 CR-EXTENDED-AMOUNT PIC $(6).99. 05 FILLER PIC X(6). 05 CR-SALES-TAX PIC $(5).99. 05 FILLER PIC X(7). 05 CR-FREIGHT-CHARGES PIC $(5).99. 05 FILLER PIC X(5). 05 CR-DISCOUNT PIC $(5).99. 05 FILLER PIC X(5). 05 CR-TOTAL-CHARGES PIC $(6).99. ** 01 END-OF-JOB-LINE. 05 PIC X(35) VALUE SPACES. 05 PIC X(30) VALUE "N O R M A L E N D O F J O B". PROCEDURE DIVISION. ** ************************************************************** ** THIS PARAGRAPH IS THE MAIN MODULE OF THE PROGRAM. ALL ** PARAGRAPHS IN THE PROGRAM ARE EXECUTED UNDER THE CONTROL ** OF THIS MODULE. ************************************************************** ** 0000-MAIN-RTN. PERFORM 0100-INIT-RTN THRU 0100-INIT-RTN-EXIT PERFORM 0800-HDG-RTN THRU 0800-HDG-RTN-EXIT PERFORM UNTIL WS-EOF-SW2 = 'YES' READ QTY-FILE AT END MOVE 'YES' TO WS-EOF-SW2 NOT AT END PERFORM 0200-VALID-RTN THRU 0200-VALID-RTN-EXIT END-READ END-PERFORM. PERFORM 1000-ENDOFJOB-RTN THRU 1000-ENDOFJOB-RTN-EXIT CLOSE PRICE-FILE QTY-FILE REPORT-FILE STOP RUN. ** *************************************************************** ** CALLED BY 000-MAIN-LINE-RTN. INITIALIZES VALUES AND OPENS ** THE FILES INVOLVED. *************************************************************** ** 0100-INIT-RTN. OPEN INPUT PRICE-FILE QTY-FILE OUTPUT REPORT-FILE INITIALIZE WS-CALCULATION-FIELDS SET D TO 1 PERFORM 0770-DATE-MOVE-RTN THRU 0770-DATE-MOVE-RTN-EXIT PERFORM 0700-READ UNTIL WS-EOF-SW = 'YES'. 0100-INIT-RTN-EXIT. EXIT. ** ***************************************************************** ** THIS PARAGRAPH VALIDATES THAT... ** 1. ALL NUMERIC FIELDS ARE NUMERIC. ** 2. DEPOSITS OR WITHDRAWAL VALUES CANNOT EXCEED $7,000 ** 3. THE TYPE OF ACCOUNT (AR-CODE) IS 'S' 'C' OR 'SS' ** 4. ACCT-NUM IS PRESENT ***************************************************************** ** 0200-VALID-RTN. SEARCH ALL PRICE-TABS AT END PERFORM 0999-ERR-RTN THRU 0999-ERR-RTN-EXIT WHEN PT-ITEM-NUM(C) = QF-ITEM-NUM PERFORM 0210-VALID-RTN THRU 0210-VALID-RTN-EXIT END-SEARCH. 0200-VALID-RTN-EXIT. EXIT. 0210-VALID-RTN. SET I TO 1 SEARCH TAX-TABS AT END PERFORM 0998-ERR-RTN THRU 0998-ERR-RTN-EXIT WHEN TT-TAX-CODE(I) = QF-SLS-TAX-CODE PERFORM 0400-TAX-CALC-RTN THRU 0400-TAX-CALC-RTN-EXIT PERFORM 0300-CALC-RTN THRU 0300-CALC-RTN-EXIT END-SEARCH. 0210-VALID-RTN-EXIT.EXIT. ** 0300-CALC-RTN. * MOVE PT-ITEM-PRICE(C) TO WC-ITEM-PRICE * COMPUTE WC-EXTENDED-AMOUNT = WC-ITEM-PRICE * QF-QTY-SOLD * SET I TO 1 * SEARCH TAX-TABS * AT END PERFORM 0998-ERR-RTN THRU 0998-ERR-RTN-EXIT * WHEN TT-TAX-CODE(I) = QF-SLS-TAX-CODE * PERFORM 0400-TAX-CALC-RTN THRU 0400-TAX-CALC-RTN-EXIT * END-SEARCH. COMPUTE WC-WEIGHT = QF-QTY-SOLD * QF-ITEM-WEIGHT SET J TO 1 PERFORM 0350-CHECK-ONETWENTY-RTN THRU 0350-CHECK-ONETWENTY-RTN-EXIT UNTIL WC-WEIGHT <= 120 SEARCH FREIGHT-TABS AT END PERFORM 0950-ERROR-RTN THRU 0950-ERROR-RTN-EXIT WHEN FT-WEIGHT(J) >= WC-WEIGHT PERFORM 0500-FREIGHT-RTN THRU 0500-FREIGHT-RTN-EXIT END-SEARCH. EVALUATE WC-EXTENDED-AMOUNT WHEN 1000 THRU 25000 MOVE .06 TO WC-DISC-RATE WHEN 25001 THRU 60000 MOVE .08 TO WC-DISC-RATE WHEN > 60000 MOVE .095 TO WC-DISC-RATE END-EVALUATE COMPUTE WC-DISCOUNT = WC-EXTENDED-AMOUNT * WC-DISC-RATE COMPUTE WC-TOTAL = WC-EXTENDED-AMOUNT + WC-SALES-TAX + WC-FREIGHT-CHARGES - WC-DISCOUNT PERFORM 0900-WRITE-DETAIL THRU 0900-WRITE-DETAIL-EXIT. 0300-CALC-RTN-EXIT.EXIT. 0350-CHECK-ONETWENTY-RTN. COMPUTE WC-WEIGHT = WC-WEIGHT - 120. ADD 32 TO WC-FREIGHT-CHARGES. 0350-CHECK-ONETWENTY-RTN-EXIT.EXIT. ** 0400-TAX-CALC-RTN. MOVE PT-ITEM-PRICE(C) TO WC-ITEM-PRICE COMPUTE WC-EXTENDED-AMOUNT = WC-ITEM-PRICE * QF-QTY-SOLD MOVE TT-TAX-RATE(I) TO WC-TAX-RATE. COMPUTE WC-SALES-TAX = WC-EXTENDED-AMOUNT * WC-TAX-RATE. 0400-TAX-CALC-RTN-EXIT.EXIT. ** 0500-FREIGHT-RTN. ADD FT-CHARGE(J) TO WC-FREIGHT-CHARGES. 0500-FREIGHT-RTN-EXIT.EXIT. 0700-READ. READ PRICE-FILE AT END MOVE 'YES' TO WS-EOF-SW NOT AT END PERFORM 0750-FILL-TABLE THRU 0750-FILL-TABLE-EXIT END-READ. 0700-READ-EXIT.EXIT. ** 0750-FILL-TABLE. MOVE PF-ITEM-NUM TO PT-ITEM-NUM(D). MOVE PF-ITEM-PRICE TO PT-ITEM-PRICE(D). SET D UP BY 1. 0750-FILL-TABLE-EXIT.EXIT. ** ***************************************************************** ** THIS PARAGRAPH MOVES THE DATE TO THE HEADING ***************************************************************** ** 0770-DATE-MOVE-RTN. MOVE FUNCTION CURRENT-DATE TO WS-DATE. MOVE WD-MONTH TO HEADING-MONTH. MOVE WD-DAY TO HEADING-DAY. MOVE WD-YEAR TO HEADING-YEAR. 0770-DATE-MOVE-RTN-EXIT.EXIT. ** ***************************************************************** ** THIS PARAGRAPH PRINTS THE HEADINGS ***************************************************************** ** 0800-HDG-RTN. WRITE CHARGE-REPORT-REC FROM CHARGE-REPORT-HEADER1 AFTER ADVANCING 2 LINES. WRITE CHARGE-REPORT-REC FROM CHARGE-REPORT-HEADER2 AFTER ADVANCING 2 LINES. 0800-HDG-RTN-EXIT. ** ***************************************************************** ** THIS PARAGRAPH MOVES THE FIELDS AND WRITES THE MAIN LINE IN THE ** REPORT. ***************************************************************** ** 0900-WRITE-DETAIL. MOVE PT-ITEM-NUM(C) TO CR-ITEM-NUM MOVE QF-QTY-SOLD TO CR-QTY-SOLD MOVE WC-EXTENDED-AMOUNT TO CR-EXTENDED-AMOUNT MOVE WC-SALES-TAX TO CR-SALES-TAX MOVE WC-FREIGHT-CHARGES TO CR-FREIGHT-CHARGES MOVE WC-DISCOUNT TO CR-DISCOUNT MOVE WC-TOTAL TO CR-TOTAL-CHARGES WRITE CHARGE-REPORT-REC FROM CHARGE-REPORT-DETAIL-LINE AFTER ADVANCING 1 LINES. 0900-WRITE-DETAIL-EXIT. ** ***************************************************************** ** THIS PARAGRAPH WRITES THE ERROR LINE. AT THE END ** OF THE PROCEDURE THE ERROR LINE FIELDS ARE RE- ** INITIALIZED. ***************************************************************** ** 0950-ERROR-RTN. WRITE CHARGE-REPORT-REC FROM CHARGE-REPORT-MSG-LINE AFTER ADVANCING 1 LINES MOVE SPACES TO MSG-ITEM-NUM. MOVE SPACES TO MSG-LINE-ITEM. 0950-ERROR-RTN-EXIT. 0999-ERR-RTN. MOVE QF-ITEM-NUM TO MSG-ITEM-NUM. MOVE "ITEM NOT IN TABLE" TO MSG-LINE-ITEM. PERFORM 0950-ERROR-RTN THRU 0950-ERROR-RTN-EXIT. 0999-ERR-RTN-EXIT. 0998-ERR-RTN. MOVE QF-ITEM-NUM TO MSG-ITEM-NUM. MOVE "SALES TAX CODE NOT IN TABLE" TO MSG-LINE-ITEM. PERFORM 0950-ERROR-RTN THRU 0950-ERROR-RTN-EXIT. 0998-ERR-RTN-EXIT. ** ***************************************************************** ** THIS PARAGRAPH WRITES THE FINAL LINES. IT PRODUCES AVERAGES AND ** PRINTS WHAT CHECKING ACCOUNT HAS THE LOWEST BALANCE. ***************************************************************** ** 1000-ENDOFJOB-RTN. WRITE CHARGE-REPORT-REC FROM END-OF-JOB-LINE AFTER ADVANCING 2 LINES. 1000-ENDOFJOB-RTN-EXIT. EXIT. *****************************************************************