****************************************************************** * Program : COBIL00C.CBL * Application : CardDemo * Type : CICS COBOL Program * Function : Bill Payment - Pay account balance in full and a * tractionsaction for the online bill payment. ****************************************************************** * Copyright Amazon.com, Inc. or its affiliates. * All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific * language governing permissions and limitations under the License ****************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. COBIL00C. AUTHOR. AWS. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. *----------------------------------------------------------------* * WORKING STORAGE SECTION *----------------------------------------------------------------* WORKING-STORAGE SECTION. 01 WS-VARIABLES. 05 WS-PGMNAME PIC X(08) VALUE 'COBIL00C'. 05 WS-TRANID PIC X(04) VALUE 'CB00'. 05 WS-MESSAGE PIC X(80) VALUE SPACES. 05 WS-TRANSACT-FILE PIC X(08) VALUE 'TRANSACT'. 05 WS-ACCTDAT-FILE PIC X(08) VALUE 'ACCTDAT '. 05 WS-CXACAIX-FILE PIC X(08) VALUE 'CXACAIX '. 05 WS-ERR-FLG PIC X(01) VALUE 'N'. 88 ERR-FLG-ON VALUE 'Y'. 88 ERR-FLG-OFF VALUE 'N'. 05 WS-RESP-CD PIC S9(09) COMP VALUE ZEROS. 05 WS-REAS-CD PIC S9(09) COMP VALUE ZEROS. 05 WS-USR-MODIFIED PIC X(01) VALUE 'N'. 88 USR-MODIFIED-YES VALUE 'Y'. 88 USR-MODIFIED-NO VALUE 'N'. 05 WS-CONF-PAY-FLG PIC X(01) VALUE 'N'. 88 CONF-PAY-YES VALUE 'Y'. 88 CONF-PAY-NO VALUE 'N'. 05 WS-TRAN-AMT PIC +99999999.99. 05 WS-CURR-BAL PIC +9999999999.99. 05 WS-TRAN-ID-NUM PIC 9(16) VALUE ZEROS. 05 WS-TRAN-DATE PIC X(08) VALUE '00/00/00'. 05 WS-ABS-TIME PIC S9(15) COMP-3 VALUE 0. 05 WS-CUR-DATE-X10 PIC X(10) VALUE SPACES. 05 WS-CUR-TIME-X08 PIC X(08) VALUE SPACES. COPY COCOM01Y. 05 CDEMO-CB00-INFO. 10 CDEMO-CB00-TRNID-FIRST PIC X(16). 10 CDEMO-CB00-TRNID-LAST PIC X(16). 10 CDEMO-CB00-PAGE-NUM PIC 9(08). 10 CDEMO-CB00-NEXT-PAGE-FLG PIC X(01) VALUE 'N'. 88 NEXT-PAGE-YES VALUE 'Y'. 88 NEXT-PAGE-NO VALUE 'N'. 10 CDEMO-CB00-TRN-SEL-FLG PIC X(01). 10 CDEMO-CB00-TRN-SELECTED PIC X(16). COPY COBIL00. COPY COTTL01Y. COPY CSDAT01Y. COPY CSMSG01Y. COPY CVACT01Y. COPY CVACT03Y. COPY CVTRA05Y. COPY DFHAID. COPY DFHBMSCA. *----------------------------------------------------------------* * LINKAGE SECTION *----------------------------------------------------------------* LINKAGE SECTION. 01 DFHCOMMAREA. 05 LK-COMMAREA PIC X(01) OCCURS 1 TO 32767 TIMES DEPENDING ON EIBCALEN. *----------------------------------------------------------------* * PROCEDURE DIVISION *----------------------------------------------------------------* PROCEDURE DIVISION. MAIN-PARA. SET ERR-FLG-OFF TO TRUE SET USR-MODIFIED-NO TO TRUE MOVE SPACES TO WS-MESSAGE ERRMSGO OF COBIL0AO IF EIBCALEN = 0 MOVE 'COSGN00C' TO CDEMO-TO-PROGRAM PERFORM RETURN-TO-PREV-SCREEN ELSE MOVE DFHCOMMAREA(1:EIBCALEN) TO CARDDEMO-COMMAREA IF NOT CDEMO-PGM-REENTER SET CDEMO-PGM-REENTER TO TRUE MOVE LOW-VALUES TO COBIL0AO MOVE -1 TO ACTIDINL OF COBIL0AI IF CDEMO-CB00-TRN-SELECTED NOT = SPACES AND LOW-VALUES MOVE CDEMO-CB00-TRN-SELECTED TO ACTIDINI OF COBIL0AI PERFORM PROCESS-ENTER-KEY END-IF PERFORM SEND-BILLPAY-SCREEN ELSE PERFORM RECEIVE-BILLPAY-SCREEN EVALUATE EIBAID WHEN DFHENTER PERFORM PROCESS-ENTER-KEY WHEN DFHPF3 IF CDEMO-FROM-PROGRAM = SPACES OR LOW-VALUES MOVE 'COMEN01C' TO CDEMO-TO-PROGRAM ELSE MOVE CDEMO-FROM-PROGRAM TO CDEMO-TO-PROGRAM END-IF PERFORM RETURN-TO-PREV-SCREEN WHEN DFHPF4 PERFORM CLEAR-CURRENT-SCREEN WHEN OTHER MOVE 'Y' TO WS-ERR-FLG MOVE CCDA-MSG-INVALID-KEY TO WS-MESSAGE PERFORM SEND-BILLPAY-SCREEN END-EVALUATE END-IF END-IF EXEC CICS RETURN TRANSID (WS-TRANID) COMMAREA (CARDDEMO-COMMAREA) END-EXEC. *----------------------------------------------------------------* * PROCESS-ENTER-KEY *----------------------------------------------------------------* PROCESS-ENTER-KEY. SET CONF-PAY-NO TO TRUE EVALUATE TRUE WHEN ACTIDINI OF COBIL0AI = SPACES OR LOW-VALUES MOVE 'Y' TO WS-ERR-FLG MOVE 'Acct ID can NOT be empty...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN WHEN OTHER CONTINUE END-EVALUATE IF NOT ERR-FLG-ON MOVE ACTIDINI OF COBIL0AI TO ACCT-ID XREF-ACCT-ID EVALUATE CONFIRMI OF COBIL0AI WHEN 'Y' WHEN 'y' SET CONF-PAY-YES TO TRUE PERFORM READ-ACCTDAT-FILE WHEN 'N' WHEN 'n' PERFORM CLEAR-CURRENT-SCREEN MOVE 'Y' TO WS-ERR-FLG WHEN SPACES WHEN LOW-VALUES PERFORM READ-ACCTDAT-FILE WHEN OTHER MOVE 'Y' TO WS-ERR-FLG MOVE 'Invalid value. Valid values are (Y/N)...' TO WS-MESSAGE MOVE -1 TO CONFIRML OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN END-EVALUATE MOVE ACCT-CURR-BAL TO WS-CURR-BAL MOVE WS-CURR-BAL TO CURBALI OF COBIL0AI END-IF IF NOT ERR-FLG-ON IF ACCT-CURR-BAL <= ZEROS AND ACTIDINI OF COBIL0AI NOT = SPACES AND LOW-VALUES MOVE 'Y' TO WS-ERR-FLG MOVE 'You have nothing to pay...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN END-IF END-IF IF NOT ERR-FLG-ON IF CONF-PAY-YES PERFORM READ-CXACAIX-FILE MOVE HIGH-VALUES TO TRAN-ID PERFORM STARTBR-TRANSACT-FILE PERFORM READPREV-TRANSACT-FILE PERFORM ENDBR-TRANSACT-FILE MOVE TRAN-ID TO WS-TRAN-ID-NUM ADD 1 TO WS-TRAN-ID-NUM INITIALIZE TRAN-RECORD MOVE WS-TRAN-ID-NUM TO TRAN-ID MOVE '02' TO TRAN-TYPE-CD MOVE 2 TO TRAN-CAT-CD MOVE 'POS TERM' TO TRAN-SOURCE MOVE 'BILL PAYMENT - ONLINE' TO TRAN-DESC MOVE ACCT-CURR-BAL TO TRAN-AMT MOVE XREF-CARD-NUM TO TRAN-CARD-NUM MOVE 999999999 TO TRAN-MERCHANT-ID MOVE 'BILL PAYMENT' TO TRAN-MERCHANT-NAME MOVE 'N/A' TO TRAN-MERCHANT-CITY MOVE 'N/A' TO TRAN-MERCHANT-ZIP PERFORM GET-CURRENT-TIMESTAMP MOVE WS-TIMESTAMP TO TRAN-ORIG-TS TRAN-PROC-TS PERFORM WRITE-TRANSACT-FILE COMPUTE ACCT-CURR-BAL = ACCT-CURR-BAL - TRAN-AMT PERFORM UPDATE-ACCTDAT-FILE ELSE MOVE 'Confirm to make a bill payment...' TO WS-MESSAGE MOVE -1 TO CONFIRML OF COBIL0AI END-IF PERFORM SEND-BILLPAY-SCREEN END-IF. *----------------------------------------------------------------* * GET-CURRENT-TIMESTAMP *----------------------------------------------------------------* GET-CURRENT-TIMESTAMP. EXEC CICS ASKTIME ABSTIME(WS-ABS-TIME) END-EXEC EXEC CICS FORMATTIME ABSTIME(WS-ABS-TIME) YYYYMMDD(WS-CUR-DATE-X10) DATESEP('-') TIME(WS-CUR-TIME-X08) TIMESEP(':') END-EXEC INITIALIZE WS-TIMESTAMP MOVE WS-CUR-DATE-X10 TO WS-TIMESTAMP(01:10) MOVE WS-CUR-TIME-X08 TO WS-TIMESTAMP(12:08) MOVE ZEROS TO WS-TIMESTAMP-TM-MS6 . *----------------------------------------------------------------* * RETURN-TO-PREV-SCREEN *----------------------------------------------------------------* RETURN-TO-PREV-SCREEN. IF CDEMO-TO-PROGRAM = LOW-VALUES OR SPACES MOVE 'COSGN00C' TO CDEMO-TO-PROGRAM END-IF MOVE WS-TRANID TO CDEMO-FROM-TRANID MOVE WS-PGMNAME TO CDEMO-FROM-PROGRAM MOVE ZEROS TO CDEMO-PGM-CONTEXT EXEC CICS XCTL PROGRAM(CDEMO-TO-PROGRAM) COMMAREA(CARDDEMO-COMMAREA) END-EXEC. *----------------------------------------------------------------* * SEND-BILLPAY-SCREEN *----------------------------------------------------------------* SEND-BILLPAY-SCREEN. PERFORM POPULATE-HEADER-INFO MOVE WS-MESSAGE TO ERRMSGO OF COBIL0AO EXEC CICS SEND MAP('COBIL0A') MAPSET('COBIL00') FROM(COBIL0AO) ERASE CURSOR END-EXEC. *----------------------------------------------------------------* * RECEIVE-BILLPAY-SCREEN *----------------------------------------------------------------* RECEIVE-BILLPAY-SCREEN. EXEC CICS RECEIVE MAP('COBIL0A') MAPSET('COBIL00') INTO(COBIL0AI) RESP(WS-RESP-CD) RESP2(WS-REAS-CD) END-EXEC. *----------------------------------------------------------------* * POPULATE-HEADER-INFO *----------------------------------------------------------------* POPULATE-HEADER-INFO. MOVE FUNCTION CURRENT-DATE TO WS-CURDATE-DATA MOVE CCDA-TITLE01 TO TITLE01O OF COBIL0AO MOVE CCDA-TITLE02 TO TITLE02O OF COBIL0AO MOVE WS-TRANID TO TRNNAMEO OF COBIL0AO MOVE WS-PGMNAME TO PGMNAMEO OF COBIL0AO MOVE WS-CURDATE-MONTH TO WS-CURDATE-MM MOVE WS-CURDATE-DAY TO WS-CURDATE-DD MOVE WS-CURDATE-YEAR(3:2) TO WS-CURDATE-YY MOVE WS-CURDATE-MM-DD-YY TO CURDATEO OF COBIL0AO MOVE WS-CURTIME-HOURS TO WS-CURTIME-HH MOVE WS-CURTIME-MINUTE TO WS-CURTIME-MM MOVE WS-CURTIME-SECOND TO WS-CURTIME-SS MOVE WS-CURTIME-HH-MM-SS TO CURTIMEO OF COBIL0AO. *----------------------------------------------------------------* * READ-ACCTDAT-FILE *----------------------------------------------------------------* READ-ACCTDAT-FILE. EXEC CICS READ DATASET (WS-ACCTDAT-FILE) INTO (ACCOUNT-RECORD) LENGTH (LENGTH OF ACCOUNT-RECORD) RIDFLD (ACCT-ID) KEYLENGTH (LENGTH OF ACCT-ID) UPDATE RESP (WS-RESP-CD) RESP2 (WS-REAS-CD) END-EXEC EVALUATE WS-RESP-CD WHEN DFHRESP(NORMAL) CONTINUE WHEN DFHRESP(NOTFND) MOVE 'Y' TO WS-ERR-FLG MOVE 'Account ID NOT found...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN WHEN OTHER DISPLAY 'RESP:' WS-RESP-CD 'REAS:' WS-REAS-CD MOVE 'Y' TO WS-ERR-FLG MOVE 'Unable to lookup Account...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN END-EVALUATE. *----------------------------------------------------------------* * UPDATE-ACCTDAT-FILE *----------------------------------------------------------------* UPDATE-ACCTDAT-FILE. EXEC CICS REWRITE DATASET (WS-ACCTDAT-FILE) FROM (ACCOUNT-RECORD) LENGTH (LENGTH OF ACCOUNT-RECORD) RESP (WS-RESP-CD) RESP2 (WS-REAS-CD) END-EXEC EVALUATE WS-RESP-CD WHEN DFHRESP(NORMAL) CONTINUE WHEN DFHRESP(NOTFND) MOVE 'Y' TO WS-ERR-FLG MOVE 'Account ID NOT found...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN WHEN OTHER DISPLAY 'RESP:' WS-RESP-CD 'REAS:' WS-REAS-CD MOVE 'Y' TO WS-ERR-FLG MOVE 'Unable to Update Account...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN END-EVALUATE. *----------------------------------------------------------------* * READ-CXACAIX-FILE *----------------------------------------------------------------* READ-CXACAIX-FILE. EXEC CICS READ DATASET (WS-CXACAIX-FILE) INTO (CARD-XREF-RECORD) LENGTH (LENGTH OF CARD-XREF-RECORD) RIDFLD (XREF-ACCT-ID) KEYLENGTH (LENGTH OF XREF-ACCT-ID) RESP (WS-RESP-CD) RESP2 (WS-REAS-CD) END-EXEC EVALUATE WS-RESP-CD WHEN DFHRESP(NORMAL) CONTINUE WHEN DFHRESP(NOTFND) MOVE 'Y' TO WS-ERR-FLG MOVE 'Account ID NOT found...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN WHEN OTHER DISPLAY 'RESP:' WS-RESP-CD 'REAS:' WS-REAS-CD MOVE 'Y' TO WS-ERR-FLG MOVE 'Unable to lookup XREF AIX file...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN END-EVALUATE. *----------------------------------------------------------------* * STARTBR-TRANSACT-FILE *----------------------------------------------------------------* STARTBR-TRANSACT-FILE. EXEC CICS STARTBR DATASET (WS-TRANSACT-FILE) RIDFLD (TRAN-ID) KEYLENGTH (LENGTH OF TRAN-ID) RESP (WS-RESP-CD) RESP2 (WS-REAS-CD) END-EXEC EVALUATE WS-RESP-CD WHEN DFHRESP(NORMAL) CONTINUE WHEN DFHRESP(NOTFND) MOVE 'Y' TO WS-ERR-FLG MOVE 'Transaction ID NOT found...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN WHEN OTHER DISPLAY 'RESP:' WS-RESP-CD 'REAS:' WS-REAS-CD MOVE 'Y' TO WS-ERR-FLG MOVE 'Unable to lookup Transaction...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN END-EVALUATE. *----------------------------------------------------------------* * READPREV-TRANSACT-FILE *----------------------------------------------------------------* READPREV-TRANSACT-FILE. EXEC CICS READPREV DATASET (WS-TRANSACT-FILE) INTO (TRAN-RECORD) LENGTH (LENGTH OF TRAN-RECORD) RIDFLD (TRAN-ID) KEYLENGTH (LENGTH OF TRAN-ID) RESP (WS-RESP-CD) RESP2 (WS-REAS-CD) END-EXEC EVALUATE WS-RESP-CD WHEN DFHRESP(NORMAL) CONTINUE WHEN DFHRESP(ENDFILE) MOVE ZEROS TO TRAN-ID WHEN OTHER DISPLAY 'RESP:' WS-RESP-CD 'REAS:' WS-REAS-CD MOVE 'Y' TO WS-ERR-FLG MOVE 'Unable to lookup Transaction...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN END-EVALUATE. *----------------------------------------------------------------* * ENDBR-TRANSACT-FILE *----------------------------------------------------------------* ENDBR-TRANSACT-FILE. EXEC CICS ENDBR DATASET (WS-TRANSACT-FILE) END-EXEC. *----------------------------------------------------------------* * WRITE-TRANSACT-FILE *----------------------------------------------------------------* WRITE-TRANSACT-FILE. EXEC CICS WRITE DATASET (WS-TRANSACT-FILE) FROM (TRAN-RECORD) LENGTH (LENGTH OF TRAN-RECORD) RIDFLD (TRAN-ID) KEYLENGTH (LENGTH OF TRAN-ID) RESP (WS-RESP-CD) RESP2 (WS-REAS-CD) END-EXEC EVALUATE WS-RESP-CD WHEN DFHRESP(NORMAL) PERFORM INITIALIZE-ALL-FIELDS MOVE SPACES TO WS-MESSAGE MOVE DFHGREEN TO ERRMSGC OF COBIL0AO STRING 'Payment successful. ' DELIMITED BY SIZE ' Your Transaction ID is ' DELIMITED BY SIZE TRAN-ID DELIMITED BY SPACE '.' DELIMITED BY SIZE INTO WS-MESSAGE PERFORM SEND-BILLPAY-SCREEN WHEN DFHRESP(DUPKEY) WHEN DFHRESP(DUPREC) MOVE 'Y' TO WS-ERR-FLG MOVE 'Tran ID already exist...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN WHEN OTHER DISPLAY 'RESP:' WS-RESP-CD 'REAS:' WS-REAS-CD MOVE 'Y' TO WS-ERR-FLG MOVE 'Unable to Add Bill pay Transaction...' TO WS-MESSAGE MOVE -1 TO ACTIDINL OF COBIL0AI PERFORM SEND-BILLPAY-SCREEN END-EVALUATE. *----------------------------------------------------------------* * CLEAR-CURRENT-SCREEN *----------------------------------------------------------------* CLEAR-CURRENT-SCREEN. PERFORM INITIALIZE-ALL-FIELDS PERFORM SEND-BILLPAY-SCREEN. *----------------------------------------------------------------* * INITIALIZE-ALL-FIELDS *----------------------------------------------------------------* INITIALIZE-ALL-FIELDS. MOVE -1 TO ACTIDINL OF COBIL0AI MOVE SPACES TO ACTIDINI OF COBIL0AI CURBALI OF COBIL0AI CONFIRMI OF COBIL0AI WS-MESSAGE. * * Ver: CardDemo_v1.0-15-g27d6c6f-68 Date: 2022-07-19 23:12:32 CDT *