188 lines
6.2 KiB
COBOL
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.
|