Files

188 lines
6.2 KiB
COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. CRDRPT.
* GENERATE MONTHLY STATEMENT AND SUMMARY REPORT
* INPUT: BILLING RESULT FROM CRDCALC
* OUTPUT: MONTHLY STATEMENT (PER CARD)
* SUMMARY REPORT (AGGREGATE)
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CALC-IN ASSIGN TO "BILLING"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT STMT-OUT ASSIGN TO "STMT"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT SUMM-OUT ASSIGN TO "SUMMARY"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD CALC-IN.
01 CALC-LINE PIC X(200).
FD STMT-OUT.
01 STMT-LINE PIC X(200).
FD SUMM-OUT.
01 SUMM-LINE PIC X(200).
WORKING-STORAGE SECTION.
01 WS-SWITCHES.
05 WS-EOF-CALC PIC X VALUE 'N'.
88 WS-END-OF-CALC VALUE 'Y'.
01 WS-COUNTERS.
05 WS-LINE-COUNT PIC 9(5) VALUE 0.
05 WS-CARD-COUNT PIC 9(5) VALUE 0.
05 WS-DETAIL-COUNT PIC 9(5) VALUE 0.
01 WS-REPORT-DATE.
05 WS-RPT-YYYY PIC 9(4).
05 WS-RPT-MM PIC 9(2).
05 WS-RPT-DD PIC 9(2).
01 WS-HEADER1.
05 WS-H1-DATE PIC X(8).
05 WS-H1-SPACE PIC X(5) VALUE SPACES.
05 WS-H1-TITLE PIC X(30)
VALUE 'MONTHLY CREDIT CARD STATEMENT'.
01 WS-HEADER2.
05 WS-H2-FILLER PIC X(50) VALUE ALL '-'.
01 WS-DETAIL-LINE.
05 WS-DL-CARD PIC X(16).
05 WS-DL-SP1 PIC X(2) VALUE SPACES.
05 WS-DL-TYPE PIC X(8).
05 WS-DL-SP2 PIC X(2) VALUE SPACES.
05 WS-DL-AMOUNT PIC -(9)9.99.
05 WS-DL-SP3 PIC X(2) VALUE SPACES.
05 WS-DL-INTEREST PIC -(7)9.99.
05 WS-DL-SP4 PIC X(2) VALUE SPACES.
05 WS-DL-FEE PIC -(7)9.99.
05 WS-DL-SP5 PIC X(2) VALUE SPACES.
05 WS-DL-DESC PIC X(30).
01 WS-SUMMARY-LINE.
05 WS-SL-CARD PIC X(16).
05 WS-SL-SP1 PIC X(2) VALUE SPACES.
05 WS-SL-TOTAL PIC -(9)9.99.
05 WS-SL-SP2 PIC X(2) VALUE SPACES.
05 WS-SL-INT PIC -(9)9.99.
05 WS-SL-SP3 PIC X(2) VALUE SPACES.
05 WS-SL-FEE PIC -(9)9.99.
05 WS-SL-SP4 PIC X(2) VALUE SPACES.
05 WS-SL-GRAND PIC -(9)9.99.
05 WS-SL-SP5 PIC X(2) VALUE SPACES.
05 WS-SL-TXCNT PIC Z(4)9.
01 WS-TRAILER.
05 WS-TR-TOTAL-CARDS PIC Z(5)9.
05 WS-TR-SP1 PIC X(5) VALUE SPACES.
05 WS-TR-TOTAL-LINES PIC Z(5)9.
05 WS-TR-SP2 PIC X(5) VALUE SPACES.
05 WS-TR-MSG PIC X(20)
VALUE 'END OF REPORT'.
* PARSE FIELDS FROM INPUT LINE
01 WS-PARSE.
05 WS-P-CARD PIC 9(16).
05 WS-P-TYPE PIC X.
05 WS-P-AMOUNT PIC S9(9)V99.
05 WS-P-INTEREST PIC S9(7)V99.
05 WS-P-FEE PIC S9(7)V99.
05 WS-P-DESC PIC X(30).
05 WS-P-IS-SUMMARY PIC X VALUE 'N'.
88 WS-P-SUMMARY-LINE VALUE 'Y'.
05 WS-PARSE-REMAIN PIC X(150).
PROCEDURE DIVISION.
0000-MAIN.
OPEN INPUT CALC-IN
OUTPUT STMT-OUT
OUTPUT SUMM-OUT.
ACCEPT WS-REPORT-DATE FROM DATE YYYYMMDD.
MOVE WS-REPORT-DATE(1:4) TO WS-RPT-YYYY.
MOVE WS-REPORT-DATE(5:2) TO WS-RPT-MM.
MOVE WS-REPORT-DATE(7:2) TO WS-RPT-DD.
MOVE WS-REPORT-DATE TO WS-H1-DATE.
PERFORM 1000-WRITE-HEADER.
MOVE 0 TO WS-CARD-COUNT WS-DETAIL-COUNT.
PERFORM 2000-PROCESS-CALC UNTIL WS-END-OF-CALC.
PERFORM 3000-WRITE-TRAILER.
CLOSE CALC-IN STMT-OUT SUMM-OUT.
DISPLAY 'CRDRPT: ' WS-CARD-COUNT ' CARDS, '
WS-DETAIL-COUNT ' LINES'.
GOBACK.
1000-WRITE-HEADER.
MOVE SPACES TO STMT-LINE.
WRITE STMT-LINE FROM WS-HEADER1.
MOVE SPACES TO STMT-LINE.
WRITE STMT-LINE FROM WS-HEADER2.
MOVE SPACES TO STMT-LINE.
2000-PROCESS-CALC.
READ CALC-IN
AT END SET WS-END-OF-CALC TO TRUE
NOT AT END
ADD 1 TO WS-LINE-COUNT
PERFORM 2100-PARSE-LINE
END-READ.
2100-PARSE-LINE.
* CHECK IF THIS IS A GRAND TOTAL LINE
IF CALC-LINE(1:11) = 'GRAND TOTAL'
MOVE CALC-LINE TO SUMM-LINE
WRITE SUMM-LINE
EXIT PARAGRAPH
END-IF.
* CHECK IF THIS IS A CARD SUMMARY LINE
MOVE CALC-LINE TO WS-PARSE-REMAIN.
UNSTRING WS-PARSE-REMAIN DELIMITED BY SPACE
INTO WS-P-CARD WS-P-AMOUNT WS-P-INTEREST
WS-P-FEE WS-P-AMOUNT WS-P-DESC
END-UNSTRING.
* IF FIRST FIELD IS 16-DIGIT NUMBER AND HAS TX-COUNT
* AT END, IT'S SUMMARY; OTHERWISE DETAIL
IF CALC-LINE(18:1) NOT = ' '
PERFORM 2200-WRITE-DETAIL
ELSE
PERFORM 2300-WRITE-CARD-SUMMARY.
2200-WRITE-DETAIL.
MOVE CALC-LINE TO WS-DETAIL-LINE.
MOVE WS-DETAIL-LINE TO STMT-LINE.
WRITE STMT-LINE.
ADD 1 TO WS-DETAIL-COUNT.
2300-WRITE-CARD-SUMMARY.
MOVE CALC-LINE TO WS-SUMMARY-LINE.
MOVE WS-SUMMARY-LINE TO SUMM-LINE.
WRITE SUMM-LINE.
MOVE WS-SUMMARY-LINE TO STMT-LINE.
WRITE STMT-LINE.
MOVE SPACES TO STMT-LINE.
WRITE STMT-LINE.
ADD 1 TO WS-CARD-COUNT.
3000-WRITE-TRAILER.
MOVE SPACES TO STMT-LINE.
WRITE STMT-LINE.
MOVE WS-CARD-COUNT TO WS-TR-TOTAL-CARDS.
MOVE WS-LINE-COUNT TO WS-TR-TOTAL-LINES.
WRITE STMT-LINE FROM WS-TRAILER.
MOVE WS-TRAILER TO SUMM-LINE.
WRITE SUMM-LINE.