This document is a COBOL program (RPR6621F) that formats franchise service plan sales and refund data from one file format (SCFRNSR2) into another (SCSALE) for Radio Shack. It opens and reads input and output files, sets up record keys, and processes each ticket by reading records, accumulating fields, and writing formatted records to the output file. It performs validation checks and outputs error messages.
In this presentation, Siddhant introduces IoT and associated trends. Siddhant is interested in IoT applications in the Home automation space where he wants to use sensors to monitor energy consumption and health of family members. He also wants to make the entire home intelligent by connecting things with sensors.
In this presentation, Siddhant introduces IoT and associated trends. Siddhant is interested in IoT applications in the Home automation space where he wants to use sensors to monitor energy consumption and health of family members. He also wants to make the entire home intelligent by connecting things with sensors.
Slides from OpenWorld. Flashback has been around for long time yet people assume it should entirely within the realm of the DBA. But with modern development techniques such as continuous integration/continuous deployment, flashback actually is a perfect for *developers*
1. COBOL Program RPR6621F
Project: RSSP Franchise Service Plan Automation
DEVELOPED BY APPROVED BY
NAME Jon Fortman Tim Reagan
ROLE SME/Developer Asst. Dir.
2. ******************************************************************
IDENTIFICATION DIVISION.
******************************************************************
PROGRAM-ID. RPR6621F.
AUTHOR. JON FORTMAN.
DATE-WRITTEN. MAR 2015.
DATE-COMPILED.
*INSTALLATION. RADIOSHACK TECHNOLOGY SERVICES.
*COPYRIGHT (C) 2015,RADIOSHACK TECHNOLOGY SERVICES
*SECURITY. RACF.
*REMARKS.
******************************************************************
* C O N T R A C T S E R V I C E S
******************************************************************
*
* RADIO SHACK FRANCHISE SERVICE PLAN SALES/REFUNDS
*
******************************************************************
* MODULE RESPONSIBLE FOR FORMATTING THE FILE FROM RPR6620F INTO
* SCSALE COPYBOOK FORMAT [UNIT 010118 DR FORMAT].
*
* UNIT: 0 1 0 1 1 8 ONLY
******************************************************************
ENVIRONMENT DIVISION.
******************************************************************
CONFIGURATION SECTION.
*SOURCE-COMPUTER. IBM-ZOS WITH DEBUGGING MODE.
SOURCE-COMPUTER. IBM-ZOS.
OBJECT-COMPUTER. IBM-ZOS.
******************************************************************
INPUT-OUTPUT SECTION.
******************************************************************
FILE-CONTROL.
SELECT SCFRNSR2-IN ASSIGN TO SCFRNS2I.
SELECT SCSALE-OUT ASSIGN TO SCSALEO.
SELECT CONTROL-FILE ASSIGN TO CTRLVSM
FILE STATUS WS-CTRL-STATUS
RECORD KEY CTRL-FILE-KEYS
ORGANIZATION INDEXED
ACCESS RANDOM.
******************************************************************
DATA DIVISION.
******************************************************************
FILE SECTION.
*--------------------------------------------------------------
* INPUT FILE OF FRANCHISE SERVICE PLAN SALES/REFUNDS
*--------------------------------------------------------------
FD SCFRNSR2-IN
RECORDING MODE F
BLOCK CONTAINS 0 RECORDS
DATA RECORD IS SCFRNSR2-IN-REC.
01 SCFRNSR2-IN-REC.
COPY SCFRNSR2 REPLACING ==:F:== BY ==FI==.
FD SCSALE-OUT
RECORDING MODE IS F
BLOCK CONTAINS 0 RECORDS
DATA RECORD IS SCSALE-OUT-RECORD.
01 SCSALE-OUT-RECORD PIC X(500).
FD CONTROL-FILE
RECORD CONTAINS 250 CHARACTERS.
01 SCCTRL-CONTROL-RECORD.
3. COPY SCCTRL REPLACING ==:CTRL:== BY ==CTRL==.
****************************************************************
WORKING-STORAGE SECTION.
****************************************************************
01 SCSALE-OUT-REC.
COPY SCSALE REPLACING ==:SALE:== BY ==SALE==.
01 SCFRNSR2-PREV-REC.
COPY SCFRNSR2 REPLACING ==:F:== BY ==FP==.
01 MODULE-LIT-NAME-AUD PIC X(50)
VALUE ' COBOL PROGRAM RPR6621F'.
01 WS-ERR-MSG1 PIC X(85) VALUE SPACES.
01 WS-ERR-MSG2 PIC X(85) VALUE SPACES.
01 WS-ERR-MSG3 PIC X(85) VALUE SPACES.
01 WS-ERR-MSG4 PIC X(85) VALUE SPACES.
01 SYSOUT-TOTAL-LINE.
05 SYSOUT-NBR PIC ZZZ,ZZZ,ZZ9-.
05 F PIC X(1) VALUE SPACES.
05 SYSOUT-MSG PIC X(80) VALUE SPACES.
01 WS-COUNTERS.
05 WS-SCFRNSR2-IN-CNT PIC S9(7) COMP-3 VALUE ZERO.
05 WS-SCSALE-OUT-CNT PIC S9(7) COMP-3 VALUE ZERO.
05 WS-B-REC-OUT-CNT PIC S9(7) COMP-3 VALUE ZERO.
05 WS-BB-REC-OUT-CNT PIC S9(7) COMP-3 VALUE ZERO.
05 WS-BD-REC-OUT-CNT PIC S9(7) COMP-3 VALUE ZERO.
05 WS-BE-REC-OUT-CNT PIC S9(7) COMP-3 VALUE ZERO.
05 WS-BF-REC-OUT-CNT PIC S9(7) COMP-3 VALUE ZERO.
05 WS-BFA-REC-OUT-CNT PIC S9(7) COMP-3 VALUE ZERO.
01 WS-MISC-FIELDS.
05 WS-ABEND-CD PIC S9(9) BINARY.
05 WS-TIMING PIC S9(9) BINARY.
05 WS-CTRL-STATUS PIC 9(2).
05 WS-VARIANCE PIC S9(4) COMP.
05 WS-ADMIN-STR PIC X(6) VALUE '010118'.
05 WS-DISPLAY-S9999999 PIC ------9.
05 WS-TKT-NBR PIC S9(7) COMP-3 VALUE ZERO.
05 WS-START-TKT-NBR PIC S9(7) COMP-3 VALUE ZERO.
05 WS-END-TKT-NBR PIC S9(7) COMP-3 VALUE ZERO.
05 WS-SLTKT-NBR-LINES PIC S9(3) COMP-3 VALUE ZERO.
05 WS-SLTKT-NBR-DSCNT PIC S9(3) COMP-3 VALUE ZERO.
05 WS-SVP-RTL-QTY PIC S9(5) COMP-3 VALUE ZERO.
01 WS-INDICATORS.
05 WS-EOF-SCFRNSR2-IN-IND PIC X.
88 EOF-SCFRNSR2-IN VALUE 'Y'.
05 WS-SLTKT-COMPLETE-IND PIC X.
88 WS-TICKET-COMPLETED VALUE 'Y'.
88 WS-TICKET-NOT-COMPLETED VALUE 'N'.
******************************************************************
PROCEDURE DIVISION.
******************************************************************
000-MAIN SECTION.
PERFORM 100-INITIALIZE
IF NOT EOF-SCFRNSR2-IN
PERFORM 200-PROCESS-SCFRNSR2 UNTIL EOF-SCFRNSR2-IN
ELSE
PERFORM 911-EMPTY-FILE-MESSAGE
END-IF
PERFORM 9000-TERMINATE
STOP RUN
4. .
******************************************************************
100-INITIALIZE.
******************************************************************
DISPLAY '***************************************'
UPON CONSOLE
DISPLAY '* R P R 6 6 2 1 F *'
UPON CONSOLE
DISPLAY '***************************************'
UPON CONSOLE
INITIALIZE SALE-REC-KEY-INIT
OPEN INPUT SCFRNSR2-IN
OUTPUT SCSALE-OUT
OPEN I-O CONTROL-FILE
IF WS-CTRL-STATUS NOT = ZERO AND
WS-CTRL-STATUS NOT = 97
MOVE 'RPR6621F HAD A PROBLEM OPENING THE VSAM '
TO WS-ERR-MSG1
STRING 'CONTROL FILE, THE STATUS WAS ' WS-CTRL-STATUS
DELIMITED BY SIZE INTO WS-ERR-MSG2
MOVE 16 TO WS-ABEND-CD
PERFORM 9999-ABEND
END-IF
PERFORM 800-READ-SCFRNSR2
IF NOT EOF-SCFRNSR2-IN
* the daily rpt dt is figured in rpr6622f
MOVE ZERO TO SALE-DAILY-RPT-DT
* these pieces of the scsale rec key are constant
MOVE WS-ADMIN-STR TO SALE-STORE-NBR
MOVE 'B ' TO SALE-REC-TYPE1
PERFORM 810-READ-CONTROL-FILE
PERFORM 300-SETUP-REC-KEY
MOVE SCFRNSR2-IN-REC TO SCFRNSR2-PREV-REC
* we assume the tkt is complete until we encounter any error
SET WS-TICKET-COMPLETED TO TRUE
END-IF
.
******************************************************************
200-PROCESS-SCFRNSR2.
******************************************************************
* this is the tkt-level break block. we process the b rec using
* the prev input rec. the b rec gets output out of order but
* we'll correct that with syncsort in a subsequent jcl step
* p r e v i o u s t k t
IF NOT
(FI-POS-USERID = FP-POS-USERID AND
FI-POS-STOREID = FP-POS-STOREID AND
FI-POS-TICKET-NUMBER = FP-POS-TICKET-NUMBER AND
FI-POS-TRANS-DATE-TIME = FP-POS-TRANS-DATE-TIME)
PERFORM 310-B-REC-TKT
PERFORM 320-BB-REC-CUST
PERFORM 330-BD-REC-PAYMENT
IF WS-SLTKT-NBR-DSCNT > ZERO
PERFORM 340-BE-REC-DISCOUNT
END-IF
* c u r r e n t t k t r e a d i n - s e t u p
PERFORM 300-SETUP-REC-KEY
5. * reset tkt level accummulators
MOVE ZERO TO WS-SLTKT-NBR-LINES
WS-SLTKT-NBR-DSCNT
* we assume the tkt is complete until we encounter any error
SET WS-TICKET-COMPLETED TO TRUE
MOVE SCFRNSR2-IN-REC TO SCFRNSR2-PREV-REC
END-IF
*------------------------------------------------------------
* any error present means the tkt is not complete
IF FI-SVP-CMNT-LN1-DESC NOT = SPACES
SET WS-TICKET-NOT-COMPLETED TO TRUE
END-IF
ADD FI-SVP-RTL-QTY TO WS-SLTKT-NBR-LINES
IF FI-DISCOUNT-AMT > ZERO
ADD 1 TO WS-SLTKT-NBR-DSCNT
END-IF
EVALUATE TRUE
WHEN FI-SVP-RTL-QTY IS POSITIVE
MOVE -1 TO WS-VARIANCE
WHEN FI-SVP-RTL-QTY IS NEGATIVE
MOVE +1 TO WS-VARIANCE
WHEN FI-SVP-RTL-QTY IS ZERO
PERFORM 911-QTY-ZERO-MSG
END-EVALUATE
PERFORM VARYING WS-SVP-RTL-QTY
FROM FI-SVP-RTL-QTY
BY WS-VARIANCE
UNTIL WS-SVP-RTL-QTY = ZERO
PERFORM 350-BF-REC-SKU-LINE
PERFORM 360-BFA-REC-SER-NBR
END-PERFORM
PERFORM 800-READ-SCFRNSR2
.
******************************************************************
300-SETUP-REC-KEY.
******************************************************************
* put the next avail tkt nbr from the scctrl read into our first
* tkt
MOVE WS-TKT-NBR TO SALE-TICKET-NBR
* now stage next avail tkt nbr+1 for the tkt after the one
* we're processing now
IF WS-TKT-NBR = 999999
MOVE 0 TO WS-TKT-NBR
ELSE
ADD 1 TO WS-TKT-NBR
END-IF
.
******************************************************************
310-B-REC-TKT.
******************************************************************
* although this is the first rec type at the tkt level, we
* have to output it last because we need to do tkt-level
* totaling and assessments that have to be recorded on this rec.
INITIALIZE SALE-RECORD-B
MOVE WS-SLTKT-COMPLETE-IND TO SALE-SLTKT-COMPLETE-IND
MOVE FP-POS-TRANS-MM TO SALE-SLTKT-MM
MOVE FP-POS-TRANS-DD TO SALE-SLTKT-DD
MOVE FP-POS-TRANS-YYYY(1:2) TO SALE-SLTKT-CC
MOVE FP-POS-TRANS-YYYY(3:2) TO SALE-SLTKT-YY
MOVE FP-POS-TRANS-HH TO SALE-SLTKT-HH
MOVE FP-POS-TRANS-MN TO SALE-SLTKT-MN
6. MOVE FP-POS-TRANS-SS TO SALE-SLTKT-SS
EVALUATE TRUE
WHEN FP-SALE
MOVE 'FRS' TO SALE-SLMKR-SALES-ID
MOVE SPACE TO SALE-FRAN-ISCT-IND
SALE-FRAN-ISCT-TYPE
WHEN FP-REFUND
MOVE 'FRR' TO SALE-SLMKR-SALES-ID
MOVE 'Y' TO SALE-FRAN-ISCT-IND
MOVE 'N' TO SALE-FRAN-ISCT-TYPE
MOVE 'RETURNED' TO SALE-REASON-FOR-REFUND
WHEN OTHER
PERFORM 911-INVALID-TRANS-TYPE-MSG
END-EVALUATE
MOVE ZERO TO SALE-SLMKR-ID
MOVE '21F' TO SALE-OPER-ID
MOVE 'F' TO SALE-SLTKT-TRAN-TYP-CD
MOVE FP-POS-STORE-NBR TO SALE-FRNCHS-STR-NBR
MOVE ZERO TO SALE-SLTKT-OSSRVC-SUBTOT-AMT
SALE-ZONE-NBR
SALE-ZONE-PCT
SALE-SVP-TOTL-ZNE-SRCHRG-AMT
MOVE FP-UNIT-SELL-PRICE TO SALE-SLTKT-SUBTOT-AMT
MOVE ZERO TO SALE-SLTKT-TAX-AMT
MOVE FP-UNIT-SELL-PRICE TO SALE-SLTKT-TOTL-AMT
MOVE FP-EXTENDED-PRICE TO SALE-SLTKT-TNDR-AMT
MOVE FP-STATE TO SALE-SLTKT-TAX-STATE-ID
MOVE SPACES TO SALE-CUST-TAX-XMP-ID
SALE-LAB-TYP-CD
MOVE WS-SLTKT-NBR-LINES TO SALE-SLTKT-NBR-LINES
MOVE 1 TO SALE-SLTKT-NBR-PYMT
SALE-SLTKT-NBR-GOOD-PYMT
MOVE ZERO TO SALE-SLTKT-NBR-OSSRVC
MOVE WS-SLTKT-NBR-DSCNT TO SALE-SLTKT-NBR-DSCNT
MOVE ZERO TO SALE-SLTKT-DSCNT-PCT
SALE-SLTKT-NBR-RFNDS
SET SALE-NO-TAX-EXEMPT-FORM TO TRUE
MOVE SPACES TO SALE-ALT-STR-NBR
SET SALE-NO-COMMERCIAL-CHG TO TRUE
SET SALE-NO-BAD-DEBT TO TRUE
SET SALE-NO-ISCT TO TRUE
MOVE ZERO TO SALE-SLTKT-NBR-SALES
MOVE SPACES TO SALE-SHOP-NBR
SALE-SHOP-PHONE-NBR
SET SALE-NO-SANWA TO TRUE
MOVE FP-POS-TICKET-NUMBER TO SALE-ORG-FRAN-SLTKT-NBR
MOVE FP-POS-TRANS-MM TO SALE-ORG-FRAN-SLTKT-DT(1:2)
MOVE FP-POS-TRANS-DD TO SALE-ORG-FRAN-SLTKT-DT(3:2)
MOVE FP-POS-TRANS-YYYY TO SALE-ORG-FRAN-SLTKT-DT(5:4)
MOVE SPACES TO SALE-CUST-TYP-CD
ADD 1 TO WS-B-REC-OUT-CNT
PERFORM 820-WRITE-SCSALE-FILE
.
******************************************************************
320-BB-REC-CUST.
******************************************************************
INITIALIZE SALE-RECORD-BB
MOVE 'B ' TO SALE-REC-TYPE2
MOVE 1 TO SALE-REC-TYPE2-SEQ-NBR
MOVE FI-CUST-NM TO SALE-CUST-NM
MOVE FI-ADDRESS-1 TO SALE-CUST-LINE1-ADDR
MOVE FI-ADDRESS-2 TO SALE-CUST-LINE2-ADDR
MOVE FI-CITY TO SALE-CUST-CITY-NM
7. MOVE FI-STATE TO SALE-CUST-STATE-ID
MOVE FI-CUST-CNTRY-ISO-CD TO SALE-CUST-CNTRY-CD
MOVE FI-ZIP TO SALE-CUST-POSTL-CD
MOVE FI-TELEPHONE TO SALE-CUST-PHONE-NBR
MOVE SPACES TO SALE-SVP-CNTCT-NM
SALE-BB-SCPHONE-KEY
ADD 1 TO WS-BB-REC-OUT-CNT
PERFORM 820-WRITE-SCSALE-FILE
.
******************************************************************
330-BD-REC-PAYMENT.
******************************************************************
* current business rule only allows one payment rec per tkt
* on franchise tkts. that is why there is only one call to
* this routine at the tkt level break.
*-----------------------------------------------------------------
INITIALIZE SALE-RECORD-BD
MOVE 'D ' TO SALE-REC-TYPE2
MOVE 1 TO SALE-REC-TYPE2-SEQ-NBR
SET SALE-PAYMENT-NOT-DELETED TO TRUE
MOVE 'C' TO SALE-SLTKT-PYMT-CD
MOVE FI-EXTENDED-PRICE TO SALE-SLTKT-PYMT-AMT
MOVE SPACES TO SALE-CHK-ID
SALE-TRVLR-CHK-ID
SALE-COMCHG-CMPNY-ID
SALE-COMCHG-ACCT-ID
SALE-COMCHG-AUTH-ID
SALE-PO-ID
SALE-COMCHG-RCV-NM
SALE-LEASE-ID
SALE-LEASE-CUST-NM
SALE-CRCRD-ACCT-ID
SALE-CRCRD-TYP-CD
SALE-CRCRD-AUTH-ID
SALE-BAD-DEBT-TYP
SALE-BAD-DEBT-CD
SALE-REASON-FOR-ISCT
SALE-MISCTRAN-TYP-CD
SALE-MISCTRAN-TYP
SALE-MISCTRAN-OTH-DESC
SALE-ACCT-SCRTY-ID
MOVE ZERO TO SALE-COMCHG-NBR-INVOICES
SALE-LEASE-APRVL-NBR
SALE-LEASE-CUST-NBR
SALE-CRCRD-EXP-DT
SALE-CRCRD-TRNS-ID
SALE-NBR-INVC-COPIES
SALE-ORG-INVC-NBR
SALE-FRAN-SVP-PCT
SALE-FRAN-SVP-AMT
MOVE FI-POS-STORE-NBR TO SALE-ISCT-STR-NBR
MOVE SALE-TICKET-NBR TO SALE-PYMT-ISCT-NBR
MOVE 'NEW' TO SALE-ISCT-ACCT-TYP
MOVE '8' TO SALE-ISCT-ACCT-CD
MOVE 1 TO SALE-SLTKT-PMTSEQ-NBR
ADD 1 TO WS-BD-REC-OUT-CNT
PERFORM 820-WRITE-SCSALE-FILE
.
******************************************************************
340-BE-REC-DISCOUNT.
******************************************************************
INITIALIZE SALE-RECORD-BE
MOVE 'E ' TO SALE-REC-TYPE2
8. MOVE 1 TO SALE-REC-TYPE2-SEQ-NBR
MOVE 'OTH' TO SALE-SLTKT-DSCNT-TYP-CD
* in the 010118 cics program, sc53p53, there is an algorithm
* that parses through all lines entered on the tkt to make sure
* all lines have the same discount%. that is not being carried
* into this automated version. this tkt-level rec will carry
* whatever discount% is present on the last scfrnsr2 input line
* for a given tkt
MOVE FP-SVP-DSCNT-PCT TO SALE-DSCNT-PCT
MOVE SPACES TO SALE-DSCNT-CNTL-ID
MOVE 'ADJUSTMENT' TO SALE-SLTKT-OTHDSC-DESC
ADD 1 TO WS-BE-REC-OUT-CNT
PERFORM 820-WRITE-SCSALE-FILE
.
******************************************************************
350-BF-REC-SKU-LINE.
******************************************************************
INITIALIZE SALE-RECORD-BF
MOVE 'F ' TO SALE-REC-TYPE2
MOVE 1 TO SALE-REC-TYPE2-SEQ-NBR
SET SALE-SKU-LINE-NOT-DELETED TO TRUE
MOVE 1 TO SALE-SVP-RTL-QTY
MOVE FI-PARENTSKU TO SALE-SKU-ID
MOVE SPACES TO SALE-SVP-EQUIP-MODFY-CD
MOVE 'S' TO SALE-SVP-TYP-CD
MOVE FI-SVP-COVER-MTH-QTY TO SALE-SVP-COVER-MTH-QTY
SALE-SVP-ACTUAL-NBR-MTHS
MOVE FI-SVP-LOC-WRNTY-COND-CD TO SALE-SVP-LOC-WRNTY-COND-CD
MOVE FI-SKU-SLMKR-DESC TO SALE-SKU-SLMKR-DESC
MOVE FI-UNIT-SELL-PRICE TO SALE-SVP-REGL-PRICE-AMT
MOVE FI-POS-TRANS-MM TO SALE-SVP-CALC-MM
MOVE FI-POS-TRANS-DD TO SALE-SVP-CALC-DD
MOVE FI-POS-TRANS-YYYY(1:2) TO SALE-SVP-CALC-CC
MOVE FI-POS-TRANS-YYYY(3:2) TO SALE-SVP-CALC-YY
MOVE FI-SVP-BEG-DT TO SALE-SVP-BEG-DT
MOVE FI-SVP-END-DT TO SALE-SVP-END-DT
MOVE FI-SVP-DSCNT-PCT TO SALE-SVP-DSCNT-PCT
COMPUTE SALE-SVP-DSCNT-AMT = FI-DISCOUNT-AMT /
FI-SVP-RTL-QTY
MOVE FI-SVP-RTL-AMT TO SALE-SVP-RTL-AMT
MOVE FI-ORG-POS-TICKET-NUMBER TO SALE-SLTKT-PUR-NBR
MOVE FI-ORG-POS-TRANS-MM TO SALE-SLTKT-PUR-MM
MOVE FI-ORG-POS-TRANS-DD TO SALE-SLTKT-PUR-DD
MOVE FI-ORG-POS-TRANS-YYYY(1:2) TO SALE-SLTKT-PUR-CC
MOVE FI-ORG-POS-TRANS-YYYY(3:2) TO SALE-SLTKT-PUR-YY
MOVE FI-ORG-POS-STORE-NBR TO SALE-SLTKT-PUR-STR
MOVE SPACES TO SALE-REF-CNTL-ID
SALE-REF-DROP-ID
MOVE 1 TO SALE-NBR-SER-IDS
MOVE ZEROS TO SALE-NBR-EQIP-CDS
SALE-SVP-ZNE-SRCHRG-AMT
SALE-FRAN-PCT
MOVE FI-UNIT-SELL-PRICE TO SALE-SVP-BEG-PRICE-AMT
* these two fields are auto-generated during nightly processing
* by rpr6602
MOVE SPACES TO SALE-SVP-CNTL-ID
SALE-SVP-DROP-ID
* this field is obsolete. it once indicated what type of
* direct mail solicitation would be performed
SALE-SVP-SOLIC-TYP
MOVE FI-SKU-ID TO SALE-SVP-SKU-ID
MOVE FI-SVP-COST-AMT TO SALE-SVP-COST-AMT
MOVE FI-UNIT-SELL-PRICE TO SALE-ORG-SVP-RTL-AMT
9. MOVE FI-SVP-CATG-ID TO SALE-SVP-CATG-ID
MOVE FI-FRAN-PRECISION-PCT TO SALE-FRAN-PRECISION-PCT
MOVE FI-CORP-PROFIT-PCT TO SALE-CORP-PROFIT-PCT
ADD 1 TO WS-BF-REC-OUT-CNT
PERFORM 820-WRITE-SCSALE-FILE
.
******************************************************************
360-BFA-REC-SER-NBR.
******************************************************************
INITIALIZE SALE-RECORD-BFA
MOVE 'F ' TO SALE-REC-TYPE2
MOVE 1 TO SALE-REC-TYPE2-SEQ-NBR
MOVE 'A ' TO SALE-REC-TYPE3
MOVE 1 TO SALE-REC-TYPE3-SEQ-NBR
MOVE '01NOSN' TO SALE-SKU-SER-ID
MOVE SPACES TO SALE-EQUIP-TYP-CD
ADD 1 TO WS-BFA-REC-OUT-CNT
PERFORM 820-WRITE-SCSALE-FILE
.
******************************************************************
800-READ-SCFRNSR2.
******************************************************************
READ SCFRNSR2-IN
AT END
SET EOF-SCFRNSR2-IN TO TRUE
NOT AT END
ADD 1 TO WS-SCFRNSR2-IN-CNT
END-READ
.
******************************************************************
810-READ-CONTROL-FILE.
******************************************************************
MOVE SPACES TO CTRL-FILE-KEYS
MOVE 'VALIDSTORE' TO CTRL-KEY1-REC-TYPE
MOVE WS-ADMIN-STR TO CTRL-KEY2
READ CONTROL-FILE
INVALID KEY
MOVE 'CONTROL-FILE IS MISSING VALIDSTORE RECORD FOR:'
TO WS-ERR-MSG1
MOVE WS-ADMIN-STR TO WS-ERR-MSG2
MOVE 16 TO WS-ABEND-CD
PERFORM 9999-ABEND
END-READ
IF WS-CTRL-STATUS = ZERO OR 97
MOVE CTRL-NEXT-AVL-TICK-NBR TO WS-START-TKT-NBR,
WS-TKT-NBR
ELSE
MOVE 'RPR6621F HAD A PROBLEM READING FROM THE VSAM '
TO WS-ERR-MSG1
STRING 'CONTROL FILE, THE STATUS WAS ' WS-CTRL-STATUS
DELIMITED BY SIZE INTO WS-ERR-MSG2
MOVE 16 TO WS-ABEND-CD
PERFORM 9999-ABEND
END-IF
.
******************************************************************
820-WRITE-SCSALE-FILE.
******************************************************************
WRITE SCSALE-OUT-RECORD FROM SCSALE-OUT-REC
ADD 1 TO WS-SCSALE-OUT-CNT
MOVE SPACES TO SALE-REC-TYPE2
SALE-REC-TYPE3
SALE-REC-TYPE4
10. MOVE ZERO TO SALE-REC-TYPE2-SEQ-NBR
SALE-REC-TYPE3-SEQ-NBR
SALE-REC-TYPE4-SEQ-NBR
.
******************************************************************
830-WRITE-CONTROL-FILE.
******************************************************************
MOVE WS-TKT-NBR TO CTRL-NEXT-AVL-TICK-NBR
REWRITE SCCTRL-CONTROL-RECORD
IF WS-CTRL-STATUS NOT = 0
MOVE 'RPR6621F HAD A PROBLEM REWRITING TO THE VSAM '
TO WS-ERR-MSG1
STRING 'CONTROL FILE, THE STATUS WAS ' WS-CTRL-STATUS
DELIMITED BY SIZE INTO WS-ERR-MSG2
MOVE WS-TKT-NBR TO WS-DISPLAY-S9999999
STRING 'NEXT AVL TKT NBR IS: ' WS-DISPLAY-S9999999
DELIMITED BY SIZE INTO WS-ERR-MSG3
MOVE 16 TO WS-ABEND-CD
PERFORM 9999-ABEND
END-IF
.
******************************************************************
911-EMPTY-FILE-MESSAGE.
******************************************************************
DISPLAY SPACE
DISPLAY '>>>>>>>>>>>>>>>> IMPORTANT <<<<<<<<<<<<<<<<<<<'
UPON CONSOLE
DISPLAY '***************************************************'
UPON CONSOLE
DISPLAY '* SCFRNS2I INPUT FILE CONTAINED NO DATA. THIS IS *'
UPON CONSOLE
DISPLAY '* EXTREMELY UNLIKELY TO HAPPEN ON NORMAL BUSINESS *'
UPON CONSOLE
DISPLAY '* DAYS BUT MAY BE TRUE ON HOLIDAYS SUCH AS *'
UPON CONSOLE
DISPLAY '* THANKSGIVING AND CHRISTMAS. *'
UPON CONSOLE
DISPLAY '* THIS SITUATION SHOULD BE VETTED WITH CLOSE *'
UPON CONSOLE
DISPLAY '* SCRUTINY SINCE FRANCHISE STORES SELL SERVICE *'
UPON CONSOLE
DISPLAY '* PLANS ON MOST EVERY DAY, HOLIDAYS *'
UPON CONSOLE
DISPLAY '* NOTWITHSTANDING. *'
UPON CONSOLE
DISPLAY '***************************************************'
UPON CONSOLE
.
******************************************************************
911-QTY-ZERO-MSG.
******************************************************************
DISPLAY '**************************************' UPON CONSOLE
DISPLAY '* FI-SVP-RTL-QTY FOUND EQUAL TO ZERO ' UPON CONSOLE
DISPLAY '* ON SCFRNS2I INPUT. VALUE DETECTED ' UPON CONSOLE
DISPLAY '* WAS: ' FI-SVP-RTL-QTY UPON CONSOLE
DISPLAY '* FATAL ERROR. PROCESSING CANNOT ' UPON CONSOLE
DISPLAY '* CONTINUE. PROGRAMMER INVESTIGATION ' UPON CONSOLE
DISPLAY '* NECESSARY. ' UPON CONSOLE
DISPLAY '**************************************' UPON CONSOLE
MOVE 'INVALID FI-SVP-RTL-QTY DETECTED. SEE MESSAGE ABOVE'
TO WS-ERR-MSG1
MOVE 16 TO WS-ABEND-CD
PERFORM 9999-ABEND
11. .
******************************************************************
911-INVALID-TRANS-TYPE-MSG.
******************************************************************
DISPLAY '**************************************' UPON CONSOLE
DISPLAY '* INVALID POS TRANS TYPE DETECTED ON ' UPON CONSOLE
DISPLAY '* SCFRNS2I INPUT. VALUE DETECTED ' UPON CONSOLE
DISPLAY '* WAS: ' FP-POS-TRANS-TYPE UPON CONSOLE
DISPLAY '* FATAL ERROR. PROCESSING CANNOT ' UPON CONSOLE
DISPLAY '* CONTINUE. PROGRAMMER INVESTIGATION ' UPON CONSOLE
DISPLAY '* NECESSARY. ' UPON CONSOLE
DISPLAY '**************************************' UPON CONSOLE
MOVE 'INVALID FI-POS-TRANS-TYPE DETECTED. SEE MESSAGE ABOVE'
TO WS-ERR-MSG1
MOVE 16 TO WS-ABEND-CD
PERFORM 9999-ABEND
.
******************************************************************
9000-TERMINATE.
******************************************************************
IF WS-SCSALE-OUT-CNT > 0
PERFORM 310-B-REC-TKT
PERFORM 320-BB-REC-CUST
PERFORM 330-BD-REC-PAYMENT
IF WS-SLTKT-NBR-DSCNT > ZERO
PERFORM 340-BE-REC-DISCOUNT
END-IF
* do the write to the control file with the next avail tkt nbr
* to set up for the next run
PERFORM 830-WRITE-CONTROL-FILE
* decrement the tkt nbr var to show the range we actually used
* in the current run
SUBTRACT 1 FROM WS-TKT-NBR GIVING WS-END-TKT-NBR
DISPLAY 'TKT NBR RANGE USED FROM VSAM SCCTRL FILE:'
UPON CONSOLE
MOVE WS-START-TKT-NBR TO WS-DISPLAY-S9999999
DISPLAY 'FROM: ' WS-DISPLAY-S9999999
UPON CONSOLE
MOVE WS-END-TKT-NBR TO WS-DISPLAY-S9999999
DISPLAY ' TO: ' WS-DISPLAY-S9999999
UPON CONSOLE
DISPLAY '-----------------------------------------------'
UPON CONSOLE
ELSE
DISPLAY 'NO TKT NBRS USED FROM VSAM SCCTRL FILE DUE TO EMP
- 'TY INPUT FILE' UPON CONSOLE
DISPLAY '-----------------------------------------------'
UPON CONSOLE
END-IF
MOVE WS-SCFRNSR2-IN-CNT TO SYSOUT-NBR
MOVE 'TOTAL SCFRNS2I RECS READ' TO SYSOUT-MSG
DISPLAY SYSOUT-TOTAL-LINE UPON CONSOLE
MOVE WS-SCSALE-OUT-CNT TO SYSOUT-NBR
MOVE 'TOTAL SCSALEO RECS WRITTEN SHOULD FOOT WITH REC TYPE TO
- 'TALS BELOW'
TO SYSOUT-MSG
DISPLAY SYSOUT-TOTAL-LINE UPON CONSOLE
DISPLAY '-----------------------------------------------'
UPON CONSOLE
MOVE WS-B-REC-OUT-CNT TO SYSOUT-NBR
12. MOVE 'TOTAL B TYPE RECS WRITTEN' TO SYSOUT-MSG
DISPLAY SYSOUT-TOTAL-LINE UPON CONSOLE
MOVE WS-BB-REC-OUT-CNT TO SYSOUT-NBR
MOVE 'TOTAL BB TYPE RECS WRITTEN' TO SYSOUT-MSG
DISPLAY SYSOUT-TOTAL-LINE UPON CONSOLE
MOVE WS-BD-REC-OUT-CNT TO SYSOUT-NBR
MOVE 'TOTAL BD TYPE RECS WRITTEN' TO SYSOUT-MSG
DISPLAY SYSOUT-TOTAL-LINE UPON CONSOLE
MOVE WS-BE-REC-OUT-CNT TO SYSOUT-NBR
MOVE 'TOTAL BE TYPE RECS WRITTEN' TO SYSOUT-MSG
DISPLAY SYSOUT-TOTAL-LINE UPON CONSOLE
MOVE WS-BF-REC-OUT-CNT TO SYSOUT-NBR
MOVE 'TOTAL BF TYPE RECS WRITTEN' TO SYSOUT-MSG
DISPLAY SYSOUT-TOTAL-LINE UPON CONSOLE
MOVE WS-BFA-REC-OUT-CNT TO SYSOUT-NBR
MOVE 'TOTAL BFA TYPE RECS WRITTEN' TO SYSOUT-MSG
DISPLAY SYSOUT-TOTAL-LINE UPON CONSOLE
DISPLAY '-----------------------------------------------'
UPON CONSOLE
CLOSE SCFRNSR2-IN
SCSALE-OUT
CONTROL-FILE
.
******************************************************************
9999-ABEND.
******************************************************************
DISPLAY '***********************************************'
UPON CONSOLE
DISPLAY '** ABEND TAKEN BY USER PROGRAM ' UPON CONSOLE
DISPLAY '** ' MODULE-LIT-NAME-AUD
UPON CONSOLE
DISPLAY '**' UPON CONSOLE
DISPLAY '** MSG : ' WS-ERR-MSG1 UPON CONSOLE
DISPLAY '** MSG : ' WS-ERR-MSG2 UPON CONSOLE
DISPLAY '** MSG : ' WS-ERR-MSG3 UPON CONSOLE
DISPLAY '** MSG : ' WS-ERR-MSG4 UPON CONSOLE
DISPLAY '** ' UPON CONSOLE
DISPLAY '***********************************************'
UPON CONSOLE
MOVE 0 TO WS-TIMING
CALL "CEE3ABD" USING WS-ABEND-CD , WS-TIMING
.