IDENTIFICATION DIVISION.
        PROGRAM-ID. STEP1.
        AUTHOR. JUSTIN ANDERSON, JONAS WIK, BRAD ROUDEBUSH,OMID KARBASSI
        DATE-WRITTEN. 02/04/2002.
        DATE-COMPILED. 
      *
      ******************************************************************
      *                                                                *
      *                    CUSTOMER REPORT                             *
      *                                                                *
      * PURPOSE: THIS PROGRAM READS DATA FROM DATA FILE AND CHECKS FOR *
      *          DATA VALIDITY.  VALID DATA IS SENT TO THE MASTER FILE *
      *          WHILE INVALID DATA IS SENT TO THE ERROR REPORT.       *
      *                                                                *
      * INPUT:                                                         *
      *              FIELD           COLS.        TYPE                 *
      *        CR-NUMBER              1-4         AN                   *
      *        CR-DESCR               5-20        AN                   *
      *        CR-VENDOR             21-30        AN                   *
      *        CR-PRICE              31-36        AN                   *
      *        CR-QTY-ON-HAND        37-39        N                    *
      *        CR-QTY-ON-ORDER       40-42        N                    *
      *        CR-ROP                43-44        N                    *
      *        CR-YTD-SOLD           46-50        N                    *
      *                                                                *
      * OUTPUT:                                                        *
      *              FIELD             PRINT POSITION                  *
      *        MR-NUMBER              1-4         AN                   *
      *        MR-DESCR               5-20        AN                   *
      *        MR-VENDOR             21-30        AN                   *
      *        MR-PRICE              31-36        AN                   *
      *        MR-QTY-ON-HAND        37-39        N                    *
      *        MR-QTY-ON-ORDER       40-42        N                    *
      *        MR-ROP                43-44        N                    *
      *        MR-YTD-SOLD           46-50        N                    *
      *                                                                *
      *        ER-ITEMNUM                    2                         *
      *        ER-MSG                        15                        *
      *                                                                *
      *        AT THE END OF THE ERROR REPORT THE TOTAL INVALID RECORDS*
      *        IS PRINTED.                                             *
      *                                                                *
      * DUE DATE: 02/06/2002                                           *
      *                                                                *
      ******************************************************************
      *
        ENVIRONMENT DIVISION.
      *
        CONFIGURATION SECTION.
      *
        INPUT-OUTPUT SECTION.
      *
        FILE-CONTROL.
            SELECT STEP1-FILE
               ASSIGN TO STEP1
               ORGANIZATION IS LINE SEQUENTIAL.
      *
            SELECT MASTER-FILE
               ASSIGN TO MASTER.
      *
            SELECT ERROR-REPORT
               ASSIGN TO UT-S-ERREPT.
      *
        DATA DIVISION.
      *
        FILE SECTION.
      *
        FD  STEP1-FILE.
      *
        COPY A:\CS353\RECORD.CPY.
      *
        FD  MASTER-FILE.
      *
        01  MASTER-AREA                          PIC   X(43).
      *
        COPY A:\CS353\PACKED.CPY.
      *
        FD  ERROR-REPORT.
      *
        01  ER-PRINT-AREA                        PIC   X(80).
      *
        WORKING-STORAGE SECTION.
      *
        01  WS-INPUT-OUTPUT-INFO.
            05  STEP1                        PIC X(18)  VALUE
                "A:\CS353\STEP1.DAT".
            05  MASTER                       PIC X(19)  VALUE
                "A:\CS353\MASTER.DAT".
            05  UT-S-ERREPT                  PIC X(22)  VALUE
                "A:\CS353\ERRORREPT.DAT".
      *
       01   WS-CONSTANTS.
      *
            05  WC-EXCEED                    PIC 9(5).
      *       
       01   WS-SWITCHES.
      *
            05  WS-DATA-SW                   PIC X(3)
                              VALUE 'NO '.
            05  WS-EOF-SW                    PIC X(3)
                              VALUE 'NO '.
      *
        01  WS-DATE.
      *
            05  WD-YY                        PIC 99.
            05  WD-MM                        PIC 99.
            05  WD-DD                        PIC 99.
      *
       01  WS-ACCUMULATORS.
      *
      	   05  WA-GOOD-RECORDS               PIC 99.
      	   05  WA-ERROR-COUNT		     PIC 999.
      *
       01  WS-FIELDS.
      *
           05  WF-PAGE-NUMBER           PIC 99.
      *
       01  HDG-1.
           05  HDG-DATE.
               10  HD-MM                PIC 99.
               10                       PIC X VALUE '/'.
               10  HD-DD                PIC 99.
               10                       PIC X VALUE '/'.
               10                       PIC 99 VALUE 20.
               10  HD-YY                PIC 99.
           05                           PIC X(19) VALUE SPACES.
           05                           PIC X(22) VALUE
                 "E R R O R  R E P O R T".
           05                           PIC X(22) VALUE SPACES.
           05                           PIC X(5) VALUE 'PAGE '.
           05  HDG-PAGE-NUMBER          PIC ZZ.
      *
       01  HDG-2.
           05                           PIC X     VALUE SPACES.
           05				PIC X(11) VALUE "ITEM NUMBER".
           05                           PIC X(2)  VALUE SPACES.
           05                           PIC X(18)
                                       VALUE "RECORD DESCRIPTION".
           05				PIC X(48)  VALUE SPACES.
       
       01  ERROR-LINE.
      
           05   FILLER 		        PIC X(4) VALUE SPACES.
           05   ITEMNUM                 PIC X(4).
           05   FILLER                  PIC XX VALUE SPACES.
           05   DESCR                   PIC X(70).
      
       01  TOTAL-LINE.
      *
           05                           PIC X(15) VALUE 
               "VALID RECORDS: ".
           05  TL-GOOD-COUNT            PIC Z9.
           05  FILLER                   PIC X(3) VALUE SPACES.
           05                           PIC X(17) VALUE 
               "INVALID RECORDS: ".
           05  TL-ERROR-COUNT           PIC ZZ9.
           05				PIC X(40) VALUE SPACES.
      *    
       01  END-OF-JOB-LINE.
      *
           05                           PIC X(25) VALUE SPACES.
           05                           PIC X(30) VALUE
               "N O R M A L  E N D  O F  J O B".
           05                           PIC X(25) VALUE SPACES.
      *    
       PROCEDURE DIVISION.
      *
       000-MAIN-LINE-RTN.
      *
      **************************************************************
      *   THIS PARAGRAPH IS THE MAIN MODULE OF THE PROGRAM.  ALL   *
      *   PARAGRAPHS IN THE PROGRAM ARE EXECUTED UNDER THE CONTROL *
      *   OF THIS MODULE.                                          *
      **************************************************************
      *
          PERFORM 100-INIT-RTN THRU 100-INIT-RTN-EXIT
          PERFORM 300-HDG-RTN  THRU 300-HDG-RTN-EXIT
          PERFORM UNTIL WS-EOF-SW = 'YES'
               READ STEP1-FILE
                  AT END MOVE 'YES' TO WS-EOF-SW
                  NOT AT END PERFORM 500-VALID-RTN THRU
                     500-VALID-RTN-EXIT
               END-READ
          END-PERFORM
          PERFORM 400-WRITE-TOTALS-RTN THRU 400-WRITE-TOTALS-RTN-EXIT
          CLOSE ERROR-REPORT
                MASTER-FILE
                STEP1-FILE
          STOP RUN.
      *
       100-INIT-RTN.
      *
      ***************************************************************
      *    CALLED BY 000-MAIN-LINE-RTN.  INITIALIZES VALUES.        *
      ***************************************************************
      *
          OPEN INPUT   STEP1-FILE
               OUTPUT  MASTER-FILE
               OUTPUT  ERROR-REPORT
      *
          INITIALIZE WS-ACCUMULATORS
                     WS-FIELDS
      *
          ACCEPT WS-DATE FROM DATE.
           MOVE WD-MM            TO      HD-MM
           MOVE WD-DD            TO      HD-DD
           MOVE WD-YY            TO      HD-YY.
      *
       100-INIT-RTN-EXIT. EXIT.
      *
       200-ERROR-RTN.
      *
      *****************************************************
      * THIS PARAGRAPH WRITES THE ERROR LINE.  AT THE END *
      * OF THE PROCEDURE THE ERROR LINE FIELDS ARE RE-    *
      * INITIALIZED.  CALLED BY 500-VALID-RTN.            *
      *****************************************************
      *
           WRITE ER-PRINT-AREA FROM ERROR-LINE AFTER ADVANCING 1 LINES
           MOVE SPACES  TO  ITEMNUM
           MOVE SPACES  TO  DESCR.
      *
       200-ERROR-RTN-EXIT. EXIT.
      *
       300-HDG-RTN.
      *
      ***********************************************************
      * THIS PARAGRAPH WRITES THE MAIN HEADING AND COLUMN       *
      * HEADINGS FOR THE PROGRAM.  CALLED BY 000-MAIN-LINE-RTN. *
      ***********************************************************
      *
           ADD 1  TO  WF-PAGE-NUMBER
           MOVE WF-PAGE-NUMBER  TO  HDG-PAGE-NUMBER
           WRITE ER-PRINT-AREA FROM HDG-1 AFTER ADVANCING PAGE
           WRITE ER-PRINT-AREA FROM HDG-2 AFTER ADVANCING 2 LINES.
      *
       300-HDG-RTN-EXIT. EXIT.
      *
      *
       400-WRITE-TOTALS-RTN.
      *
      ***********************************************************
      * THIS PARAGRAPH WRITES THE TOTAL ERROR COUNT AT THE END  *
      * OF THE PROGRAM.  CALLED BY 000-MAIN-LINE-RTN.           *
      ***********************************************************
      *
           MOVE WA-GOOD-RECORDS TO TL-GOOD-COUNT
           MOVE WA-ERROR-COUNT TO TL-ERROR-COUNT
           WRITE ER-PRINT-AREA FROM TOTAL-LINE AFTER ADVANCING 2 LINES
           MOVE SPACES TO ER-PRINT-AREA
           WRITE ER-PRINT-AREA AFTER ADVANCING 2 LINES
           WRITE ER-PRINT-AREA FROM END-OF-JOB-LINE
              AFTER ADVANCING 1 LINES.
      *
       400-WRITE-TOTALS-RTN-EXIT. EXIT.
      *
       500-VALID-RTN.
      *****************************************************************
      * THIS PARAGRAPH CHECKS THE VALIDITY THAT...                    *
      * 1. ALL NUMERIC FIELDS THAT THEY ARE NUMERIC.                  *
      * 2. UNIT PRICE MUST BE $47.50 - $1542.90 INCLUSIVE             *
      * 3. QUANTITY ON ORDER CANNOT EXCEED 525                        *
      * 4. REORDER POINT CANNOT BE LESS THAN 75                       *
      * 5. DO THE PRESENCE TEST FOR ITEM NUMBER                       *
      * 6. DO ABSENCE TEST FOR ITEM NUMBER                            *
      *****************************************************************

       IF CR-NUMBER = '    '
          MOVE CR-NUMBER TO ITEMNUM
          MOVE "ITEM NOT PRESENT" TO DESCR
          MOVE 'YES' TO WS-DATA-SW
          PERFORM 200-ERROR-RTN THRU 200-ERROR-RTN-EXIT       
       END-IF

       IF CR-PRICE NOT NUMERIC
          MOVE CR-NUMBER TO ITEMNUM
          MOVE "UNIT PRICE IS NOT NUMERIC" TO DESCR
          MOVE 'YES' TO WS-DATA-SW
          PERFORM 200-ERROR-RTN THRU 200-ERROR-RTN-EXIT 
       END-IF

       IF CR-PRICE < 47.50 OR CR-PRICE > 1542.90
          MOVE CR-NUMBER TO ITEMNUM
          MOVE "UNIT PRICE IS OUT OF RANGE" TO DESCR
          MOVE 'YES' TO WS-DATA-SW
          PERFORM 200-ERROR-RTN THRU 200-ERROR-RTN-EXIT 
       END-IF

       IF CR-QTY-ON-HAND NOT NUMERIC
          MOVE CR-NUMBER TO ITEMNUM
          MOVE "QUANTITY ON HAND IS NOT NUMERIC" TO DESCR
          MOVE 'YES' TO WS-DATA-SW
          PERFORM 200-ERROR-RTN THRU 200-ERROR-RTN-EXIT 
       END-IF

       IF CR-QTY-ON-ORDER NOT NUMERIC
          MOVE CR-NUMBER TO ITEMNUM
          MOVE "QUANTITY ON ORDER IS NOT NUMERIC" TO DESCR
          MOVE 'YES' TO WS-DATA-SW
          PERFORM 200-ERROR-RTN THRU 200-ERROR-RTN-EXIT 
       END-IF

       IF CR-QTY-ON-ORDER > 525       
          MOVE CR-NUMBER TO ITEMNUM
          MOVE "QUANTITY ON ORDER IS TOO LARGE" TO DESCR
          MOVE 'YES' TO WS-DATA-SW
          PERFORM 200-ERROR-RTN THRU 200-ERROR-RTN-EXIT 
       END-IF

       IF CR-ROP NOT NUMERIC
          MOVE CR-NUMBER TO ITEMNUM
          MOVE "REORDER POINT IS NOT NUMERIC" TO DESCR
          MOVE 'YES' TO WS-DATA-SW
          PERFORM 200-ERROR-RTN THRU 200-ERROR-RTN-EXIT 
       END-IF

       IF CR-ROP < 75
          MOVE CR-NUMBER TO ITEMNUM
          MOVE "REORDER POINT IS TOO SMALL" TO DESCR
          MOVE 'YES' TO WS-DATA-SW
          PERFORM 200-ERROR-RTN THRU 200-ERROR-RTN-EXIT 
       END-IF

       IF CR-YTD-SOLD NOT NUMERIC
          MOVE CR-NUMBER TO ITEMNUM
          MOVE "YEAR TO DATE SOLD IS NOT NUMERIC" TO DESCR
          MOVE 'YES' TO WS-DATA-SW
          PERFORM 200-ERROR-RTN THRU 200-ERROR-RTN-EXIT 
       END-IF

       IF BLANKSPACE <> ' '
          MOVE CR-NUMBER TO ITEMNUM
          MOVE "INPUT COLUMN 45 ISN'T EMPTY" TO DESCR
          MOVE 'YES' TO WS-DATA-SW
          PERFORM 200-ERROR-RTN THRU 200-ERROR-RTN-EXIT 
       END-IF

       IF WS-DATA-SW = 'NO '
          PERFORM 600-MOVE-WRITE-DATA-RTN THRU
             600-MOVE-WRITE-DATA-RTN-EXIT
       ELSE
          ADD 1 TO WA-ERROR-COUNT
       END-IF
       MOVE 'NO ' TO WS-DATA-SW.
      *
       500-VALID-RTN-EXIT. EXIT.
      *
       600-MOVE-WRITE-DATA-RTN.
      *
      ******************************************************************
      *  THIS METHOD WRITES ALL VALID RECORDS ON TO THE MASTER FILE.   *
      *  THE METHOD WILL BE CALLED BY 500-VALID-RTN.                   *
      ******************************************************************
      *
         MOVE CR-NUMBER       TO MR-NUMBER
         MOVE CR-DESCR        TO MR-DESCR
         MOVE CR-VENDOR       TO MR-VENDOR
         MOVE CR-PRICE        TO MR-PRICE
         MOVE CR-QTY-ON-HAND  TO MR-QTY-ON-HAND
         MOVE CR-QTY-ON-ORDER TO MR-QTY-ON-ORDER
         MOVE CR-ROP          TO MR-ROP
         MOVE CR-YTD-SOLD     TO MR-YTD-SOLD

         WRITE MASTER-AREA FROM MASTER-RECORD.
         ADD 1 TO WA-GOOD-RECORDS.
      *
       600-MOVE-WRITE-DATA-RTN-EXIT. EXIT.
      *