83
COBOL CICS Program SC52P52 Project: Sales Entry System Unit 010118 DEVELOPED BY APPROVED BY NAME Jon Fortman Tim Reagan ROLE SME/Developer Asst. Dir.

COBOL CICS EXAMPLE-SC52P52

Embed Size (px)

Citation preview

Page 1: COBOL CICS EXAMPLE-SC52P52

COBOL CICS Program SC52P52

Project: Sales Entry System Unit 010118

DEVELOPED BY APPROVED BY

NAME Jon Fortman Tim Reagan

ROLE SME/Developer Asst. Dir.

Page 2: COBOL CICS EXAMPLE-SC52P52

IDENTIFICATION DIVISION. PROGRAM-ID. SC52P52. AUTHOR. JON FORTMAN. DATE-WRITTEN. 06/17/92 *INSTALLATION. TANDY INFORMATION SERVICES. *COPYRIGHT (C) 1992,TANDY INFORMATION SERVICES. *REMARKS. ****************************************************************** * C O N T R A C T S E R V I C E S ****************************************************************** * * --CICS-- * * Sales Entry System - Customer Information Input * * This screen will be used for inputting customer information * (name, address, phone#, etc) when the user is creating a new * sales ticket. The user may enter this information using pre- * existing information found on an existing ticket (customer info * for an existing ticket is stored on SCPHONE with the phone * station id {last 4 chars} as the high part of the key) or from * scratch by typing in all the necessary information manually. ****************************************************************** * Notes: * * There are 3 "checkpoints" for the country. These are made at * the points where the country can enter the program. Only these * checkpoints would ever need to be altered should another * country need to be added to the nonforeign list as "nonforeign" * and "foreign" flags are set at each of the checkpoints which * sc52 uses from these points forward. These checkpoints are the * only places where the "nonforeign" and "foreign" flags are * altered with one exception: when the default country is loaded * in which case "nonforeign" is set to true. ****************************************************************** ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. DATA DIVISION.

WORKING-STORAGE SECTION. *********************** 01 MAP-FUNCTIONS-TEXT. *********************** 05 WS-FUNC-KEYS-1 PIC X(78) VALUE '<F1>EXIT <ENTER>PROCESS'.

05 WS-FUNC-KEYS-1A PIC X(78) VALUE '<F1>EXIT <F10>REPLACEMENT'.

05 WS-FUNC-KEYS-2 PIC X(78) VALUE '<F1>EXIT <ENTER>PROCESS <F3>SKUINFO'.

05 WS-FUNC-KEYS-2A PIC X(78) VALUE '<F1>EXIT <ENTER>PROCESS <F10>SUMMARY'.

05 WS-FUNC-KEYS-3 PIC X(78) VALUE '<F1>EXIT <ENTER>PROCESS <F3>SKUINFO <F10>SUMMARY <SHF12>VO - 'ID'.

05 WS-FUNC-KEYS-3A PIC X(78) VALUE '<F1>EXIT <ENTER>PROCESS <F10>SUMMARY <SHF12>VOID'.

05 WS-FUNC-KEYS-4 PIC X(78) VALUE

Page 3: COBOL CICS EXAMPLE-SC52P52

'<F1>EXIT <F3>SKUINFO <F10>SUMMARY <SHF10>NEWTICKET <SHF12> - 'UNVOID'.

05 WS-FUNC-KEYS-4A PIC X(78) VALUE '<F1>EXIT <F10>SUMMARY <SHF10>NEWTICKET <SHF12>UNVOID'. ************* 01 MESSAGES. ************* *------------ * cust phone# *------------ 05 PHONE-NOT-ENTERED-MSG. 10 PIC X(78) VALUE '<< ENTER Cust Phone# >>'.

05 PHONE-NOT-NUMERIC-MSG. 10 PIC X(78) VALUE '<< Cust Phone# FOR THIS Country MUST BE NUMERIC >>'.

05 PHONE-TOO-SHORT-MSG. 10 PIC X(78) VALUE '<< Cust Phone# MUST BE AT LEAST 4 NONBLANK CHARACTERS LONG - ' >>'.

05 PHONE-TOO-LONG-MSG. 10 PIC X(78) VALUE '<< Cust Phone# TOO LONG. 12 CHARACTERS MAXIMUM >>'.

05 PHONE-GT-NON-FOREIGN-MAX-MSG. 10 PIC X(78) VALUE '<< Cust Phone# TOO LONG FOR NONFOREIGN Country. 10 DIGITS - 'MAXIMUM >>'.

05 PHONE-INVALID-MSG. 10 PIC X(78) VALUE '<< Cust Phone# INVALID >>'.

05 FORMATTED-PHONE-INVALID-MSG. 10 PIC X(78) VALUE '<< Cust Phone# INVALID FOR A FORMATTED ENTRY. USE (___)___ - '-____ >>'. *-------------- * id# selection *-------------- 05 ID-SELECTION-NOT-ENTERED-MSG. 10 PIC X(78) VALUE '<< ENTER Id# TO SELECT EXISTING CUST INFO OR ** Other Cust - ' Info ** >>'.

05 ID-SELECTION-INVALID-MSG. 10 PIC X(78) VALUE '<< Id INVALID >>'. *--------- * sales id *--------- 05 SALESID-NOT-ENTERED-MSG. 10 PIC X(78) VALUE '<< ENTER Sales Id >>'.

05 SALESID-INVALID-MSG. 10 PIC X(78) VALUE '<< Sales Id INVALID >>'.

Page 4: COBOL CICS EXAMPLE-SC52P52

05 SALESID-NOT-OK-FOR-SALE-MSG. 10 PIC X(24) VALUE '<< Sales Id INVALID FOR '. 10 SALE-TYP-DESC-MSG PIC X(9). 10 PIC X(8) VALUE ' SALE >>'.

05 SALESID-NOT-OK-FOR-TRAN-MSG. 10 PIC X(24) VALUE '<< Sales Id INVALID FOR '. 10 TRAN-TYP-DESC-MSG PIC X(13). 10 F PIC X VALUE SPACE. 10 PIC X(14) VALUE 'TRANSACTION >>'.

05 SALESID-NEED-SLCT-TYP-MSG. 10 PIC X(78) VALUE '<< Sales Id REQUIRES SOLICITATION TYPE CODE. GO TO <F3>SKU - 'INFO >>'. *---------------- * franchise store *---------------- 05 FRANSTR-NOT-ENTERED-MSG. 10 PIC X(78) VALUE '<< ENTER Franchise Store >>'.

05 FRANSTR-INVALID-MSG. 10 PIC X(78) VALUE '<< Franchise Store INVALID >>'.

05 FRANSTR-CLOSE-DT-MSG. 10 PIC X(49) VALUE '<< Franchise Store HAS BEEN CLOSED FOR MORE THAN '. 10 STR-CLOSED-MSG-DAYS PIC ZZ9. 10 PIC X(8) VALUE ' DAYS >>'.

05 EIBDATE-SUBTRACT-BAD-MSG. 10 PIC X(78) VALUE '<< PROBLEM SUBTRACTING MAX DAYS STORE CLOSED FROM SYS DATE - ' CALL TIS >>'.

05 FRANSTR-DB2-CLOSE-DT-MSG. 10 PIC X(78) VALUE '<< Franchise Store CLOSE DATE FOUND INVALID ON DB2. CONTAC - 'T TIS >>'. *--------------------------- * original franchise ticket# *--------------------------- 05 FRANTKT-NOT-ENTERED-MSG. 10 PIC X(78) VALUE '<< ENTER Original Franchise Ticket# >>'.

05 FRANTKT-NOT-NUMERIC-MSG. 10 PIC X(78) VALUE '<< Original Franchise Ticket# MUST BE NUMERIC >>'. * *jcf begin renewals temp code * *--------------- * cust type code *--------------- * 05 TYPCODE-MSG. * 10 PIC X(78) VALUE * '<< ENTER Type Code as MAJ,FED,STE or EDU or "X" to bypass

Page 5: COBOL CICS EXAMPLE-SC52P52

*- '>>'. * *jcf end renewals temp code * *---------- * cust name *---------- 05 CUSTNAM-NOT-ENTERED-MSG. 10 PIC X(78) VALUE '<< ENTER Cust Name >>'. *--------- * address1 *--------- 05 ADDR1-NOT-ENTERED-MSG. 10 PIC X(78) VALUE '<< ENTER Address1 >>'. *----- * city *----- 05 CITY-NOT-ENTERED-MSG. 10 PIC X(78) VALUE '<< ENTER City >>'. *------ * state *------ 05 STATE-NOT-ENTERED-MSG. 10 PIC X(78) VALUE '<< ENTER State >>'.

05 STATE-INVALID-MSG. 10 PIC X(78) VALUE '<< State INVALID FOR THIS STORE#. TSP CONTROL FILE MAY NEE - 'D UPDATE >>'. *------------------ * postal code (zip) *------------------ 05 POSTLCD-NOT-ENTERED-MSG. 10 PIC X(78) VALUE '<< ENTER Zip Code >>'.

05 POSTLCD-TOO-SHORT-MSG. 10 PIC X(78) VALUE '<< Zip Code TOO SHORT FOR THIS Country. 5 DIGITS MINIMUM > - '>'.

05 POSTLCD-TOO-LONG-MSG. 10 PIC X(78) VALUE '<< Zip Code TOO LONG FOR THIS Country. 9 DIGITS MAXIMUM >> - ' '.

05 POSTLCD-IMBEDDED-BLANKS-MSG. 10 PIC X(78) VALUE '<< Zip Code INVALID. NO IMBEDDED BLANKS ALLOWED >>'.

05 POSTLCD-INVALID-FOR-US-MSG. 10 PIC X(78) VALUE '<< Zip Code POS 1-5 MUST BE NUMERIC (& 6-9 IF PRESENT) FOR - ' THIS Country >>'.

05 POSTLCD-INVALID-FOR-CA-MSG. 10 PIC X(78) VALUE '<< Zip Code POS 1,3,5 MUST BE ALPHA & 2,4,6 NUMERIC FOR TH - 'IS Country >>'.

Page 6: COBOL CICS EXAMPLE-SC52P52

05 POSTLCD-RANGE-INVALID-MSG. 10 PIC X(78) VALUE '<< Zip Code RANGE INVALID FOR THIS State >>'. *----- * misc *----- 05 TICKET-VOIDED-MSG. 10 PIC X(11) VALUE '<< Ticket# '. 10 VOID-MSG-TICKET-NBR PIC 9(6). 10 PIC X(45) VALUE ' VOIDED. ENTER Sales Id FOR NEXT TICKET >>'.

05 TICKET-VOIDED-MSG2. 10 PIC X(11) VALUE '<< Ticket# '. 10 VOID-MSG2-TICKET-NBR PIC 9(6). 10 PIC X(10) VALUE ' VOIDED >>'.

05 TICKET-UNVOIDED-MSG. 10 PIC X(11) VALUE '<< Ticket# '. 10 UNVOID-MSG-TICKET-NBR PIC 9(6). 10 PIC X(12) VALUE ' UNVOIDED >>'.

05 DR-MISSING-A-REC-MSG. 10 PIC X(78) VALUE '<< DAILY REPORT IS MISSING "A" TYPE TOTALS RECORD. CONTACT - ' TIS >>'.

05 INVALID-KEY-MSG. 10 PIC X(78) VALUE '<< INVALID KEY PRESSED >>'.

05 NOTHING-TO-PROCESS-MSG. 10 PIC X(78) VALUE '<< NOTHING TO PROCESS >>'.

05 NO-COMM-MSG. 10 PIC X(78) VALUE '<< PROGRAM SC52P52 DID NOT RECEIVE COMMAREA FROM SC50P50. - 'CALL HELP DESK >>'.

05 SYS1PERR-MSG. 10 PIC X(78) VALUE '<< SYS1PERR SUBROUTINE FAILED IN PROGRAM SC52P52. CALL HEL - 'P DESK >>'.

05 WRN-SQL-MSG. 10 F PIC X(5) VALUE SPACES. 10 SQL-PGM PIC X(8). 10 F PIC X(5) VALUE SPACES. 10 F PIC X(27) VALUE 'RETURNED SQL ERR CODE OF '. 10 SQL-RTN-CODE PIC -9999. 10 F PIC X(5) VALUE SPACES. 10 F PIC X(17) VALUE 'CONTACT HELP DESK'.

05 DATA-TO-BE-LOST-MSG. 10 PIC X(78) VALUE '<< DATA ENTERED WILL BE LOST. <F1> TO EXIT ANYWAY >>'.

05 TICK-NOT-CMPLT-MSG. 10 PIC X(78) VALUE '<< TICKET NOT COMPLETED. <F1> TO EXIT ANYWAY. >>'.

05 TICK-NOT-CMPLT-MSG2.

Page 7: COBOL CICS EXAMPLE-SC52P52

10 PIC X(78) VALUE '<< TICKET NOT COMPLETED. <F1> TO SAVE CHANGES AND EXIT >>' .

05 TOPSECRET-FAIL-MSG. 10 PIC X(3) VALUE '<< '. 10 WHAT PIC X(8). 10 F PIC X(1) VALUE SPACES. 10 WHICH PIC X(8). 10 F PIC X(1) VALUE SPACES. 10 REASON PIC X(54). 10 PIC X(3) VALUE ' >>'. ************** 01 CONSTANTS. ************** 05 MAX-SELECTIONS PIC S9(4) BINARY VALUE 8. 05 PHONE-MIN-LEN PIC S9(4) BINARY VALUE 4. 05 PHONE-MAX-LEN PIC S9(4) BINARY VALUE 12. 05 PHONE-FORMATTED-LEN PIC S9(4) BINARY VALUE 13. 05 NON-FOREIGN-PHONE-MAX-LEN PIC S9(4) BINARY VALUE 10. 05 POSTLCD-US-MIN-LEN PIC S9(4) BINARY VALUE 5. 05 POSTLCD-US-MAX-LEN PIC S9(4) BINARY VALUE 9. 05 RPRPHONE-GENERIC-LEN PIC S9(4) BINARY VALUE 4. 05 RPRCTRL-GENERIC-LEN PIC S9(4) BINARY VALUE 20. 05 MAX-STR-CLOSED-DAYS PIC S9(5) VALUE 60.

05 DEFAULT-COUNTRY PIC X(2) VALUE 'US'. 05 FRANSTR-LABEL PIC X(9) VALUE 'Fran Str#'. 05 FRANTKT-LABEL PIC X(13) VALUE 'Org Fran Tkt#'. 05 TICKET-LABEL PIC X(7) VALUE 'Ticket#'. 05 ISCT-LABEL PIC X(5) VALUE 'ISCT#'. 05 OTHER-CUST-INFO-TEXT PIC X(21) VALUE '** Other Cust Info **'.

05 ERASE-CD PIC S9(4) BINARY VALUE 128. 05 FILLER REDEFINES ERASE-CD. 10 ERASE-FIL PIC X. 10 ERASE-EOF PIC X.

05 WS-MAP-COLNAMES. 10 PIC X(2) VALUE 'ID'. 10 F PIC X(1) VALUE SPACE. 10 PIC X(30) VALUE 'NAME'. 10 F PIC X(1) VALUE SPACE. 10 PIC X(21) VALUE 'CITY'. 10 F PIC X(1) VALUE SPACE. 10 PIC X(2) VALUE 'ST'. 10 F PIC X(1) VALUE SPACE. 10 PIC X(6) VALUE 'STORE#'. 10 F PIC X(1) VALUE SPACE. 10 PIC X(6) VALUE 'TICKET'. *************** 01 INDICATORS. *************** 05 MAPFAIL-IND PIC X. 88 MAPFAIL VALUE 'Y'. 88 NO-MAPFAIL VALUE 'N'.

05 IMBEDDED-BLANKS-IND PIC X. 88 IMBEDDED-BLANKS VALUE 'Y'. 88 NO-IMBEDDED-BLANKS VALUE 'N'.

Page 8: COBOL CICS EXAMPLE-SC52P52

05 RECORD-INPUT-RESPONSE-IND PIC X. 88 RECORD-FOUND VALUE 'F'. 88 RECORD-NOT-FOUND VALUE 'N'. 88 EOF VALUE 'E'.

05 INVALID-KEY-IND PIC X. 88 INVALID-KEY-PRESSED VALUE 'Y'. 88 INVALID-KEY-NOT-PRESSED VALUE 'N'. ************** 01 VARIABLES. ************** 05 SUB PIC S9(4) BINARY SYNC. 05 SUB1 PIC S9(4) BINARY SYNC. 05 SUB2 PIC S9(4) BINARY SYNC. 05 SUB3 PIC S9(4) BINARY SYNC. 05 SUB4 PIC S9(4) BINARY SYNC. 05 SUBZIP PIC S9(4) BINARY SYNC. 05 FIELD-MAX-LEN PIC S9(4) BINARY. 05 FIRST-NONBLANK-CHAR-POS PIC S9(4) BINARY. 05 LAST-NONBLANK-CHAR-POS PIC S9(4) BINARY. 05 RESP1-HOLD PIC S9(8) BINARY. 05 PREV-SALE-CUST-STATION-ID PIC X(4).

05 WS-BIN-HALFWORD PIC S9(4) USAGE BINARY. 88 FIRST-CHAR-OF-PHONE VALUE 1.

05 WS-STATE PIC X(2).

05 WS-POSTLCD PIC X(11). 05 F REDEFINES WS-POSTLCD. 10 WS-POSTLCD-RANGE PIC X(3). 10 F PIC X(8).

05 WS-MISC-COUNTER PIC S9(4) USAGE BINARY. 05 PROG-ID PIC X(8). 05 SQL-PROG PIC X(8) VALUE 'SC53P53S'. 05 WS-FILE-ID PIC X(8). 05 INIT-CUST-STATION-ID PIC X(4). 05 WS-SALESID-NEED-SLCT-TYP-IND PIC X(1).

* These tables are used for left justification of input

* before left justify 05 WS-CHAR-IN-TBL PIC X(13). 05 F REDEFINES WS-CHAR-IN-TBL OCCURS 13 TIMES. 10 WS-CHAR-IN-BYTE PIC X.

* after left justify 05 WS-CHAR-OUT-TBL PIC X(13). 05 F REDEFINES WS-CHAR-OUT-TBL OCCURS 13 TIMES. 10 WS-CHAR-OUT-BYTE PIC X.

* holds existing cust info found on scphone 05 WS-DTL-SELECTION. 10 WS-DTL-ID PIC Z9. 10 F PIC X(1) VALUE SPACES. 10 WS-DTL-CUST-NM PIC X(30). 10 F PIC X(1) VALUE SPACES. 10 WS-DTL-CUST-CITY-NM PIC X(21). 10 F PIC X(1) VALUE SPACES. 10 WS-DTL-CUST-STATE-ID PIC X(2). 10 F PIC X(1) VALUE SPACES. 10 WS-DTL-STORE-NBR PIC X(6).

Page 9: COBOL CICS EXAMPLE-SC52P52

10 F PIC X(1) VALUE SPACES. 10 WS-DTL-TICKET-NBR PIC X(6).

05 WS-PGM. 10 F PIC XX VALUE SPACES. 10 WS-PGM-LL PIC XX. 10 WS-PGM-PP PIC X. 10 WS-PGM-MM PIC XX. 10 F PIC X VALUE SPACES.

05 MY-PROG. 10 TRANS-ID PIC X(4) VALUE 'SC52'. 10 MY-FILR PIC X(4) VALUE 'P52 '.

05 WS-HEADER. 10 WS-PGM-NAME PIC X(4). 10 WS-HEAD-NAME PIC X(9).

05 WS-DASH-ACCESSOR-IDS. 10 WS-SYSTEM-ID PIC X(3). 10 PIC X VALUE '-'. 10 WS-OPER-ID PIC X(3). 10 PIC X VALUE '-'. 10 WS-CICS-ID PIC X(1).

05 WS-CK-NUMERIC-PHONE PIC X(12). 05 F REDEFINES WS-CK-NUMERIC-PHONE. 10 WS-CK-NUMERIC-AREA-CD PIC X(3). 10 WS-CK-NUMERIC-EXCHG PIC X(3). 10 WS-CK-NUMERIC-STATION-ID PIC X(4). 10 F PIC X(2).

05 WS-NON-FOREIGN-PHONE. 10 PIC X(1) VALUE '('. 10 WS-CUST-AREA-CD PIC X(3) VALUE SPACES. 10 PIC X(1) VALUE ')'. 10 WS-CUST-EXCHG PIC X(3) VALUE SPACES. 10 PIC X(1) VALUE '-'. 10 WS-CUST-STATION-ID PIC X(4) VALUE SPACES.

* used to detect if phone# was entered already formatted: * (___)___-____ 05 WS-PHONE-PREFORMAT-CK. 10 WS-OPEN-PAREN PIC X(1). 88 OPEN-PAREN-ENTERED VALUE '('.

10 WS-PREFORMAT-AREA-CD PIC X(3) VALUE SPACES.

10 WS-CLOSE-PAREN PIC X(1). 88 CLOSE-PAREN-ENTERED VALUE ')'.

10 WS-PREFORMAT-EXCHG PIC X(3) VALUE SPACES. 10 WS-DASH PIC X(1). 88 DASH-ENTERED VALUE '-'.

10 WS-PREFORMAT-STATION-ID PIC X(4) VALUE SPACES.

05 WS-COMM-CUST-PHONE-NBR. 10 WS-COMM-CUST-AREA-CD PIC X(3). 10 WS-COMM-CUST-EXCHG PIC X(3). 10 WS-COMM-CUST-STATION-ID PIC X(4). 10 F PIC X(2).

Page 10: COBOL CICS EXAMPLE-SC52P52

05 WS-UNITED-STATES-ZIP-CK PIC X(9). 05 F REDEFINES WS-UNITED-STATES-ZIP-CK. 10 WS-US-ZIP-1ST-5 PIC X(5). 10 WS-US-ZIP-LAST-4 PIC X(4).

05 WS-CANADA-ZIP-CK PIC X(6). 05 F REDEFINES WS-CANADA-ZIP-CK. 10 WS-CA-ZIP-POS-1 PIC X(1). 10 WS-CA-ZIP-POS-2 PIC X(1). 10 WS-CA-ZIP-POS-3 PIC X(1). 10 WS-CA-ZIP-POS-4 PIC X(1). 10 WS-CA-ZIP-POS-5 PIC X(1). 10 WS-CA-ZIP-POS-6 PIC X(1).

05 WS-DATE-DISECT. 10 MM PIC X(2). 10 SLASH-1 PIC X. 88 SLASH-DATE VALUE '/'. 10 DD PIC X(2). 10 SLASH-2 PIC X. 10 CC PIC X(2). 10 YY PIC X(2).

05 WS-DATE-DISECT-4. 10 MM PIC X(2). 10 DD PIC X(2). 10 CC PIC X(2). 10 YY PIC X(2). 10 SLASH-1 PIC X(1). 10 SLASH-2 PIC X(1).

05 WS-UNPK-NEXT-AVL-TICK-NBR PIC 9(7). 05 F REDEFINES WS-UNPK-NEXT-AVL-TICK-NBR. 10 F PIC 9(1). 10 WS-NEXT-AVL-TICK-NBR PIC 9(6).

05 WS-UNPK-EIBTIME PIC 9(7). 05 F REDEFINES WS-UNPK-EIBTIME. 10 F PIC 9(1). 10 WS-CURR-TIME PIC 9(6).

05 WS-UNPK-EIBDATE-YYYYDDD PIC 9(7). 05 F REDEFINES WS-UNPK-EIBDATE-YYYYDDD. 10 WS-UNPK-EIBDATE-CC-IND PIC 9(2). 88 20TH-CENTURY VALUE 00. 88 21ST-CENTURY VALUE 01. 10 WS-UNPK-EIBDATE-YYDDD PIC 9(5).

05 WS-STR-CLS-DT-YYYYDDD PIC 9(7). 05 WS-CURDT-LESS-MAXDAYS-YYYYDDD PIC 9(7).

************************** 01 WS-TEMP-Q-WORK-FIELDS. ************************** 05 TS-LEN PIC S9(04) BINARY VALUE 8.

05 TS-REC. 10 TS-SYS-ID PIC XXX. 10 TS-OPER-ID PIC XXX. 10 F PIC XX.

05 WS-CONVERSION-FIELDS. 10 WS-STORE-DISECT.

Page 11: COBOL CICS EXAMPLE-SC52P52

15 F PIC X(4). 15 WS-STR-NBR-TEMP-Q-PART PIC X(2). 10 WS-TICKET-DISECT. 15 F PIC X(3). 15 WS-TICKET-TEMP-Q-PART PIC X(3).

05 WS-TS-KEY. 10 WS-PGM-ID PIC X(3) VALUE 'SES'. 10 WS-PARTIAL-STR-NBR PIC X(2) VALUE SPACES. 10 WS-TRAN-TYP-CD PIC X(1) VALUE SPACES. 10 WS-PARTIAL-SLTKT-NBR PIC S9(3) COMP-3. *=====================* * C O P Y B O O K S * *=====================* * maps used by this program COPY SC52S52.

* map attributes COPY MAPATTR.

* attention key identifiers COPY DFHAID.

* top secret COPY TSSCPLC.

* CNVDATEC WORK AREA COPY CNVDTWS.

01 SCCTRL-RECORD. COPY SCCTRL REPLACING ==:CTRL:== BY ==CTRL==.

01 SCSALE-RECORD. COPY SCSALE REPLACING ==:SALE:== BY ==SALE==.

01 SCPHONE-RECORD. COPY SCPHONE REPLACING ==:PHON:== BY ==PHON==.

01 SC53LINK-RECORD. COPY SC53LINK REPLACING ==:COMM:== BY ==COM53S==.

*=====================* * C O M M A R E A * *=====================* LINKAGE SECTION. 01 DFHCOMMAREA PIC X(4096). 01 F REDEFINES DFHCOMMAREA. COPY SCCOMMC REPLACING ==:COMMC:== BY ==COMM==. *----------------- * sc52 work fields *----------------- 02 COMM-SC52-WORK-FIELDS. 05 COMM-HI-SELECTION PIC S9(4) BINARY. 05 COMM-ID-SELECTION PIC S9(4) BINARY. 05 COMM-LAST-SELECTION PIC S9(4) BINARY. 05 COMM-LAST-PHONE-CHAR PIC S9(4) BINARY. 05 COMM-LAST-POSTLCD-CHAR PIC S9(4) BINARY. 05 COMM-CUST-STATION-ID-SAVE PIC X(4). 05 COMM-CTRL-CNTRY-CD PIC X(2). 05 COMM-POSTL-CD-RANGE-NBR PIC S9(2) COMP. 05 COMM-POSTL-CD-RANGES OCCURS 5 TIMES. 10 COMM-POSTL-CD-RANGE-BEG PIC X(3). 10 COMM-POSTL-CD-RANGE-END PIC X(3).

Page 12: COBOL CICS EXAMPLE-SC52P52

05 COMM-SLCT-NEEDED PIC X(1). 05 COMM-SLTKT-NBR-LINES PIC S9(3) COMP-3. 05 COMM-STR-CLOSED-MSG-DAYS PIC ZZ9.

05 COMM-PHONE-ID-TBL-ENTRY OCCURS 8 TIMES. 10 COMM-TBL-CUST-NM PIC X(30). 10 COMM-TBL-CUST-LINE1-ADDR PIC X(30). 10 COMM-TBL-CUST-LINE2-ADDR PIC X(30). 10 COMM-TBL-CUST-CITY-NM PIC X(21). 10 COMM-TBL-CUST-STATE-ID PIC X(2). 10 COMM-TBL-CUST-POSTL-CD PIC X(11).

10 COMM-TBL-CUST-PHONE-NBR PIC X(12). 10 COMM-TBL-NON-FOREIGN-PHONE REDEFINES COMM-TBL-CUST-PHONE-NBR. 15 COMM-TBL-CUST-AREA-CD PIC X(3). 15 COMM-TBL-CUST-EXCHG PIC X(3). 15 COMM-TBL-CUST-STATION-ID PIC X(4). 15 F PIC X(2).

10 COMM-TBL-SVP-CNTCT-NM PIC X(30). 10 COMM-TBL-STORE-NBR PIC X(6). 10 COMM-TBL-TICKET-NBR PIC X(6).

10 COMM-TBL-SCPHONE-KEY PIC X(21).

* This extra scphone-key entry is needed to store the new key * built when a selection is not made from the existing phone id * matches. User will then be entering new cust info for which a * new key will need to be built and stored for rprphone update. 05 COMM-NEW-CUST-SCPHONE-KEY PIC X(21). 05 F REDEFINES COMM-NEW-CUST-SCPHONE-KEY. 10 COMM-NEW-CUST-STATION-ID PIC X(4). 10 COMM-NEW-ADD-DATE-TIME. 15 COMM-NEW-ADD-DATE. 20 COMM-NEW-ADD-MM PIC X(2). 20 COMM-NEW-ADD-DD PIC X(2). 20 COMM-NEW-ADD-CC PIC X(2). 20 COMM-NEW-ADD-YY PIC X(2). 15 COMM-NEW-ADD-TIME. 20 COMM-NEW-ADD-HH PIC X(2). 20 COMM-NEW-ADD-MN PIC X(2). 20 COMM-NEW-ADD-SS PIC X(2). 10 COMM-NEW-OPER-ID PIC X(3). *------------------------ * sc52 process indicators *------------------------ 02 COMM-SC52-PROC-INDICATORS. 05 COMM-SEND-MAP-IND PIC X. 88 SENDING-DATAONLY VALUE 'Y'. 88 SENDING-WHOLE-MAP VALUE 'N'.

05 COMM-CHANGES-MADE-IND PIC X. 88 CHANGES-MADE VALUE 'Y'. 88 CHANGES-NOT-MADE VALUE 'N'.

05 COMM-DATA-TO-BE-LOST-WRN-IND PIC X. 88 DATA-TO-BE-LOST-WRN-GIVEN VALUE 'Y'. 88 DATA-TO-BE-LOST-WRN-NOT-GIVEN VALUE 'N'.

05 COMM-TICK-NOT-CMPLT-WRN-IND PIC X. 88 TICK-NOT-CMPLT-WRN-GIVEN VALUE 'Y'. 88 TICK-NOT-CMPLT-WRN-NOT-GIVEN VALUE 'N'.

Page 13: COBOL CICS EXAMPLE-SC52P52

05 COMM-INIT-SELECT-MADE-IND PIC X. 88 INIT-SELECT-MADE VALUE 'Y'. 88 INIT-SELECT-NOT-MADE VALUE 'N'.

05 COMM-SCPHONE-MATCHES-IND PIC X. 88 PHONEI-MATCHED-SCPHONE VALUE 'Y'. 88 PHONEI-NOMATCH-SCPHONE VALUE 'N'.

05 COMM-FORMAT-PHONE-ENTERED-IND PIC X. 88 FORMATTED-PHONE-ENTERED VALUE 'Y'. 88 FORMATTED-PHONE-NOT-ENTERED VALUE 'N'.

05 COMM-COUNTRY-IND PIC X. 88 NON-FOREIGN-COUNTRY VALUE 'Y'. 88 FOREIGN-COUNTRY VALUE 'N'.

05 COMM-DB2-STR-CLOSE-DT-IND PIC X. 88 DB2-STR-CLOSE-DT-INVALID VALUE 'Y'. 88 DB2-STR-CLOSE-DT-VALID VALUE 'N'. *---------------------- * sc52 input indicators *---------------------- 02 COMM-SC52-INPUT-INDICATORS. *------ * phone *------ 05 COMM-PHONE-ENTERED-IND PIC X. 88 PHONE-ENTERED VALUE 'Y'. 88 PHONE-NOT-ENTERED VALUE 'N'.

05 COMM-PHONE-NUMERIC-IND PIC X. 88 PHONE-NUMERIC VALUE 'Y'. 88 PHONE-NOT-NUMERIC VALUE 'N'.

05 COMM-PHONE-SHORT-IND PIC X. 88 PHONE-NOT-TOO-SHORT VALUE 'Y'. 88 PHONE-TOO-SHORT VALUE 'N'.

05 COMM-PHONE-LONG-IND PIC X. 88 PHONE-NOT-TOO-LONG VALUE 'Y'. 88 PHONE-TOO-LONG VALUE 'N'.

05 COMM-PHONE-NON-FRGN-MAX-IND PIC X. 88 PHONE-NOT-GT-NON-FOREIGN-MAX VALUE 'Y'. 88 PHONE-GT-NON-FOREIGN-MAX VALUE 'N'.

05 COMM-PHONE-VALID-IND PIC X. 88 PHONE-VALID VALUE 'Y'. 88 PHONE-INVALID VALUE 'N'.

05 COMM-FORMATTED-PHONE-VALID-IND PIC X. 88 FORMATTED-PHONE-VALID VALUE 'Y'. 88 FORMATTED-PHONE-INVALID VALUE 'N'.

05 COMM-PHONE-FORMATTED-IND PIC X. 88 PHONE-FORMATTED VALUE 'Y'. 88 PHONE-NOT-FORMATTED VALUE 'N'. *------------- * id selection *------------- 05 COMM-ID-SELECTION-ENTERED-IND PIC X. 88 ID-SELECTION-ENTERED VALUE 'Y'.

Page 14: COBOL CICS EXAMPLE-SC52P52

88 ID-SELECTION-NOT-ENTERED VALUE 'N'.

05 COMM-ID-SELECTION-VALID-IND PIC X. 88 ID-SELECTION-VALID VALUE 'Y'. 88 ID-SELECTION-INVALID VALUE 'N'. *-------- * salesid *-------- 05 COMM-SALESID-ENTERED-IND PIC X. 88 SALESID-ENTERED VALUE 'Y'. 88 SALESID-NOT-ENTERED VALUE 'N'.

05 COMM-SALESID-VALID-IND PIC X. 88 SALESID-VALID VALUE 'Y'. 88 SALESID-INVALID VALUE 'N'.

05 COMM-SALESID-OK-FOR-SALE-IND PIC X. 88 SALESID-OK-FOR-SALE-TYP VALUE 'Y'. 88 SALESID-NOT-OK-FOR-SALE-TYP VALUE 'N'.

05 COMM-SALESID-NEED-SLCT-TYP-IND PIC X. 88 SALESID-DONT-NEED-SLCT-TYP VALUE 'Y'. 88 SALESID-NEED-SLCT-TYP VALUE 'N'. *-------- * franstr *-------- 05 COMM-FRANSTR-ENTERED-IND PIC X. 88 FRANSTR-ENTERED VALUE 'Y'. 88 FRANSTR-NOT-ENTERED VALUE 'N'.

05 COMM-FRANSTR-VALID-IND PIC X. 88 FRANSTR-VALID VALUE 'Y'. 88 FRANSTR-INVALID VALUE 'N'.

05 COMM-FRANSTR-CLOSED-IND PIC X. 88 FRANSTR-NOT-CLOSED-TOO-LONG VALUE 'Y'. 88 FRANSTR-CLOSED-TOO-LONG VALUE 'N'.

05 COMM-EIBDATE-SUBTRACT-IND PIC X. 88 EIBDATE-SUBTRACT-GOOD VALUE 'Y'. 88 EIBDATE-SUBTRACT-BAD VALUE 'N'. *-------- * frantkt *-------- 05 COMM-FRANTKT-ENTERED-IND PIC X. 88 FRANTKT-ENTERED VALUE 'Y'. 88 FRANTKT-NOT-ENTERED VALUE 'N'.

05 COMM-FRANTKT-NUMERIC-IND PIC X. 88 FRANTKT-NUMERIC VALUE 'Y'. 88 FRANTKT-NOT-NUMERIC VALUE 'N'.

05 COMM-FRANTKT-SHORT-IND PIC X. 88 FRANTKT-NOT-TOO-SHORT VALUE 'Y'. 88 FRANTKT-TOO-SHORT VALUE 'N'. * *jcf begin renewals temp code * *-------- * typcode *-------- * 05 COMM-TYPCODE-ENTERED-IND PIC X. * 88 TYPCODE-ENTERED VALUE 'Y'.

Page 15: COBOL CICS EXAMPLE-SC52P52

* 88 TYPCODE-NOT-ENTERED VALUE 'N'. * * 05 COMM-TYPCODE-VALID-IND PIC X. * 88 TYPCODE-VALID VALUE 'Y'. * 88 TYPCODE-INVALID VALUE 'N'. * *jcf end renewals temp code * *---------- * cust name *---------- 05 COMM-CUSTNAM-ENTERED-IND PIC X. 88 CUSTNAM-ENTERED VALUE 'Y'. 88 CUSTNAM-NOT-ENTERED VALUE 'N'. *--------- * address1 *--------- 05 COMM-ADDR1-ENTERED-IND PIC X. 88 ADDR1-ENTERED VALUE 'Y'. 88 ADDR1-NOT-ENTERED VALUE 'N'. *----- * city *----- 05 COMM-CITY-ENTERED-IND PIC X. 88 CITY-ENTERED VALUE 'Y'. 88 CITY-NOT-ENTERED VALUE 'N'. *------ * state *------ 05 COMM-STATE-ENTERED-IND PIC X. 88 STATE-ENTERED VALUE 'Y'. 88 STATE-NOT-ENTERED VALUE 'N'.

05 COMM-STATE-VALID-IND PIC X. 88 STATE-VALID VALUE 'Y'. 88 STATE-INVALID VALUE 'N'. *-------- * postlcd *-------- 05 COMM-POSTLCD-ENTERED-IND PIC X. 88 POSTLCD-ENTERED VALUE 'Y'. 88 POSTLCD-NOT-ENTERED VALUE 'N'.

05 COMM-POSTLCD-SHORT-IND PIC X. 88 POSTLCD-NOT-TOO-SHORT VALUE 'Y'. 88 POSTLCD-TOO-SHORT VALUE 'N'.

05 COMM-POSTLCD-LONG-IND PIC X. 88 POSTLCD-NOT-TOO-LONG VALUE 'Y'. 88 POSTLCD-TOO-LONG VALUE 'N'.

05 COMM-POSTLCD-IMBED-BLKS-IND PIC X. 88 POSTLCD-NO-IMBEDDED-BLANKS VALUE 'Y'. 88 POSTLCD-IMBEDDED-BLANKS VALUE 'N'.

05 COMM-POSTLCD-VALID-FOR-CA-IND PIC X. 88 POSTLCD-VALID-FOR-CA VALUE 'Y'. 88 POSTLCD-INVALID-FOR-CA VALUE 'N'.

05 COMM-POSTLCD-VALID-FOR-US-IND PIC X. 88 POSTLCD-VALID-FOR-US VALUE 'Y'. 88 POSTLCD-INVALID-FOR-US VALUE 'N'.

Page 16: COBOL CICS EXAMPLE-SC52P52

05 COMM-POSTLCD-RANGE-VALID-IND PIC X. 88 POSTLCD-RANGE-VALID VALUE 'Y'. 88 POSTLCD-RANGE-INVALID VALUE 'N'.

PROCEDURE DIVISION. *************************************************************** BEGIN-PGM. *************************************************************** MOVE LOW-VALUES TO SC52M52I SET INVALID-KEY-NOT-PRESSED TO TRUE IF COMM-CURR-PGM NOT = 'SC52P52 ' EVALUATE TRUE WHEN COMM-REPLACEMENT-TRAN PERFORM SC5K-REPLACEMENT-ENTRY PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID WHEN OTHER EVALUATE TRUE WHEN COMM-CURR-PGM = 'SC55P55 ' OR 'SC56P56 ' * PERFORM SALESID-SLCT-TYP-CROSSCHECK * IF SALESID-NEED-SLCT-TYP * MOVE COMM-SALESID-NEED-SLCT-TYP-IND * TO WS-SALESID-NEED-SLCT-TYP-IND * SET COMM-TICKET-NOT-COMPLETED TO TRUE * PERFORM RPRSALE-RECORD-B-UPDATE * PERFORM SC52-NONZERO-TICKET-NBR-ENTRY * ELSE MOVE ZERO TO COMM-TICKET-NBR PERFORM SC52-ZERO-TICKET-NBR-ENTRY PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID * END-IF WHEN OTHER IF COMM-TICKET-NBR = ZERO PERFORM SC52-ZERO-TICKET-NBR-ENTRY PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID ELSE PERFORM SC52-NONZERO-TICKET-NBR-ENTRY END-IF END-EVALUATE END-EVALUATE END-IF EVALUATE EIBAID *------------------------ * <clear> backup one step *------------------------ WHEN DFHCLEAR PERFORM SC52-EXIT-RTN *------------------------ * <pf1> backup one step *------------------------ WHEN DFHPF1 PERFORM SC52-EXIT-RTN *-------------------------- * <enter> process selection *-------------------------- WHEN DFHENTER SET DATA-TO-BE-LOST-WRN-NOT-GIVEN TO TRUE SET TICK-NOT-CMPLT-WRN-NOT-GIVEN TO TRUE

EVALUATE TRUE WHEN COMM-REPLACEMENT-TRAN

Page 17: COBOL CICS EXAMPLE-SC52P52

PERFORM RECEIVE-MAP IF NO-MAPFAIL PERFORM VALIDATE-MAP-INPUT END-IF PERFORM CHECK-MAP-ERRORS SET INVALID-KEY-PRESSED TO TRUE PERFORM CHECK-MAP-ERRORS

WHEN COMM-TICKET-NOT-VOIDED PERFORM RECEIVE-MAP IF NO-MAPFAIL PERFORM VALIDATE-MAP-INPUT END-IF PERFORM CHECK-MAP-ERRORS MOVE SPACES TO WRNMSG1O IF MAPFAIL MOVE NOTHING-TO-PROCESS-MSG TO WRNMSG1O END-IF MOVE -1 TO SALESIDL PERFORM SEND-MAP

WHEN OTHER PERFORM CHECK-MAP-ERRORS SET INVALID-KEY-PRESSED TO TRUE PERFORM CHECK-MAP-ERRORS END-EVALUATE *----------------- * <pf3> SkuInfo *----------------- WHEN DFHPF3 SET DATA-TO-BE-LOST-WRN-NOT-GIVEN TO TRUE SET TICK-NOT-CMPLT-WRN-NOT-GIVEN TO TRUE SET SALESID-DONT-NEED-SLCT-TYP TO TRUE

* this function not available until user selects existing cust * info or indicates the desire to enter new cust info both of * which constitute an initial selection and user is not performing * a misc transaction. IF INIT-SELECT-MADE AND NOT COMM-MISCELLANEOUS-TRAN AND NOT COMM-REPLACEMENT-TRAN PERFORM RECEIVE-MAP IF NOT MAPFAIL PERFORM VALIDATE-MAP-INPUT END-IF PERFORM CHECK-MAP-ERRORS SET COMM-TICKET-NOT-COMPLETED TO TRUE MOVE 1 TO COMM-CURR-LINE-SEQ-NBR IF COMM-TICKET-NBR = ZERO PERFORM LOAD-NEXT-AVL-TICKET-NBR PERFORM RPRSALE-RECORD-B-UPDATE PERFORM RPRSALE-RECORD-BB-UPDATE PERFORM RPRPHONE-UPDATE ELSE IF CHANGES-MADE PERFORM RPRSALE-RECORD-B-UPDATE PERFORM RPRSALE-RECORD-BB-UPDATE PERFORM RPRPHONE-UPDATE END-IF END-IF PERFORM CREATE-TEMP-Q-ENTRY MOVE 'SC53P53' TO PROG-ID PERFORM XCTL-NEXT ELSE

Page 18: COBOL CICS EXAMPLE-SC52P52

PERFORM CHECK-MAP-ERRORS SET INVALID-KEY-PRESSED TO TRUE PERFORM CHECK-MAP-ERRORS END-IF *--------------- * <pf10> summary *--------------- WHEN DFHPF10 SET DATA-TO-BE-LOST-WRN-NOT-GIVEN TO TRUE SET TICK-NOT-CMPLT-WRN-NOT-GIVEN TO TRUE

EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN PERFORM RECEIVE-MAP IF NOT MAPFAIL PERFORM VALIDATE-MAP-INPUT END-IF PERFORM CHECK-MAP-ERRORS SET COMM-TICKET-NOT-COMPLETED TO TRUE IF COMM-TICKET-NBR = ZERO PERFORM LOAD-NEXT-AVL-TICKET-NBR PERFORM RPRSALE-RECORD-B-UPDATE PERFORM RPRSALE-RECORD-BB-UPDATE PERFORM RPRPHONE-UPDATE ELSE IF CHANGES-MADE PERFORM RPRSALE-RECORD-B-UPDATE PERFORM RPRSALE-RECORD-BB-UPDATE PERFORM RPRPHONE-UPDATE END-IF END-IF PERFORM CREATE-TEMP-Q-ENTRY MOVE 'SC54P54' TO PROG-ID PERFORM XCTL-NEXT

WHEN COMM-REPLACEMENT-TRAN PERFORM RECEIVE-MAP IF NOT MAPFAIL PERFORM VALIDATE-MAP-INPUT END-IF PERFORM CHECK-MAP-ERRORS SET COMM-ISCT-NOT-COMPLETE TO TRUE IF CHANGES-MADE PERFORM RPRSALE-RECORD-C-UPDATE PERFORM RPRSALE-RECORD-CAA-UPDATE PERFORM RPRPHONE-UPDATE END-IF MOVE 'SC5KP5K' TO PROG-ID PERFORM XCTL-NEXT

WHEN OTHER IF COMM-TICKET-NBR NOT = ZERO PERFORM RECEIVE-MAP IF NOT MAPFAIL PERFORM VALIDATE-MAP-INPUT END-IF PERFORM CHECK-MAP-ERRORS IF CHANGES-MADE PERFORM RPRSALE-RECORD-B-UPDATE PERFORM RPRSALE-RECORD-BB-UPDATE PERFORM RPRPHONE-UPDATE END-IF MOVE 'SC54P54' TO PROG-ID

Page 19: COBOL CICS EXAMPLE-SC52P52

PERFORM XCTL-NEXT ELSE PERFORM CHECK-MAP-ERRORS SET INVALID-KEY-PRESSED TO TRUE PERFORM CHECK-MAP-ERRORS END-IF END-EVALUATE *------------------ * <pf22> new ticket *------------------ WHEN DFHPF22 SET DATA-TO-BE-LOST-WRN-NOT-GIVEN TO TRUE SET TICK-NOT-CMPLT-WRN-NOT-GIVEN TO TRUE

* this function not valid unless voided ticket is on screen IF COMM-TICKET-VOIDED SET COMM-TICKET-NOT-COMPLETED TO TRUE SET COMM-TICKET-NOT-VOIDED TO TRUE PERFORM DELETE-TEMP-Q-ENTRY

* see if daily report status needs to be reverted PERFORM RPRSALE-RECORD-A-UPDATE

* set up for new ticket (almost like entering SC52 w/zero ticket) PERFORM NEW-TICKET-SETUP MOVE ZEROS TO COMM-TICKET-NBR PERFORM CHECK-MAP-ERRORS ELSE PERFORM CHECK-MAP-ERRORS SET INVALID-KEY-PRESSED TO TRUE PERFORM CHECK-MAP-ERRORS END-IF *--------------------- * <pf24> void / unvoid *--------------------- WHEN DFHPF24 SET DATA-TO-BE-LOST-WRN-NOT-GIVEN TO TRUE SET TICK-NOT-CMPLT-WRN-NOT-GIVEN TO TRUE IF COMM-TICKET-NBR NOT = ZERO * V O I D IF COMM-TICKET-NOT-VOIDED SET COMM-TICKET-NOT-COMPLETED TO TRUE SET COMM-TICKET-VOIDED TO TRUE

* see if daily report status needs to be reverted PERFORM RPRSALE-RECORD-A-UPDATE PERFORM RPRSALE-RECORD-BA-UPDATE PERFORM DELETE-TEMP-Q-ENTRY SET COMM-TICKET-NOT-VOIDED TO TRUE

* set up for new ticket (almost like entering SC52 w/zero ticket) PERFORM NEW-TICKET-SETUP MOVE MY-PROG TO COMM-CURR-PGM PERFORM LOAD-PGMNO-ACID MOVE COMM-STORE-NBR TO STOREO PERFORM PUT-DAILY-RPT-DT-ON-MAP MOVE COMM-TICKET-NBR TO TRANNBRO VOID-MSG-TICKET-NBR MOVE TICKET-VOIDED-MSG TO WRNMSG1O MOVE ZEROS TO COMM-TICKET-NBR PERFORM SEND-MAP ELSE * U N V O I D

Page 20: COBOL CICS EXAMPLE-SC52P52

SET COMM-TICKET-NOT-COMPLETED TO TRUE SET COMM-TICKET-NOT-VOIDED TO TRUE

* see if daily report status needs to be reverted PERFORM RPRSALE-RECORD-A-UPDATE PERFORM RPRSALE-RECORD-BA-UPDATE IF NON-FOREIGN-COUNTRY MOVE COMM-CUST-STATION-ID TO PHON-CUST-STATION-ID ELSE MOVE COMM-CUST-STATION-ID-SAVE TO PHON-CUST-STATION-ID END-IF PERFORM LOAD-PHONE-ID-MATCHES IF PHONEI-MATCHED-SCPHONE MOVE -1 TO IDPROMPL ELSE SET INIT-SELECT-MADE TO TRUE SET ID-SELECTION-ENTERED TO TRUE SET ID-SELECTION-VALID TO TRUE MOVE -1 TO SALESIDL END-IF EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-3A TO WRNMSG2O WHEN OTHER MOVE WS-FUNC-KEYS-3 TO WRNMSG2O END-EVALUATE PERFORM UNLOCK-CUST-INFO-FIELDS MOVE COMM-TICKET-NBR TO UNVOID-MSG-TICKET-NBR MOVE TICKET-UNVOIDED-MSG TO WRNMSG1O PERFORM SEND-MAP END-IF ELSE PERFORM CHECK-MAP-ERRORS SET INVALID-KEY-PRESSED TO TRUE PERFORM CHECK-MAP-ERRORS END-IF *------ * other *------ WHEN OTHER SET DATA-TO-BE-LOST-WRN-NOT-GIVEN TO TRUE SET TICK-NOT-CMPLT-WRN-NOT-GIVEN TO TRUE PERFORM RECEIVE-MAP IF NOT MAPFAIL PERFORM VALIDATE-MAP-INPUT END-IF PERFORM CHECK-MAP-ERRORS SET INVALID-KEY-PRESSED TO TRUE PERFORM CHECK-MAP-ERRORS END-EVALUATE PERFORM CICS-RETURN-TRANSID GOBACK EXIT . ***************************************************************** SC52-ZERO-TICKET-NBR-ENTRY. ***************************************************************** *-------------------- * initialize commarea *-------------------- SET COMM-TICKET-NOT-VOIDED TO TRUE

Page 21: COBOL CICS EXAMPLE-SC52P52

INITIALIZE COMM-SALES-ID COMM-CUST-NM COMM-CUST-LINE1-ADDR COMM-CUST-LINE2-ADDR COMM-CUST-CITY-NM COMM-CUST-STATE-ID COMM-CUST-CNTRY-CD COMM-CUST-POSTL-CD COMM-CUST-PHONE-NBR COMM-SVP-CNTCT-NM COMM-FRANCHISE-STORE-NBR COMM-CUST-TAXMP-FRM-IND COMM-SEND-CUST-TAXMP-FRM-IND COMM-SALE-RFND-IND COMM-CURR-LINE-SEQ-NBR COMM-SC52-WORK-FIELDS INITIALIZE COMM-SC52-PROC-INDICATORS COMM-SC52-INPUT-INDICATORS REPLACING ALPHANUMERIC BY 'N'

* calculate hi selection MOVE MAX-SELECTIONS TO COMM-HI-SELECTION ADD 1 TO COMM-HI-SELECTION

MOVE MY-PROG TO COMM-CURR-PGM PERFORM LOAD-PGMNO-ACID MOVE COMM-STORE-NBR TO STOREO

PERFORM PUT-DAILY-RPT-DT-ON-MAP

MOVE TICKET-LABEL TO TRANLBLO MOVE COMM-TICKET-NBR TO TRANNBRO

IF COMM-FRANCHISE-TRAN MOVE FRANSTR-LABEL TO FRANLBLO MOVE FRANTKT-LABEL TO FRNLBL2O END-IF

* initial tax fields: map and comm * comm-send-cust-taxmp-frm-ind: updatable only on the summary * screen MOVE 'N' TO TXFRMOFO SENDTAXO COMM-CUST-TAXMP-FRM-IND COMM-SEND-CUST-TAXMP-FRM-IND

PERFORM LOCK-INITIAL-FIELDS SET COMM-TICKET-NOT-COMPLETED TO TRUE MOVE UNPROT-BRT TO SALESIDA PHONEA MOVE SALESID-NOT-ENTERED-MSG TO WRNMSG1O MOVE WS-FUNC-KEYS-1 TO WRNMSG2O MOVE -1 TO SALESIDL . ***************************************************************** SC52-NONZERO-TICKET-NBR-ENTRY. ***************************************************************** * initialize sc52 comm INITIALIZE COMM-SC52-WORK-FIELDS

* all process indicators to 'not' status. INITIALIZE COMM-SC52-PROC-INDICATORS REPLACING ALPHANUMERIC BY 'N'

Page 22: COBOL CICS EXAMPLE-SC52P52

* all input indicators to 'valid' or ok status. INITIALIZE COMM-SC52-INPUT-INDICATORS REPLACING ALPHANUMERIC BY 'Y'

MOVE MAX-SELECTIONS TO COMM-HI-SELECTION ADD 1 TO COMM-HI-SELECTION SET INIT-SELECT-MADE TO TRUE

MOVE MY-PROG TO COMM-CURR-PGM PERFORM LOAD-PGMNO-ACID MOVE COMM-STORE-NBR TO STOREO

PERFORM PUT-DAILY-RPT-DT-ON-MAP

MOVE TICKET-LABEL TO TRANLBLO MOVE COMM-TICKET-NBR TO TRANNBRO MOVE COMM-SALES-ID TO SALESIDO

* phone# to map (country checkpoint 1) IF COMM-UNITED-STATES OR COMM-CANADA SET NON-FOREIGN-COUNTRY TO TRUE MOVE COMM-CUST-AREA-CD TO WS-CUST-AREA-CD MOVE COMM-CUST-EXCHG TO WS-CUST-EXCHG MOVE COMM-CUST-STATION-ID TO WS-CUST-STATION-ID MOVE WS-NON-FOREIGN-PHONE TO PHONEO ELSE SET FOREIGN-COUNTRY TO TRUE MOVE COMM-CUST-PHONE-NBR TO PHONEO END-IF * *jcf begin temp renewals code * * type code to map * MOVE COMM-CUST-TYP-CD TO TYPCODEO * *jcf end temp renewals code * * fran str to map IF COMM-FRANCHISE-TRAN MOVE FRANSTR-LABEL TO FRANLBLO MOVE FRANTKT-LABEL TO FRNLBL2O MOVE COMM-FRANCHISE-STORE-NBR TO FRANSTRO MOVE COMM-ORG-FRAN-SLTKT-NBR TO FRANTKTO MOVE UNPROT-BRT TO FRANSTRA FRANTKTA ELSE MOVE ASKIP-BRT TO FRANSTRA FRANTKTA END-IF

* postal code (zip). find last postlcd char before loading from * comm to map. we may need this value later MOVE COMM-CUST-POSTL-CD TO WS-CHAR-OUT-TBL MOVE LENGTH OF COMM-CUST-POSTL-CD TO FIELD-MAX-LEN

PERFORM LAST-NONBLANK-CHAR

MOVE LAST-NONBLANK-CHAR-POS TO COMM-LAST-POSTLCD-CHAR MOVE COMM-CUST-POSTL-CD TO POSTLCDO

* remaining map header MOVE COMM-CUST-NM TO CUSTNAMO MOVE COMM-SVP-CNTCT-NM TO CONTACTO

Page 23: COBOL CICS EXAMPLE-SC52P52

MOVE COMM-CUST-LINE1-ADDR TO ADDR1O MOVE COMM-CUST-LINE2-ADDR TO ADDR2O MOVE COMM-CUST-CITY-NM TO CITYO MOVE COMM-CUST-STATE-ID TO STATEO

* must do state lookup on control file here in order to load the * zip code range in the commarea MOVE STATEO TO WS-STATE PERFORM SCCTRL-STATE-LOOKUP

MOVE COMM-CUST-CNTRY-CD TO COUNTRYO COMM-CTRL-CNTRY-CD MOVE COMM-CUST-TAXMP-FRM-IND TO TXFRMOFO MOVE COMM-SEND-CUST-TAXMP-FRM-IND TO SENDTAXO

* phone# (station id). if nonforeign country move it direct IF NON-FOREIGN-COUNTRY MOVE COMM-CUST-STATION-ID TO PHON-CUST-STATION-ID COMM-CUST-STATION-ID-SAVE MOVE NON-FOREIGN-PHONE-MAX-LEN TO COMM-LAST-PHONE-CHAR ELSE

* otherwise we have to figure out where the last 4 chars start MOVE COMM-CUST-PHONE-NBR TO WS-CHAR-OUT-TBL MOVE LENGTH OF COMM-CUST-PHONE-NBR TO FIELD-MAX-LEN PERFORM LAST-NONBLANK-CHAR MOVE LAST-NONBLANK-CHAR-POS TO COMM-LAST-PHONE-CHAR MOVE COMM-CUST-PHONE-NBR (COMM-LAST-PHONE-CHAR - (LENGTH OF PHON-CUST-STATION-ID - 1): LENGTH OF PHON-CUST-STATION-ID) TO PHON-CUST-STATION-ID COMM-CUST-STATION-ID-SAVE END-IF

* ticket voided IF COMM-TICKET-VOIDED MOVE COMM-TICKET-NBR TO VOID-MSG2-TICKET-NBR MOVE TICKET-VOIDED-MSG2 TO WRNMSG1O EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-4A TO WRNMSG2O WHEN OTHER MOVE WS-FUNC-KEYS-4 TO WRNMSG2O END-EVALUATE MOVE -1 TO SALESIDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID ELSE

* ticket not voided PERFORM LOAD-PHONE-ID-MATCHES EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-3A TO WRNMSG2O WHEN OTHER MOVE WS-FUNC-KEYS-3 TO WRNMSG2O END-EVALUATE SET INIT-SELECT-MADE TO TRUE SET ID-SELECTION-ENTERED TO TRUE SET ID-SELECTION-VALID TO TRUE MOVE WS-SALESID-NEED-SLCT-TYP-IND TO COMM-SALESID-NEED-SLCT-TYP-IND

Page 24: COBOL CICS EXAMPLE-SC52P52

MOVE -1 TO SALESIDL PERFORM UNLOCK-CUST-INFO-FIELDS PERFORM CHECK-MAP-ERRORS PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID END-IF . ***************************************************************** SC5K-REPLACEMENT-ENTRY. ***************************************************************** * initialize sc52 comm INITIALIZE COMM-SC52-WORK-FIELDS

* all process indicators to 'not' status. INITIALIZE COMM-SC52-PROC-INDICATORS REPLACING ALPHANUMERIC BY 'N'

* all input indicators to 'valid' or ok status. INITIALIZE COMM-SC52-INPUT-INDICATORS REPLACING ALPHANUMERIC BY 'Y'

MOVE MAX-SELECTIONS TO COMM-HI-SELECTION ADD 1 TO COMM-HI-SELECTION MOVE MY-PROG TO COMM-CURR-PGM PERFORM LOAD-PGMNO-ACID MOVE COMM-STORE-NBR TO STOREO

PERFORM PUT-DAILY-RPT-DT-ON-MAP

MOVE ISCT-LABEL TO TRANLBLO MOVE COMM-ISCT-NBR TO TRANNBRO MOVE COMM-SALES-ID TO SALESIDO MOVE COMM-CUST-PHONE-NBR TO PHONEO MOVE COMM-CUST-NM TO CUSTNAMO MOVE COMM-SVP-CNTCT-NM TO CONTACTO MOVE COMM-CUST-LINE1-ADDR TO ADDR1O MOVE COMM-CUST-LINE2-ADDR TO ADDR2O MOVE COMM-CUST-CITY-NM TO CITYO MOVE COMM-CUST-STATE-ID TO STATEO MOVE COMM-CUST-POSTL-CD TO POSTLCDO MOVE COMM-CUST-TAXMP-FRM-IND TO TXFRMOFO MOVE COMM-SEND-CUST-TAXMP-FRM-IND TO SENDTAXO

SET INIT-SELECT-MADE TO TRUE SET ID-SELECTION-ENTERED TO TRUE SET ID-SELECTION-VALID TO TRUE PERFORM UNLOCK-CUST-INFO-FIELDS MOVE ASKIP-BRT TO SALESIDA CONTACTA MOVE LOW-VALUES TO SALESIDO CONTACTO MOVE WS-FUNC-KEYS-1A TO WRNMSG2O MOVE 1 TO PHONEL CUSTNAML ADDR1L ADDR2L CITYL STATEL POSTLCDL PERFORM VALIDATE-MAP-INPUT PERFORM CHECK-MAP-ERRORS SET CHANGES-NOT-MADE TO TRUE MOVE -1 TO PHONEL

Page 25: COBOL CICS EXAMPLE-SC52P52

. ***************************************************************** LOAD-PGMNO-ACID. ***************************************************************** * program ids MOVE EIBTRNID TO WS-PGM-NAME MOVE '-P52' TO WS-HEAD-NAME MOVE ASKIP-NORM TO PGMNOA MOVE WS-HEADER TO PGMNOO

* acid MOVE COMM-SYSTEM-ID TO WS-SYSTEM-ID MOVE COMM-OPER-ID TO WS-OPER-ID MOVE COMM-CICS-ID TO WS-CICS-ID MOVE ASKIP-NORM TO ACIDA MOVE WS-DASH-ACCESSOR-IDS TO ACIDO . ***************************************************************** PUT-DAILY-RPT-DT-ON-MAP. ***************************************************************** MOVE COMM-DAILY-RPT-DT TO WS-DATE-DISECT-4 MOVE CORRESPONDING WS-DATE-DISECT-4 TO WS-DATE-DISECT MOVE '/' TO SLASH-1 OF WS-DATE-DISECT SLASH-2 OF WS-DATE-DISECT MOVE WS-DATE-DISECT TO DLRPTDTO . ***************************************************************** VALIDATE-MAP-INPUT. ***************************************************************** *--------------- * sales maker id (required) *--------------- IF SALESIDL IS POSITIVE AND SALESIDI NOT = SPACES SET CHANGES-MADE TO TRUE SET SALESID-ENTERED TO TRUE SET SALESID-DONT-NEED-SLCT-TYP TO TRUE

INITIALIZE CTRL-FILE-KEYS-INIT MOVE 'SALESMKRID' TO CTRL-KEY1-REC-TYPE MOVE SALESIDI TO CTRL-KEY2

* must do a partial key start browse here instead of a direct read * because we do not have CTRL-KEY3 (9 digit social security#) at * this point as it is not required for sales entry. * then verify the salesid entered is valid for the type of sale * being performed. PERFORM RPRCTRL-STARTBR IF RECORD-FOUND SET SALESID-VALID TO TRUE PERFORM RPRCTRL-READNEXT PERFORM VARYING SUB FROM 1 BY 1 UNTIL CTRL-SLTKT-TRAN-TYP-CDS (SUB:1) IS EQUAL TO COMM-SLTKT-TRAN-TYP-CD OR SUB > LENGTH OF CTRL-SLTKT-TRAN-TYP-CDS END-PERFORM IF SUB <= LENGTH OF CTRL-SLTKT-TRAN-TYP-CDS SET SALESID-OK-FOR-SALE-TYP TO TRUE MOVE SALESIDI TO COMM-SALES-ID MOVE CTRL-KEY3 TO COMM-SALESMAKER-ID ELSE SET SALESID-NOT-OK-FOR-SALE-TYP TO TRUE

Page 26: COBOL CICS EXAMPLE-SC52P52

END-IF MOVE 'RPRCTRL' TO WS-FILE-ID PERFORM GENERIC-ENDBR ELSE SET SALESID-INVALID TO TRUE END-IF ELSE IF SALESIDA = ERASE-EOF OR SALESIDI = SPACES SET SALESID-NOT-ENTERED TO TRUE END-IF END-IF *------------ * cust phone# (required) *------------ IF PHONEL IS POSITIVE AND PHONEI NOT = SPACES SET PHONE-ENTERED TO TRUE MOVE SPACE TO IDPROMPO

* if we are not doing a replacement update and initial selection * has been made then user is changing phone# and we do not want to * lock the fields they may have already entered data into IF NOT COMM-REPLACEMENT-TRAN IF INIT-SELECT-MADE SET CHANGES-MADE TO TRUE PERFORM UNLOCK-CUST-INFO-FIELDS ELSE PERFORM LOCK-INITIAL-FIELDS END-IF END-IF

* remove leading blanks from phonei MOVE PHONEI TO WS-CHAR-IN-TBL MOVE LENGTH OF PHONEI TO FIELD-MAX-LEN PERFORM LEFT-JUSTIFY-INPUT

* find first nonblank char in phonei starting at rear. put left * justified phone back out to map. PERFORM LAST-NONBLANK-CHAR MOVE LAST-NONBLANK-CHAR-POS TO COMM-LAST-PHONE-CHAR MOVE WS-CHAR-OUT-TBL (1:COMM-LAST-PHONE-CHAR) TO PHONEO WS-PHONE-PREFORMAT-CK

* checking if phonei was entered already formatted (___)___-____ IF OPEN-PAREN-ENTERED AND CLOSE-PAREN-ENTERED AND DASH-ENTERED SET FORMATTED-PHONE-ENTERED TO TRUE SET PHONE-FORMATTED TO TRUE ELSE SET FORMATTED-PHONE-NOT-ENTERED TO TRUE SET PHONE-NOT-FORMATTED TO TRUE END-IF

IF FORMATTED-PHONE-ENTERED IF COMM-LAST-PHONE-CHAR NOT = PHONE-FORMATTED-LEN SET FORMATTED-PHONE-INVALID TO TRUE ELSE SET FORMATTED-PHONE-VALID TO TRUE END-IF ELSE SET FORMATTED-PHONE-VALID TO TRUE END-IF

Page 27: COBOL CICS EXAMPLE-SC52P52

* check if phonei too short or too long IF COMM-LAST-PHONE-CHAR < PHONE-MIN-LEN SET PHONE-TOO-SHORT TO TRUE ELSE SET PHONE-NOT-TOO-SHORT TO TRUE END-IF

IF FORMATTED-PHONE-NOT-ENTERED IF COMM-LAST-PHONE-CHAR > PHONE-MAX-LEN SET PHONE-TOO-LONG TO TRUE ELSE SET PHONE-NOT-TOO-LONG TO TRUE END-IF ELSE SET PHONE-NOT-TOO-LONG TO TRUE END-IF

* continuing backwards to see if any imbedded blanks in phonei IF PHONE-NOT-TOO-SHORT AND PHONE-NOT-TOO-LONG MOVE COMM-LAST-PHONE-CHAR TO SUB4 SUBTRACT 1 FROM SUB4 PERFORM IMBEDDED-BLANKS-CHECK IF IMBEDDED-BLANKS SET PHONE-INVALID TO TRUE ELSE SET PHONE-VALID TO TRUE END-IF END-IF

* see if phonei is numeric. MOVE PHONEI TO WS-CK-NUMERIC-PHONE PERFORM CHECK-NUMERIC-PHONE

* see if too many digits entered for nonforeign phone IF COMM-LAST-PHONE-CHAR > NON-FOREIGN-PHONE-MAX-LEN AND PHONE-NUMERIC AND NON-FOREIGN-COUNTRY AND FORMATTED-PHONE-NOT-ENTERED SET PHONE-GT-NON-FOREIGN-MAX TO TRUE ELSE SET PHONE-NOT-GT-NON-FOREIGN-MAX TO TRUE END-IF

* phonei valid so far IF PHONE-ENTERED AND PHONE-NOT-TOO-SHORT AND PHONE-NOT-TOO-LONG AND PHONE-VALID AND FORMATTED-PHONE-VALID

* save the station id (last 4 chars of phone input) so that * matches to scphone can be displayed MOVE PHONEI (COMM-LAST-PHONE-CHAR - (LENGTH OF PHON-CUST-STATION-ID - 1): LENGTH OF PHON-CUST-STATION-ID) TO PHON-CUST-STATION-ID COMM-CUST-STATION-ID-SAVE

* move phone to commarea IF FORMATTED-PHONE-NOT-ENTERED MOVE PHONEO (1:COMM-LAST-PHONE-CHAR)

Page 28: COBOL CICS EXAMPLE-SC52P52

TO COMM-CUST-PHONE-NBR ELSE MOVE WS-PREFORMAT-AREA-CD TO COMM-CUST-AREA-CD MOVE WS-PREFORMAT-EXCHG TO COMM-CUST-EXCHG MOVE WS-PREFORMAT-STATION-ID TO COMM-CUST-STATION-ID END-IF

IF NOT COMM-REPLACEMENT-TRAN * see if any matches to scphone exist PERFORM LOAD-PHONE-ID-MATCHES IF PHONEI-MATCHED-SCPHONE MOVE -1 TO IDPROMPL

* skip prompting for an initial selection or formatting phone# * if user is trying to exit IF EIBAID NOT = DFHCLEAR AND EIBAID NOT = DFHPF1 EVALUATE TRUE WHEN INIT-SELECT-NOT-MADE MOVE ID-SELECTION-NOT-ENTERED-MSG TO WRNMSG1O MOVE WS-FUNC-KEYS-1 TO WRNMSG2O PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN OTHER * see if phone needs to be formatted IF NON-FOREIGN-COUNTRY AND FORMATTED-PHONE-NOT-ENTERED AND PHONE-NUMERIC AND COMM-LAST-PHONE-CHAR <= NON-FOREIGN-PHONE-MAX-LEN PERFORM FORMAT-PHONE END-IF IF COMM-TICKET-NBR = ZERO EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-2A TO WRNMSG2O WHEN OTHER MOVE WS-FUNC-KEYS-2 TO WRNMSG2O END-EVALUATE END-IF END-EVALUATE END-IF ELSE * no matches for phonei on scphone. see if phone needs to be * formatted PERFORM DEFAULT-COUNTRY-TO-US IF NON-FOREIGN-COUNTRY AND FORMATTED-PHONE-NOT-ENTERED AND PHONE-NUMERIC AND COMM-LAST-PHONE-CHAR <= NON-FOREIGN-PHONE-MAX-LEN PERFORM FORMAT-PHONE END-IF IF COMM-FRANCHISE-TRAN

Page 29: COBOL CICS EXAMPLE-SC52P52

MOVE UNPROT-BRT TO FRANSTRA FRANTKTA END-IF SET INIT-SELECT-MADE TO TRUE SET ID-SELECTION-ENTERED TO TRUE SET ID-SELECTION-VALID TO TRUE MOVE ZEROS TO COMM-ID-SELECTION IF COMM-TICKET-NBR = ZERO EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-2A TO WRNMSG2O WHEN OTHER MOVE WS-FUNC-KEYS-2 TO WRNMSG2O END-EVALUATE END-IF END-IF ELSE * see if phone needs to be formatted IF NON-FOREIGN-COUNTRY AND FORMATTED-PHONE-NOT-ENTERED AND PHONE-NUMERIC AND COMM-LAST-PHONE-CHAR <= NON-FOREIGN-PHONE-MAX-LEN PERFORM FORMAT-PHONE END-IF END-IF END-IF ELSE IF PHONEA = ERASE-EOF OR PHONEI = SPACES SET PHONE-NOT-ENTERED TO TRUE IF NOT COMM-REPLACEMENT-TRAN SET INIT-SELECT-NOT-MADE TO TRUE MOVE SPACES TO IDPROMPO PERFORM LOCK-INITIAL-FIELDS END-IF END-IF END-IF *-------------- * id# selection *-------------- * (required if scphone matches are found and an initial selection * has not been made) IF IDPROMPL IS POSITIVE AND IDPROMPI NOT = SPACES SET ID-SELECTION-ENTERED TO TRUE IF IDPROMPI NOT NUMERIC SET ID-SELECTION-INVALID TO TRUE ELSE MOVE IDPROMPI TO WS-BIN-HALFWORD

* id selection invalid if less than 1 or greater than hi selec- * tion or is not equal to one of the selections loaded to map IF WS-BIN-HALFWORD < 1 OR WS-BIN-HALFWORD > COMM-HI-SELECTION OR ( WS-BIN-HALFWORD NOT = COMM-HI-SELECTION AND WS-BIN-HALFWORD > COMM-LAST-SELECTION ) SET ID-SELECTION-INVALID TO TRUE

Page 30: COBOL CICS EXAMPLE-SC52P52

ELSE SET ID-SELECTION-VALID TO TRUE END-IF END-IF

* have a valid id entry IF ID-SELECTION-VALID SET INIT-SELECT-MADE TO TRUE MOVE WS-BIN-HALFWORD TO COMM-ID-SELECTION

* n e w cust info to be entered IF WS-BIN-HALFWORD = COMM-HI-SELECTION PERFORM DEFAULT-COUNTRY-TO-US * does phone need to be formatted? IF NON-FOREIGN-COUNTRY AND FORMATTED-PHONE-NOT-ENTERED AND PHONE-NUMERIC AND COMM-LAST-PHONE-CHAR <= NON-FOREIGN-PHONE-MAX-LEN PERFORM FORMAT-PHONE END-IF PERFORM BUILD-NEW-CUST-SCPHONE-KEY IF COMM-FRANCHISE-TRAN MOVE UNPROT-BRT TO FRANSTRA FRANTKTA END-IF PERFORM UNLOCK-CUST-INFO-FIELDS MOVE SPACES TO CUSTNAMO ADDR1O ADDR2O CITYO STATEO POSTLCDO CONTACTO INITIALIZE COMM-CUST-NM COMM-CUST-LINE1-ADDR COMM-CUST-LINE2-ADDR COMM-CUST-CITY-NM COMM-CUST-STATE-ID COMM-CUST-POSTL-CD COMM-SVP-CNTCT-NM IF COMM-TICKET-NBR = ZERO EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-2A TO WRNMSG2O WHEN OTHER MOVE WS-FUNC-KEYS-2 TO WRNMSG2O END-EVALUATE END-IF ELSE * o l d cust info to be used. load map and commarea from sc52 * commarea selection table. SET CHANGES-MADE TO TRUE MOVE WS-BIN-HALFWORD TO SUB * * customer name (required) * MOVE COMM-TBL-CUST-NM (SUB) TO CUSTNAMO COMM-CUST-NM IF COMM-CUST-NM = SPACES SET CUSTNAM-NOT-ENTERED TO TRUE ELSE SET CUSTNAM-ENTERED TO TRUE END-IF * * contact (non required)

Page 31: COBOL CICS EXAMPLE-SC52P52

* MOVE COMM-TBL-SVP-CNTCT-NM (SUB) TO CONTACTO COMM-SVP-CNTCT-NM * * address1 (required) * MOVE COMM-TBL-CUST-LINE1-ADDR (SUB) TO ADDR1O COMM-CUST-LINE1-ADDR IF COMM-CUST-LINE1-ADDR = SPACES SET ADDR1-NOT-ENTERED TO TRUE ELSE SET ADDR1-ENTERED TO TRUE END-IF * * address2 (non-required) * MOVE COMM-TBL-CUST-LINE2-ADDR (SUB) TO ADDR2O COMM-CUST-LINE2-ADDR * * city (required) * MOVE COMM-TBL-CUST-CITY-NM (SUB) TO CITYO COMM-CUST-CITY-NM IF COMM-CUST-CITY-NM = SPACES SET CITY-NOT-ENTERED TO TRUE ELSE SET CITY-ENTERED TO TRUE END-IF * * state (required) * MOVE COMM-TBL-CUST-STATE-ID (SUB) TO STATEO * need to do state lookup on scctrl to pickup and load zip code * range to sc52 commarea IF STATEO = SPACES SET STATE-NOT-ENTERED TO TRUE ELSE SET STATE-ENTERED TO TRUE MOVE STATEO TO WS-STATE PERFORM SCCTRL-STATE-LOOKUP SET POSTLCD-RANGE-VALID TO TRUE END-IF * * country (required) not carried on comm-phone-id-tbl-entry since * it can be picked up when scctrl-state-lookup is done

* * postal {zip} code (required) * MOVE COMM-TBL-CUST-POSTL-CD (SUB) TO POSTLCDO COMM-CUST-POSTL-CD IF COMM-CUST-POSTL-CD = SPACES SET POSTLCD-NOT-ENTERED TO TRUE ELSE * find last postlcd char. we may need this value later. MOVE COMM-CUST-POSTL-CD TO WS-CHAR-OUT-TBL MOVE LENGTH OF COMM-CUST-POSTL-CD TO FIELD-MAX-LEN PERFORM LAST-NONBLANK-CHAR MOVE LAST-NONBLANK-CHAR-POS TO COMM-LAST-POSTLCD-CHAR

Page 32: COBOL CICS EXAMPLE-SC52P52

* postlcd will already be validated. set input indicators to 'ok' SET POSTLCD-ENTERED TO TRUE SET POSTLCD-NO-IMBEDDED-BLANKS TO TRUE SET POSTLCD-NOT-TOO-SHORT TO TRUE SET POSTLCD-NOT-TOO-LONG TO TRUE SET POSTLCD-VALID-FOR-US TO TRUE SET POSTLCD-VALID-FOR-CA TO TRUE END-IF * * cust phone# (required) * MOVE COMM-TBL-CUST-PHONE-NBR (SUB) TO COMM-CUST-PHONE-NBR * find last phone nonblank char. we may need this value later. MOVE COMM-CUST-PHONE-NBR TO WS-CHAR-OUT-TBL MOVE LENGTH OF COMM-CUST-PHONE-NBR TO FIELD-MAX-LEN PERFORM LAST-NONBLANK-CHAR MOVE LAST-NONBLANK-CHAR-POS TO COMM-LAST-PHONE-CHAR IF COMM-CUST-PHONE-NBR = SPACES SET PHONE-NOT-ENTERED TO TRUE END-IF

* country checkpoint 2 (see if phone needs to be formatted) but * only if country has been loaded to commarea which will not * occur until a valid state is processed IF COMM-UNITED-STATES OR COMM-CANADA SET NON-FOREIGN-COUNTRY TO TRUE MOVE COMM-CUST-PHONE-NBR TO WS-CK-NUMERIC-PHONE PERFORM CHECK-NUMERIC-PHONE IF PHONE-NUMERIC MOVE COMM-TBL-CUST-AREA-CD (SUB) TO WS-CUST-AREA-CD MOVE COMM-TBL-CUST-EXCHG (SUB) TO WS-CUST-EXCHG MOVE COMM-TBL-CUST-STATION-ID (SUB) TO WS-CUST-STATION-ID MOVE WS-NON-FOREIGN-PHONE TO PHONEO SET PHONE-FORMATTED TO TRUE ELSE MOVE COMM-TBL-CUST-PHONE-NBR (SUB) TO PHONEO SET PHONE-NOT-NUMERIC TO TRUE END-IF ELSE MOVE COMM-TBL-CUST-PHONE-NBR (SUB) TO PHONEO IF COMM-CUST-CNTRY-CD NOT = SPACES SET FOREIGN-COUNTRY TO TRUE SET PHONE-FORMATTED TO TRUE ELSE SET NON-FOREIGN-COUNTRY TO TRUE SET PHONE-NOT-FORMATTED TO TRUE END-IF END-IF IF COMM-FRANCHISE-TRAN MOVE UNPROT-BRT TO FRANSTRA FRANTKTA END-IF PERFORM UNLOCK-CUST-INFO-FIELDS IF COMM-TICKET-NBR = ZERO EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-2A TO WRNMSG2O WHEN OTHER

Page 33: COBOL CICS EXAMPLE-SC52P52

MOVE WS-FUNC-KEYS-2 TO WRNMSG2O END-EVALUATE END-IF END-IF END-IF ELSE IF IDPROMPA = ERASE-EOF OR IDPROMPI = SPACE IF INIT-SELECT-NOT-MADE SET ID-SELECTION-NOT-ENTERED TO TRUE ELSE SET ID-SELECTION-ENTERED TO TRUE SET ID-SELECTION-VALID TO TRUE END-IF END-IF END-IF *---------------- * franchise store (required on franchise sale only) *---------------- IF COMM-FRANCHISE-TRAN IF FRANSTRL IS POSITIVE AND FRANSTRI NOT = SPACES SET CHANGES-MADE TO TRUE SET FRANSTR-ENTERED TO TRUE MOVE 'FRANSTOR' TO COM53S-SQL-OPTION MOVE FRANSTRI TO COM53S-FRANSTR-VALIDATE PERFORM CENTRAL-SQL-VALIDATION IF COM53S-SQLCODE NOT = ZERO * set cursor MOVE -1 TO FRANSTRL PERFORM BAD-SQL-MSG END-IF IF SQL-RETURNED-INVALID SET FRANSTR-INVALID TO TRUE ELSE SET FRANSTR-VALID TO TRUE MOVE FRANSTRI TO COMM-FRANCHISE-STORE-NBR

* store is not truly closed unless its close date is older than * max days allowed to be closed IF COM53S-STR-CLOSE-DT NOT = '00/00/0000' * convert store close date to julian MOVE SPACES TO DTR-DATE-FIELDS SET CALENDAR-TO-JULIAN TO TRUE MOVE COM53S-STR-CLOSE-MM TO DTR-CAL-MM MOVE COM53S-STR-CLOSE-DD TO DTR-CAL-DD MOVE COM53S-STR-CLOSE-CC TO DTR-CAL-CC MOVE COM53S-STR-CLOSE-YY TO DTR-CAL-YY PERFORM CALL-CNVDATEC IF VALID-DATE SET DB2-STR-CLOSE-DT-VALID TO TRUE MOVE DTRO-JUL-DATE TO WS-STR-CLS-DT-YYYYDDD ELSE SET DB2-STR-CLOSE-DT-INVALID TO TRUE END-IF

* subtract max-str-closed-days from current date MOVE SPACES TO DTR-DATE-FIELDS MOVE EIBDATE TO WS-UNPK-EIBDATE-YYYYDDD ADD 1900000 TO WS-UNPK-EIBDATE-YYYYDDD MOVE WS-UNPK-EIBDATE-YYYYDDD TO DTR-JUL-DATE MOVE MAX-STR-CLOSED-DAYS TO DTR-NBR-DAYS-N SET SUBTRACT-DAYS TO TRUE PERFORM CALL-CNVDATEC

Page 34: COBOL CICS EXAMPLE-SC52P52

IF VALID-DATE SET EIBDATE-SUBTRACT-GOOD TO TRUE MOVE DTRO-JUL-DATE-N TO WS-CURDT-LESS-MAXDAYS-YYYYDDD ELSE SET EIBDATE-SUBTRACT-BAD TO TRUE END-IF

* is store close date less than current-date-minus-max-days-store- * can-be-closed date? IF WS-STR-CLS-DT-YYYYDDD < WS-CURDT-LESS-MAXDAYS-YYYYDDD MOVE MAX-STR-CLOSED-DAYS TO COMM-STR-CLOSED-MSG-DAYS SET FRANSTR-CLOSED-TOO-LONG TO TRUE ELSE SET FRANSTR-NOT-CLOSED-TOO-LONG TO TRUE END-IF ELSE SET DB2-STR-CLOSE-DT-VALID TO TRUE SET FRANSTR-NOT-CLOSED-TOO-LONG TO TRUE SET EIBDATE-SUBTRACT-GOOD TO TRUE END-IF END-IF ELSE IF FRANSTRA = ERASE-EOF OR FRANSTRI = SPACES SET FRANSTR-NOT-ENTERED TO TRUE END-IF END-IF END-IF *--------------------------- * original franchise ticket# (required on franchise sale only) *--------------------------- IF COMM-FRANCHISE-TRAN IF FRANTKTL IS POSITIVE AND FRANTKTI NOT = SPACES SET CHANGES-MADE TO TRUE SET FRANTKT-ENTERED TO TRUE

* remove leading blanks from frantkti MOVE FRANTKTI TO WS-CHAR-IN-TBL MOVE LENGTH OF FRANTKTI TO FIELD-MAX-LEN PERFORM LEFT-JUSTIFY-INPUT PERFORM LAST-NONBLANK-CHAR

* frantkti numeric? IF WS-CHAR-OUT-TBL (1:LAST-NONBLANK-CHAR-POS) NOT NUMERIC SET FRANTKT-NOT-NUMERIC TO TRUE ELSE SET FRANTKT-NUMERIC TO TRUE END-IF

* right justify frantkti if frantkti numeric IF FRANTKT-NUMERIC MOVE LENGTH OF FRANTKTI TO FIELD-MAX-LEN PERFORM RIGHT-JUSTIFY-INPUT MOVE WS-CHAR-OUT-TBL (1:LENGTH OF FRANTKTO) TO FRANTKTO

* zero fill frantkti if less than the field max was entered IF FIRST-NONBLANK-CHAR-POS > 1

Page 35: COBOL CICS EXAMPLE-SC52P52

MOVE ZEROS TO FRANTKTO (1:FIRST-NONBLANK-CHAR-POS - 1) END-IF MOVE FRANTKTO TO COMM-ORG-FRAN-SLTKT-NBR ELSE MOVE WS-CHAR-OUT-TBL (1:LAST-NONBLANK-CHAR-POS) TO FRANTKTO END-IF ELSE IF FRANTKTA = ERASE-EOF OR FRANTKTI = SPACES SET FRANTKT-NOT-ENTERED TO TRUE END-IF END-IF END-IF * *jcf begin temp renewals code * *-------------- * cust type code (optional) *-------------- * IF TYPCODEL IS POSITIVE AND TYPCODEI NOT = SPACES * IF TYPCODEI (1:1) = 'X' * SET CHANGES-MADE TO TRUE * SET TYPCODE-ENTERED TO TRUE * SET TYPCODE-VALID TO TRUE * MOVE SPACES TO COMM-CUST-TYP-CD * ELSE * SET CHANGES-MADE TO TRUE * SET TYPCODE-ENTERED TO TRUE * IF TYPCODEI = 'MAJ' OR 'FED' OR 'EDU' OR 'STE' * SET TYPCODE-VALID TO TRUE * MOVE TYPCODEI TO COMM-CUST-TYP-CD * ELSE * SET TYPCODE-INVALID TO TRUE * END-IF * END-IF * ELSE * IF TYPCODEA = ERASE-EOF OR TYPCODEI = SPACES * SET TYPCODE-NOT-ENTERED TO TRUE * END-IF * END-IF * *jcf end temp renewals code * *-------------- * customer name (required) *-------------- IF CUSTNAML IS POSITIVE AND CUSTNAMI NOT = SPACES SET CHANGES-MADE TO TRUE SET CUSTNAM-ENTERED TO TRUE MOVE CUSTNAMI TO COMM-CUST-NM ELSE IF CUSTNAMA = ERASE-EOF OR CUSTNAMI = SPACES SET CUSTNAM-NOT-ENTERED TO TRUE END-IF END-IF *-------- * contact (non required) *-------- IF CONTACTL IS POSITIVE SET CHANGES-MADE TO TRUE MOVE CONTACTI TO COMM-SVP-CNTCT-NM ELSE

Page 36: COBOL CICS EXAMPLE-SC52P52

IF CONTACTA = ERASE-EOF MOVE SPACES TO COMM-SVP-CNTCT-NM END-IF END-IF *--------- * address1 (required) *--------- IF ADDR1L IS POSITIVE AND ADDR1I NOT = SPACES SET CHANGES-MADE TO TRUE SET ADDR1-ENTERED TO TRUE MOVE ADDR1I TO COMM-CUST-LINE1-ADDR ELSE IF ADDR1A = ERASE-EOF OR ADDR1I = SPACES SET ADDR1-NOT-ENTERED TO TRUE END-IF END-IF *--------- * address2 (non-required) *--------- IF ADDR2L IS POSITIVE SET CHANGES-MADE TO TRUE MOVE ADDR2I TO COMM-CUST-LINE2-ADDR ELSE IF ADDR2A = ERASE-EOF MOVE SPACES TO COMM-CUST-LINE2-ADDR END-IF END-IF *----- * city (required) *----- IF CITYL IS POSITIVE AND CITYI NOT = SPACES SET CHANGES-MADE TO TRUE SET CITY-ENTERED TO TRUE MOVE CITYI TO COMM-CUST-CITY-NM ELSE IF CITYA = ERASE-EOF OR CITYI = SPACES SET CITY-NOT-ENTERED TO TRUE END-IF END-IF *------ * state (required) *------ IF STATEL IS POSITIVE AND STATEI NOT = SPACES SET CHANGES-MADE TO TRUE SET STATE-ENTERED TO TRUE IF COMM-CUST-STATE-ID NOT = SPACES IF COMM-CUST-STATE-ID NOT = STATEI SET COMM-TICKET-NOT-COMPLETED TO TRUE END-IF END-IF

* see if only 1 char was entered for state IF STATEI (1:1) = (SPACE OR LOW-VALUES) OR STATEI (2:1) = (SPACE OR LOW-VALUES) SET STATE-INVALID TO TRUE ELSE * look up state on scctrl file MOVE STATEI TO WS-STATE PERFORM SCCTRL-STATE-LOOKUP IF RECORD-FOUND * country checkpoint 3 IF COMM-UNITED-STATES OR COMM-CANADA SET NON-FOREIGN-COUNTRY TO TRUE

Page 37: COBOL CICS EXAMPLE-SC52P52

ELSE SET FOREIGN-COUNTRY TO TRUE END-IF

* p h o n e must be revalidated for nonforeign country IF NON-FOREIGN-COUNTRY MOVE COMM-CUST-PHONE-NBR TO WS-CK-NUMERIC-PHONE PERFORM CHECK-NUMERIC-PHONE IF COMM-LAST-PHONE-CHAR > NON-FOREIGN-PHONE-MAX-LEN AND PHONE-NUMERIC AND FORMATTED-PHONE-NOT-ENTERED SET PHONE-GT-NON-FOREIGN-MAX TO TRUE ELSE SET PHONE-NOT-GT-NON-FOREIGN-MAX TO TRUE END-IF

IF PHONE-NUMERIC AND PHONE-NOT-FORMATTED AND FORMATTED-PHONE-NOT-ENTERED AND PHONE-NOT-TOO-SHORT AND COMM-LAST-PHONE-CHAR <= NON-FOREIGN-PHONE-MAX-LEN PERFORM FORMAT-PHONE END-IF END-IF

* p o s t l c d must be revalidated when country changes but * defer check if it also changed. IF POSTLCDL = ZERO MOVE COMM-CUST-POSTL-CD TO WS-POSTLCD PERFORM POSTLCD-COUNTRY-STATE-CROSS-CK END-IF END-IF END-IF ELSE IF STATEA = ERASE-EOF OR STATEI = SPACES SET STATE-NOT-ENTERED TO TRUE END-IF END-IF *------------------ * postal (zip) code (required) *------------------ IF POSTLCDL IS POSITIVE AND POSTLCDI NOT = SPACES SET CHANGES-MADE TO TRUE SET POSTLCD-ENTERED TO TRUE

* remove leading blanks from postlcdi MOVE POSTLCDI TO WS-CHAR-IN-TBL MOVE LENGTH OF POSTLCDI TO FIELD-MAX-LEN PERFORM LEFT-JUSTIFY-INPUT

* find last nonblank char entered starting at rear of zip. then * put left justified zip back out to map. PERFORM LAST-NONBLANK-CHAR MOVE LAST-NONBLANK-CHAR-POS TO COMM-LAST-POSTLCD-CHAR MOVE WS-CHAR-OUT-TBL (1:COMM-LAST-POSTLCD-CHAR)

Page 38: COBOL CICS EXAMPLE-SC52P52

TO POSTLCDO COMM-CUST-POSTL-CD

* see if any imbedded blanks starting 1 byte to left of last char IF COMM-LAST-POSTLCD-CHAR > 1 MOVE COMM-LAST-POSTLCD-CHAR TO SUB4 SUBTRACT 1 FROM SUB4 PERFORM IMBEDDED-BLANKS-CHECK IF IMBEDDED-BLANKS SET POSTLCD-IMBEDDED-BLANKS TO TRUE ELSE SET POSTLCD-NO-IMBEDDED-BLANKS TO TRUE END-IF ELSE SET POSTLCD-NO-IMBEDDED-BLANKS TO TRUE END-IF

* see if the right format was entered for the postal code with * respect to country then check if the postal code range is valid MOVE POSTLCDI TO WS-POSTLCD PERFORM POSTLCD-COUNTRY-STATE-CROSS-CK MOVE WS-POSTLCD TO COMM-CUST-POSTL-CD ELSE IF POSTLCDA = ERASE-EOF OR POSTLCDI = SPACES SET POSTLCD-NOT-ENTERED TO TRUE END-IF END-IF . ****************************************************************** SCCTRL-STATE-LOOKUP. ****************************************************************** INITIALIZE CTRL-FILE-KEYS-INIT MOVE 'STATEINFO' TO CTRL-KEY1-REC-TYPE MOVE COMM-STORE-NBR TO CTRL-KEY2 MOVE WS-STATE TO CTRL-KEY3 PERFORM RPRCTRL-READ IF RECORD-FOUND SET STATE-VALID TO TRUE MOVE STATEI TO COMM-CUST-STATE-ID MOVE CTRL-CNTRY-CD TO COMM-CUST-CNTRY-CD COUNTRYO MOVE CTRL-POSTL-CD-RANGE-NBR TO COMM-POSTL-CD-RANGE-NBR PERFORM VARYING SUBZIP FROM CTRL-POSTL-CD-RANGE-NBR BY -1 UNTIL SUBZIP = ZERO MOVE CTRL-POSTL-CD-RANGE-BEG (SUBZIP) TO COMM-POSTL-CD-RANGE-BEG (SUBZIP) MOVE CTRL-POSTL-CD-RANGE-END (SUBZIP) TO COMM-POSTL-CD-RANGE-END (SUBZIP) END-PERFORM ELSE SET STATE-INVALID TO TRUE END-IF . *************************************************************** LEFT-JUSTIFY-INPUT. *************************************************************** INITIALIZE WS-CHAR-OUT-TBL

* SUB1 = position of leftmost nonblank char PERFORM VARYING SUB1 FROM 1 BY 1 UNTIL WS-CHAR-IN-BYTE (SUB1) NOT = SPACES END-PERFORM

Page 39: COBOL CICS EXAMPLE-SC52P52

PERFORM VARYING SUB2 FROM 1 BY 1 UNTIL SUB1 > FIELD-MAX-LEN MOVE WS-CHAR-IN-BYTE (SUB1) TO WS-CHAR-OUT-BYTE (SUB2) ADD 1 TO SUB1 END-PERFORM . *************************************************************** RIGHT-JUSTIFY-INPUT. *************************************************************** IF LAST-NONBLANK-CHAR-POS NOT = FIELD-MAX-LEN MOVE WS-CHAR-OUT-TBL TO WS-CHAR-IN-TBL INITIALIZE WS-CHAR-OUT-TBL MOVE LAST-NONBLANK-CHAR-POS TO SUB1 PERFORM VARYING SUB2 FROM FIELD-MAX-LEN BY -1 UNTIL SUB1 = ZERO OR WS-CHAR-IN-BYTE (SUB1) = (SPACE OR LOW-VALUE) MOVE WS-CHAR-IN-BYTE (SUB1) TO WS-CHAR-OUT-BYTE (SUB2) SUBTRACT 1 FROM SUB1 END-PERFORM COMPUTE FIRST-NONBLANK-CHAR-POS = FIELD-MAX-LEN - LAST-NONBLANK-CHAR-POS + 1 END-COMPUTE ELSE MOVE 1 TO FIRST-NONBLANK-CHAR-POS END-IF . *************************************************************** LAST-NONBLANK-CHAR. *************************************************************** * find last nonblank char in a field starting at the right most * position and searching leftward *-------------------------------------------------------------- * WS-CHAR-OUT-TBL: field being searched * LAST-NONBLANK-CHAR-POS: right most nonblank char in field being * searched * FIELD-MAX-LEN: length of field being searched *-------------------------------------------------------------- PERFORM VARYING SUB3 FROM FIELD-MAX-LEN BY -1 UNTIL WS-CHAR-OUT-BYTE (SUB3) NOT = SPACES AND WS-CHAR-OUT-BYTE (SUB3) NOT = LOW-VALUES END-PERFORM MOVE SUB3 TO LAST-NONBLANK-CHAR-POS . *************************************************************** IMBEDDED-BLANKS-CHECK. *************************************************************** * see if any imbedded blanks exist in a given field * * input: SUB4 - should be preset to LAST-NONBLANK-CHAR-POS minus 1 * WS-CHAR-OUT-BYTE - table holding given field * * output: (flag) -> IMBEDDED-BLANKS * NO-IMBEDDED-BLANKS *-------------------------------------------------------------- PERFORM VARYING SUB4 FROM SUB4 BY -1 UNTIL WS-CHAR-OUT-BYTE (SUB4) = SPACE OR

Page 40: COBOL CICS EXAMPLE-SC52P52

WS-CHAR-OUT-BYTE (SUB4) = LOW-VALUE OR SUB4 = 1 END-PERFORM

* check if first char is blank or low-values IF SUB4 = 1 IF WS-CHAR-OUT-BYTE (SUB4) = SPACE OR WS-CHAR-OUT-BYTE (SUB4) = LOW-VALUE SET IMBEDDED-BLANKS TO TRUE ELSE SET NO-IMBEDDED-BLANKS TO TRUE END-IF ELSE

* found blank before 1st char SET IMBEDDED-BLANKS TO TRUE END-IF . ***************************************************************** POSTLCD-COUNTRY-STATE-CROSS-CK. ***************************************************************** * first validate postlcd according to country. different formats * apply to each country

* U N I T E D S T A T E S EVALUATE TRUE WHEN COMM-UNITED-STATES SET POSTLCD-VALID-FOR-CA TO TRUE

* check if postlcd is too short for united states IF COMM-LAST-POSTLCD-CHAR < POSTLCD-US-MIN-LEN SET POSTLCD-TOO-SHORT TO TRUE ELSE SET POSTLCD-NOT-TOO-SHORT TO TRUE END-IF

* check if postlcd is too long for united states IF COMM-LAST-POSTLCD-CHAR > POSTLCD-US-MAX-LEN SET POSTLCD-TOO-LONG TO TRUE ELSE SET POSTLCD-NOT-TOO-LONG TO TRUE END-IF

MOVE WS-POSTLCD (1:COMM-LAST-POSTLCD-CHAR) TO WS-UNITED-STATES-ZIP-CK

* 1st 5 must be numeric, last 4 also unless nonexistant IF WS-US-ZIP-1ST-5 NUMERIC IF WS-US-ZIP-LAST-4 NOT = SPACES AND WS-US-ZIP-LAST-4 NOT NUMERIC SET POSTLCD-INVALID-FOR-US TO TRUE ELSE SET POSTLCD-VALID-FOR-US TO TRUE END-IF ELSE SET POSTLCD-INVALID-FOR-US TO TRUE END-IF

* C A N A D A WHEN COMM-CANADA

Page 41: COBOL CICS EXAMPLE-SC52P52

SET POSTLCD-VALID-FOR-US TO TRUE SET POSTLCD-NOT-TOO-SHORT TO TRUE SET POSTLCD-NOT-TOO-LONG TO TRUE

MOVE WS-POSTLCD (1:COMM-LAST-POSTLCD-CHAR) TO WS-CANADA-ZIP-CK

* pos 1,3,5 must be alpha. pos 2,4,6 must be numeric IF WS-CA-ZIP-POS-1 NOT ALPHABETIC OR WS-CA-ZIP-POS-3 NOT ALPHABETIC OR WS-CA-ZIP-POS-5 NOT ALPHABETIC OR WS-CA-ZIP-POS-2 NOT NUMERIC OR WS-CA-ZIP-POS-4 NOT NUMERIC OR WS-CA-ZIP-POS-6 NOT NUMERIC SET POSTLCD-INVALID-FOR-CA TO TRUE ELSE SET POSTLCD-VALID-FOR-CA TO TRUE END-IF

* O T H E R WHEN OTHER SET POSTLCD-NOT-TOO-SHORT TO TRUE SET POSTLCD-NOT-TOO-LONG TO TRUE SET POSTLCD-VALID-FOR-US TO TRUE SET POSTLCD-VALID-FOR-CA TO TRUE END-EVALUATE

* check the postlcd range according to state. all states, * regardless of country, have certain valid postlcd ranges SET POSTLCD-RANGE-INVALID TO TRUE PERFORM VARYING SUBZIP FROM COMM-POSTL-CD-RANGE-NBR BY -1 UNTIL POSTLCD-RANGE-VALID OR SUBZIP = ZERO IF WS-POSTLCD-RANGE >= COMM-POSTL-CD-RANGE-BEG (SUBZIP) AND WS-POSTLCD-RANGE <= COMM-POSTL-CD-RANGE-END (SUBZIP) SET POSTLCD-RANGE-VALID TO TRUE END-IF END-PERFORM . ***************************************************************** *SALESID-SLCT-TYP-CROSSCHECK. ***************************************************************** * pickup sltkt-nbr-lines from scsale * INITIALIZE SALE-REC-KEY-INIT * MOVE COMM-DAILY-RPT-DT TO SALE-DAILY-RPT-DT * MOVE COMM-STORE-NBR TO SALE-STORE-NBR * MOVE 'B' TO SALE-REC-TYPE1 * MOVE COMM-TICKET-NBR TO SALE-TICKET-NBR * MOVE SPACES TO SALE-REC-TYPE2 * PERFORM RPRSALE-READ * IF RECORD-FOUND * MOVE SALE-SLTKT-NBR-LINES TO COMM-SLTKT-NBR-LINES * ELSE * MOVE 'FILE:' TO WHAT * MOVE 'RPRSALE' TO WHICH * PERFORM SYS1PERR-RTN * END-IF * * see if solicitation type code is required for the salesid that * was entered * INITIALIZE CTRL-FILE-KEYS-INIT * MOVE 'SALESMKRID' TO CTRL-KEY1-REC-TYPE * MOVE COMM-SALES-ID TO CTRL-KEY2

Page 42: COBOL CICS EXAMPLE-SC52P52

* MOVE COMM-SALESMAKER-ID TO CTRL-KEY3 * PERFORM RPRCTRL-READ * IF RECORD-FOUND * MOVE CTRL-SOLIC-TYPE-NEEDED TO COMM-SLCT-NEEDED * ELSE * MOVE 'FILE:' TO WHAT * MOVE 'RPRCTRL' TO WHICH * PERFORM SYS1PERR-RTN * END-IF * * SET SALESID-DONT-NEED-SLCT-TYP TO TRUE * EVALUATE TRUE * if the sales id requires solicitation type codes then go through * the equipment to check if the codes are present * WHEN COMM-SLCT-NEEDED = 'Y' * INITIALIZE SALE-REC-KEY-INIT * MOVE COMM-DAILY-RPT-DT TO SALE-DAILY-RPT-DT * MOVE COMM-STORE-NBR TO SALE-STORE-NBR * MOVE 'B' TO SALE-REC-TYPE1 * MOVE COMM-TICKET-NBR TO SALE-TICKET-NBR * MOVE 'F' TO SALE-REC-TYPE2 * MOVE SPACE TO * RECORD-INPUT-RESPONSE-IND * PERFORM TEST BEFORE VARYING SUB FROM 1 BY 1 * UNTIL SALESID-NEED-SLCT-TYP * OR * SUB > COMM-SLTKT-NBR-LINES * MOVE SUB TO SALE-REC-TYPE2-SEQ-NBR * PERFORM RPRSALE-READ * IF RECORD-FOUND * IF SALE-LINE-DELETED-FLAG NOT = 'Y' * IF NOT (SALE-CARRY-IN-RENEWAL * OR * SALE-ON-SITE-RENEWAL) * AND * SALE-SVP-SOLIC-TYP = SPACE * SET SALESID-NEED-SLCT-TYP TO TRUE * END-IF * END-IF * ELSE * IF SALE-REC-TYPE2-SEQ-NBR = 1 * MOVE 'FILE:' TO WHAT * MOVE 'RPRSALE' TO WHICH * PERFORM SYS1PERR-RTN * END-IF * END-IF * END-PERFORM * * if the sales id does not require a solicitation type code then * go through the equipment and blank out all solicitation types * WHEN OTHER * INITIALIZE SALE-REC-KEY-INIT * MOVE COMM-DAILY-RPT-DT TO SALE-DAILY-RPT-DT * MOVE COMM-STORE-NBR TO SALE-STORE-NBR * MOVE 'B' TO SALE-REC-TYPE1 * MOVE COMM-TICKET-NBR TO SALE-TICKET-NBR * MOVE 'F' TO SALE-REC-TYPE2 * MOVE SPACE TO * RECORD-INPUT-RESPONSE-IND * PERFORM TEST BEFORE VARYING SUB FROM 1 BY 1 * UNTIL SUB > COMM-SLTKT-NBR-LINES * MOVE SUB TO SALE-REC-TYPE2-SEQ-NBR * PERFORM RPRSALE-READ-UPDATE

Page 43: COBOL CICS EXAMPLE-SC52P52

* IF RECORD-FOUND * MOVE SPACE TO SALE-SVP-SOLIC-TYP * PERFORM RPRSALE-REWRITE * ELSE * IF SALE-REC-TYPE2-SEQ-NBR = 1 * MOVE 'FILE:' TO WHAT * MOVE 'RPRSALE' TO WHICH * PERFORM SYS1PERR-RTN * END-IF * END-IF * END-PERFORM * END-EVALUATE * . ***************************************************************** LOAD-PHONE-ID-MATCHES. ***************************************************************** PERFORM CLEAR-MAP-SELECTIONS PERFORM RPRPHONE-STARTBR IF RECORD-FOUND SET PHONEI-MATCHED-SCPHONE TO TRUE MOVE PHON-CUST-STATION-ID TO INIT-CUST-STATION-ID MOVE 1 TO SUB PERFORM RPRPHONE-READNEXT

* read scphone, load matches to station-id into comm table PERFORM UNTIL PHON-CUST-STATION-ID NOT = INIT-CUST-STATION-ID OR SUB > MAX-SELECTIONS OR EOF MOVE PHON-KEY TO COMM-TBL-SCPHONE-KEY (SUB) MOVE PHON-CUST-NM TO COMM-TBL-CUST-NM (SUB) MOVE PHON-CUST-LINE1-ADDR TO COMM-TBL-CUST-LINE1-ADDR (SUB) MOVE PHON-CUST-LINE2-ADDR TO COMM-TBL-CUST-LINE2-ADDR (SUB) MOVE PHON-CUST-CITY-NM TO COMM-TBL-CUST-CITY-NM (SUB) MOVE PHON-CUST-STATE-ID TO COMM-TBL-CUST-STATE-ID (SUB) MOVE PHON-CUST-POSTL-CD TO COMM-TBL-CUST-POSTL-CD (SUB) MOVE PHON-CUST-PHONE-NBR TO COMM-TBL-CUST-PHONE-NBR (SUB) MOVE PHON-SVP-CNTCT-NM TO COMM-TBL-SVP-CNTCT-NM (SUB) MOVE PHON-STORE-NBR TO COMM-TBL-STORE-NBR (SUB) MOVE PHON-TRAN-NBR TO COMM-TBL-TICKET-NBR (SUB) ADD 1 TO SUB PERFORM RPRPHONE-READNEXT END-PERFORM MOVE 'RPRPHONE' TO WS-FILE-ID PERFORM GENERIC-ENDBR MOVE UNPROT-BRT TO IDPROMPA

* load scphone matches to map MOVE WS-MAP-COLNAMES TO COLNAMEO SUBTRACT 1 FROM SUB MOVE SUB TO COMM-LAST-SELECTION MOVE 1 TO SUB

Page 44: COBOL CICS EXAMPLE-SC52P52

PERFORM UNTIL SUB > COMM-LAST-SELECTION OR SUB > MAX-SELECTIONS MOVE SUB TO WS-DTL-ID MOVE COMM-TBL-CUST-NM (SUB) TO WS-DTL-CUST-NM MOVE COMM-TBL-CUST-CITY-NM (SUB) TO WS-DTL-CUST-CITY-NM MOVE COMM-TBL-CUST-STATE-ID (SUB) TO WS-DTL-CUST-STATE-ID MOVE COMM-TBL-STORE-NBR (SUB) TO WS-DTL-STORE-NBR MOVE COMM-TBL-TICKET-NBR (SUB) TO WS-DTL-TICKET-NBR EVALUATE TRUE WHEN SUB = 1 MOVE ASKIP-BRT TO SELECT1A MOVE WS-DTL-SELECTION TO SELECT1O WHEN SUB = 2 MOVE ASKIP-BRT TO SELECT2A MOVE WS-DTL-SELECTION TO SELECT2O WHEN SUB = 3 MOVE ASKIP-BRT TO SELECT3A MOVE WS-DTL-SELECTION TO SELECT3O WHEN SUB = 4 MOVE ASKIP-BRT TO SELECT4A MOVE WS-DTL-SELECTION TO SELECT4O WHEN SUB = 5 MOVE ASKIP-BRT TO SELECT5A MOVE WS-DTL-SELECTION TO SELECT5O WHEN SUB = 6 MOVE ASKIP-BRT TO SELECT6A MOVE WS-DTL-SELECTION TO SELECT6O WHEN SUB = 7 MOVE ASKIP-BRT TO SELECT7A MOVE WS-DTL-SELECTION TO SELECT7O WHEN SUB = 8 MOVE ASKIP-BRT TO SELECT8A MOVE WS-DTL-SELECTION TO SELECT8O END-EVALUATE ADD 1 TO SUB END-PERFORM

* fill out screen with remaining id#s IF SUB NOT > MAX-SELECTIONS PERFORM UNTIL SUB > MAX-SELECTIONS INITIALIZE WS-DTL-SELECTION MOVE SUB TO WS-DTL-ID EVALUATE TRUE WHEN SUB = 2 MOVE ASKIP-BRT TO SELECT2A MOVE WS-DTL-SELECTION TO SELECT2O WHEN SUB = 3 MOVE ASKIP-BRT TO SELECT3A MOVE WS-DTL-SELECTION TO SELECT3O WHEN SUB = 4 MOVE ASKIP-BRT TO SELECT4A MOVE WS-DTL-SELECTION TO SELECT4O WHEN SUB = 5 MOVE ASKIP-BRT TO SELECT5A MOVE WS-DTL-SELECTION TO SELECT5O WHEN SUB = 6 MOVE ASKIP-BRT TO SELECT6A MOVE WS-DTL-SELECTION TO SELECT6O WHEN SUB = 7 MOVE ASKIP-BRT TO SELECT7A

Page 45: COBOL CICS EXAMPLE-SC52P52

MOVE WS-DTL-SELECTION TO SELECT7O WHEN SUB = 8 MOVE ASKIP-BRT TO SELECT8A MOVE WS-DTL-SELECTION TO SELECT8O END-EVALUATE ADD 1 TO SUB END-PERFORM END-IF

* put last selection to screen ("other" / clr screen to add new * cust info) INITIALIZE WS-DTL-SELECTION MOVE '9' TO WS-DTL-ID MOVE OTHER-CUST-INFO-TEXT TO WS-DTL-CUST-NM MOVE ASKIP-BRT TO SELECT9A MOVE WS-DTL-SELECTION TO SELECT9O ELSE * no matches to SCPHONE found for cust station id entered PERFORM UNLOCK-CUST-INFO-FIELDS MOVE ASKIP-BRT TO IDPROMPA SET PHONEI-NOMATCH-SCPHONE TO TRUE END-IF . *************************************************************** CHECK-NUMERIC-PHONE. *************************************************************** IF FORMATTED-PHONE-ENTERED IF WS-PREFORMAT-AREA-CD NOT NUMERIC OR WS-PREFORMAT-EXCHG NOT NUMERIC OR WS-PREFORMAT-STATION-ID NOT NUMERIC SET PHONE-NOT-NUMERIC TO TRUE ELSE SET PHONE-NUMERIC TO TRUE END-IF ELSE IF WS-CK-NUMERIC-PHONE (1:COMM-LAST-PHONE-CHAR) NOT NUMERIC SET PHONE-NOT-NUMERIC TO TRUE ELSE SET PHONE-NUMERIC TO TRUE END-IF END-IF . *************************************************************** FORMAT-PHONE. *************************************************************** * input: COMM-CUST-PHONE-NBR * output: COMM-CUST-PHONE-NBR (reformatted to itself) * PHONEO * work: WS-COMM-CUST-PHONE-NBR (so COMM-CUST-PHONE-NBR won't * reformat on top of itself) * WS-NON-FOREIGN-PHONE: formatted version of phone to * move to map as (___)___-____ * * WS-BIN-HALFWORD = points to the current byte of the phone# * entered. begins at the 1st char preceding the * station id and is decremented from there. * * WS-MISC-COUNTER = for processing exchg and area cd. will serve * as a position indicator for these fields as * they are moved to the commarea char by char

Page 46: COBOL CICS EXAMPLE-SC52P52

* and to indicate whether or not all required * chars for these fields were entered. *-------------------------------------------------------------- IF COMM-LAST-PHONE-CHAR = NON-FOREIGN-PHONE-MAX-LEN MOVE COMM-CUST-AREA-CD TO WS-CUST-AREA-CD MOVE COMM-CUST-EXCHG TO WS-CUST-EXCHG MOVE COMM-CUST-STATION-ID TO WS-CUST-STATION-ID ELSE INITIALIZE WS-COMM-CUST-PHONE-NBR

MOVE COMM-CUST-STATION-ID-SAVE TO WS-COMM-CUST-STATION-ID WS-CUST-STATION-ID

* ws-bin-halfword = 1st char that occurs before station if entered COMPUTE WS-BIN-HALFWORD = COMM-LAST-PHONE-CHAR - LENGTH OF WS-CUST-STATION-ID

* if ws-bin-halfword = zero, only station id was entered. if not, * process exchg. IF WS-BIN-HALFWORD NOT = ZERO MOVE LENGTH OF WS-CUST-EXCHG TO WS-MISC-COUNTER PERFORM UNTIL WS-BIN-HALFWORD = 1 OR WS-MISC-COUNTER = 1 MOVE COMM-CUST-PHONE-NBR (WS-BIN-HALFWORD:1) TO WS-COMM-CUST-EXCHG (WS-MISC-COUNTER:1) WS-CUST-EXCHG (WS-MISC-COUNTER:1) SUBTRACT 1 FROM WS-BIN-HALFWORD WS-MISC-COUNTER END-PERFORM

* if partial exchg entered zero it else format 1st char IF WS-MISC-COUNTER NOT = 1 MOVE ZEROS TO WS-COMM-CUST-EXCHG WS-CUST-EXCHG ELSE MOVE COMM-CUST-PHONE-NBR (WS-BIN-HALFWORD:1) TO WS-COMM-CUST-EXCHG (WS-MISC-COUNTER:1) WS-CUST-EXCHG (WS-MISC-COUNTER:1) END-IF IF NOT FIRST-CHAR-OF-PHONE SUBTRACT 1 FROM WS-BIN-HALFWORD END-IF

* process area-cd MOVE LENGTH OF WS-CUST-AREA-CD TO WS-MISC-COUNTER PERFORM UNTIL WS-BIN-HALFWORD = 1 MOVE COMM-CUST-PHONE-NBR (WS-BIN-HALFWORD:1) TO WS-COMM-CUST-AREA-CD (WS-MISC-COUNTER:1) WS-CUST-AREA-CD (WS-MISC-COUNTER:1) SUBTRACT 1 FROM WS-BIN-HALFWORD WS-MISC-COUNTER END-PERFORM

* if partial area code entered zero it else format 1st char IF WS-MISC-COUNTER NOT = 1 MOVE ZEROS TO WS-COMM-CUST-AREA-CD WS-CUST-AREA-CD ELSE MOVE COMM-CUST-PHONE-NBR (WS-BIN-HALFWORD:1) TO WS-COMM-CUST-AREA-CD (WS-MISC-COUNTER:1) WS-CUST-AREA-CD (WS-MISC-COUNTER:1)

Page 47: COBOL CICS EXAMPLE-SC52P52

END-IF ELSE * only station id entered MOVE ZEROS TO WS-COMM-CUST-AREA-CD WS-COMM-CUST-EXCHG WS-CUST-AREA-CD WS-CUST-EXCHG END-IF MOVE WS-COMM-CUST-PHONE-NBR TO COMM-CUST-PHONE-NBR END-IF MOVE WS-NON-FOREIGN-PHONE TO PHONEO SET PHONE-FORMATTED TO TRUE . ***************************************************************** DEFAULT-COUNTRY-TO-US. ***************************************************************** * if no country present (in commarea) yet, default to US IF COMM-CUST-CNTRY-CD = SPACES IF PHONE-NUMERIC AND COMM-LAST-PHONE-CHAR <= NON-FOREIGN-PHONE-MAX-LEN MOVE DEFAULT-COUNTRY TO COUNTRYO COMM-CUST-CNTRY-CD SET NON-FOREIGN-COUNTRY TO TRUE END-IF END-IF . ***************************************************************** CHECK-MAP-ERRORS. ***************************************************************** EVALUATE TRUE *----- * misc *----- WHEN INVALID-KEY-PRESSED MOVE INVALID-KEY-MSG TO WRNMSG1O IF COMM-REPLACEMENT-TRAN MOVE -1 TO PHONEL ELSE MOVE -1 TO SALESIDL END-IF PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID *--------- * sales id *--------- WHEN SALESID-NOT-ENTERED MOVE SALESID-NOT-ENTERED-MSG TO WRNMSG1O MOVE -1 TO SALESIDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN SALESID-INVALID MOVE SALESID-INVALID-MSG TO WRNMSG1O MOVE -1 TO SALESIDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN SALESID-NOT-OK-FOR-SALE-TYP EVALUATE TRUE WHEN COMM-COMPANY-TRAN MOVE 'COMPANY' TO SALE-TYP-DESC-MSG MOVE SALESID-NOT-OK-FOR-SALE-MSG TO WRNMSG1O WHEN COMM-FRANCHISE-TRAN

Page 48: COBOL CICS EXAMPLE-SC52P52

MOVE 'FRANCHISE' TO SALE-TYP-DESC-MSG MOVE SALESID-NOT-OK-FOR-SALE-MSG TO WRNMSG1O WHEN COMM-LAB-TRAN MOVE 'LAB' TO SALE-TYP-DESC-MSG MOVE SALESID-NOT-OK-FOR-SALE-MSG TO WRNMSG1O WHEN COMM-MISCELLANEOUS-TRAN MOVE 'MISCELLANEOUS' TO TRAN-TYP-DESC-MSG MOVE SALESID-NOT-OK-FOR-TRAN-MSG TO WRNMSG1O END-EVALUATE MOVE -1 TO SALESIDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN SALESID-NEED-SLCT-TYP MOVE SALESID-NEED-SLCT-TYP-MSG TO WRNMSG1O MOVE -1 TO SALESIDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID *------------ * cust phone# *------------ WHEN PHONE-NOT-ENTERED MOVE PHONE-NOT-ENTERED-MSG TO WRNMSG1O IF PHONEI-MATCHED-SCPHONE PERFORM CLEAR-MAP-SELECTIONS PERFORM LOCK-INITIAL-FIELDS END-IF EVALUATE TRUE WHEN COMM-REPLACEMENT-TRAN MOVE WS-FUNC-KEYS-1A TO WRNMSG2O WHEN COMM-TICKET-NBR = ZERO MOVE WS-FUNC-KEYS-1 TO WRNMSG2O END-EVALUATE MOVE -1 TO PHONEL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN PHONE-TOO-SHORT MOVE PHONE-TOO-SHORT-MSG TO WRNMSG1O IF PHONEI-MATCHED-SCPHONE PERFORM CLEAR-MAP-SELECTIONS PERFORM LOCK-INITIAL-FIELDS END-IF EVALUATE TRUE WHEN COMM-REPLACEMENT-TRAN MOVE WS-FUNC-KEYS-1A TO WRNMSG2O WHEN COMM-TICKET-NBR = ZERO MOVE WS-FUNC-KEYS-1 TO WRNMSG2O END-EVALUATE MOVE -1 TO PHONEL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN PHONE-TOO-LONG MOVE PHONE-TOO-LONG-MSG TO WRNMSG1O IF PHONEI-MATCHED-SCPHONE PERFORM CLEAR-MAP-SELECTIONS PERFORM LOCK-INITIAL-FIELDS END-IF EVALUATE TRUE WHEN COMM-REPLACEMENT-TRAN MOVE WS-FUNC-KEYS-1A TO WRNMSG2O WHEN COMM-TICKET-NBR = ZERO

Page 49: COBOL CICS EXAMPLE-SC52P52

MOVE WS-FUNC-KEYS-1 TO WRNMSG2O END-EVALUATE MOVE -1 TO PHONEL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN PHONE-GT-NON-FOREIGN-MAX MOVE PHONE-GT-NON-FOREIGN-MAX-MSG TO WRNMSG1O IF PHONEI-MATCHED-SCPHONE PERFORM CLEAR-MAP-SELECTIONS PERFORM LOCK-INITIAL-FIELDS END-IF EVALUATE TRUE WHEN COMM-REPLACEMENT-TRAN MOVE WS-FUNC-KEYS-1A TO WRNMSG2O WHEN COMM-TICKET-NBR = ZERO MOVE WS-FUNC-KEYS-1 TO WRNMSG2O END-EVALUATE MOVE -1 TO PHONEL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN PHONE-INVALID MOVE PHONE-INVALID-MSG TO WRNMSG1O IF PHONEI-MATCHED-SCPHONE PERFORM CLEAR-MAP-SELECTIONS PERFORM LOCK-INITIAL-FIELDS END-IF EVALUATE TRUE WHEN COMM-REPLACEMENT-TRAN MOVE WS-FUNC-KEYS-1A TO WRNMSG2O WHEN COMM-TICKET-NBR = ZERO MOVE WS-FUNC-KEYS-1 TO WRNMSG2O END-EVALUATE MOVE -1 TO PHONEL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN FORMATTED-PHONE-INVALID MOVE FORMATTED-PHONE-INVALID-MSG TO WRNMSG1O IF PHONEI-MATCHED-SCPHONE PERFORM CLEAR-MAP-SELECTIONS PERFORM LOCK-INITIAL-FIELDS END-IF EVALUATE TRUE WHEN COMM-REPLACEMENT-TRAN MOVE WS-FUNC-KEYS-1A TO WRNMSG2O WHEN COMM-TICKET-NBR = ZERO MOVE WS-FUNC-KEYS-1 TO WRNMSG2O END-EVALUATE MOVE -1 TO PHONEL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID END-EVALUATE

EVALUATE TRUE ALSO TRUE *-------------- * phone/country *-------------- WHEN PHONE-NOT-NUMERIC ALSO NON-FOREIGN-COUNTRY MOVE PHONE-NOT-NUMERIC-MSG TO WRNMSG1O IF COMM-TICKET-NBR = ZERO AND INIT-SELECT-NOT-MADE MOVE WS-FUNC-KEYS-1 TO WRNMSG2O

Page 50: COBOL CICS EXAMPLE-SC52P52

ELSE EVALUATE TRUE WHEN COMM-REPLACEMENT-TRAN MOVE WS-FUNC-KEYS-1A TO WRNMSG2O WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-2A TO WRNMSG2O WHEN OTHER MOVE WS-FUNC-KEYS-2 TO WRNMSG2O END-EVALUATE END-IF MOVE -1 TO PHONEL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID END-EVALUATE

EVALUATE TRUE *-------------- * id# selection *-------------- WHEN ID-SELECTION-NOT-ENTERED MOVE ID-SELECTION-NOT-ENTERED-MSG TO WRNMSG1O IF INIT-SELECT-NOT-MADE MOVE WS-FUNC-KEYS-1 TO WRNMSG2O ELSE IF COMM-TICKET-NBR = ZERO EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-2A TO WRNMSG2O WHEN OTHER MOVE WS-FUNC-KEYS-2 TO WRNMSG2O END-EVALUATE ELSE EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-3A TO WRNMSG2O WHEN OTHER MOVE WS-FUNC-KEYS-3 TO WRNMSG2O END-EVALUATE END-IF END-IF MOVE -1 TO IDPROMPL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN ID-SELECTION-INVALID MOVE ID-SELECTION-INVALID-MSG TO WRNMSG1O IF INIT-SELECT-NOT-MADE MOVE WS-FUNC-KEYS-1 TO WRNMSG2O ELSE IF COMM-TICKET-NBR = ZERO EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-2A TO WRNMSG2O WHEN OTHER MOVE WS-FUNC-KEYS-2 TO WRNMSG2O END-EVALUATE ELSE EVALUATE TRUE WHEN COMM-MISCELLANEOUS-TRAN MOVE WS-FUNC-KEYS-3A TO WRNMSG2O WHEN OTHER MOVE WS-FUNC-KEYS-3 TO WRNMSG2O END-EVALUATE

Page 51: COBOL CICS EXAMPLE-SC52P52

END-IF END-IF MOVE -1 TO IDPROMPL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID END-EVALUATE

EVALUATE TRUE ALSO TRUE *---------------- * franchise store *---------------- WHEN COMM-FRANCHISE-TRAN ALSO FRANSTR-NOT-ENTERED MOVE FRANSTR-NOT-ENTERED-MSG TO WRNMSG1O MOVE -1 TO FRANSTRL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN COMM-FRANCHISE-TRAN ALSO FRANSTR-INVALID MOVE FRANSTR-INVALID-MSG TO WRNMSG1O MOVE -1 TO FRANSTRL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN COMM-FRANCHISE-TRAN ALSO DB2-STR-CLOSE-DT-INVALID MOVE FRANSTR-DB2-CLOSE-DT-MSG TO WRNMSG1O MOVE -1 TO FRANSTRL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN COMM-FRANCHISE-TRAN ALSO EIBDATE-SUBTRACT-BAD MOVE EIBDATE-SUBTRACT-BAD-MSG TO WRNMSG1O MOVE -1 TO FRANSTRL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN COMM-FRANCHISE-TRAN ALSO FRANSTR-CLOSED-TOO-LONG MOVE COMM-STR-CLOSED-MSG-DAYS TO STR-CLOSED-MSG-DAYS MOVE FRANSTR-CLOSE-DT-MSG TO WRNMSG1O MOVE -1 TO FRANSTRL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID *--------------------------- * original franchise ticket# *--------------------------- WHEN COMM-FRANCHISE-TRAN ALSO FRANTKT-NOT-ENTERED MOVE FRANTKT-NOT-ENTERED-MSG TO WRNMSG1O MOVE -1 TO FRANTKTL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN COMM-FRANCHISE-TRAN ALSO FRANTKT-NOT-NUMERIC MOVE FRANTKT-NOT-NUMERIC-MSG TO WRNMSG1O MOVE -1 TO FRANTKTL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID END-EVALUATE

EVALUATE TRUE * *jcf begin renewals temp code * *---------- * type code

Page 52: COBOL CICS EXAMPLE-SC52P52

*---------- * WHEN TYPCODE-NOT-ENTERED OR TYPCODE-INVALID * MOVE TYPCODE-MSG TO WRNMSG1O * MOVE -1 TO TYPCODEL * PERFORM SEND-MAP * PERFORM CICS-RETURN-TRANSID * *jcf end renewals temp code * *---------- * cust name *---------- WHEN CUSTNAM-NOT-ENTERED MOVE CUSTNAM-NOT-ENTERED-MSG TO WRNMSG1O MOVE -1 TO CUSTNAML PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID *--------- * address1 *--------- WHEN ADDR1-NOT-ENTERED MOVE ADDR1-NOT-ENTERED-MSG TO WRNMSG1O MOVE -1 TO ADDR1L PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID *----- * city *----- WHEN CITY-NOT-ENTERED MOVE CITY-NOT-ENTERED-MSG TO WRNMSG1O MOVE -1 TO CITYL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID *------ * state *------ WHEN STATE-NOT-ENTERED MOVE STATE-NOT-ENTERED-MSG TO WRNMSG1O MOVE -1 TO STATEL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN STATE-INVALID MOVE STATE-INVALID-MSG TO WRNMSG1O MOVE -1 TO STATEL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID *------------------ * postal code (zip) *------------------ WHEN POSTLCD-NOT-ENTERED MOVE POSTLCD-NOT-ENTERED-MSG TO WRNMSG1O MOVE -1 TO POSTLCDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN POSTLCD-TOO-SHORT MOVE POSTLCD-TOO-SHORT-MSG TO WRNMSG1O MOVE -1 TO POSTLCDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN POSTLCD-TOO-LONG

Page 53: COBOL CICS EXAMPLE-SC52P52

MOVE POSTLCD-TOO-LONG-MSG TO WRNMSG1O MOVE -1 TO POSTLCDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN POSTLCD-IMBEDDED-BLANKS MOVE POSTLCD-IMBEDDED-BLANKS-MSG TO WRNMSG1O MOVE -1 TO POSTLCDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN POSTLCD-INVALID-FOR-CA MOVE POSTLCD-INVALID-FOR-CA-MSG TO WRNMSG1O MOVE -1 TO POSTLCDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN POSTLCD-INVALID-FOR-US MOVE POSTLCD-INVALID-FOR-US-MSG TO WRNMSG1O MOVE -1 TO POSTLCDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID

WHEN POSTLCD-RANGE-INVALID MOVE POSTLCD-RANGE-INVALID-MSG TO WRNMSG1O MOVE -1 TO POSTLCDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID END-EVALUATE . ***************************************************************** CLEAR-MAP-SELECTIONS. ***************************************************************** MOVE SPACES TO COLNAMEO SELECT1O SELECT2O SELECT3O SELECT4O SELECT5O SELECT6O SELECT7O SELECT8O SELECT9O

MOVE ASKIP-BRT TO SELECT1A SELECT2A SELECT3A SELECT4A SELECT5A SELECT6A SELECT7A SELECT8A SELECT9A . ***************************************************************** LOCK-INITIAL-FIELDS. ***************************************************************** MOVE ASKIP-BRT TO STOREA DLRPTDTA TRANNBRA CUSTNAMA CONTACTA ADDR1A TXFRMOFA ADDR2A SENDTAXA CITYA STATEA POSTLCDA COUNTRYA IDPROMPA IDLABELA * *jcf begin renewals temp code * TYPCODEA * *jcf end renewals temp code * . ***************************************************************** UNLOCK-CUST-INFO-FIELDS. ***************************************************************** MOVE UNPROT-BRT TO SALESIDA PHONEA CUSTNAMA CONTACTA ADDR1A ADDR2A CITYA STATEA POSTLCDA * *jcf begin renewals temp code

Page 54: COBOL CICS EXAMPLE-SC52P52

* * TYPCODEA * *jcf end renewals temp code * . *************************************************************** NEW-TICKET-SETUP. *************************************************************** PERFORM CLEAR-MAP-CUST-INFO PERFORM CLEAR-MAP-SELECTIONS PERFORM COMM-NEW-TICKET-CLEAR PERFORM LOCK-INITIAL-FIELDS INITIALIZE COMM-SC52-WORK-FIELDS

* set process and input indicators to 'not' ok or 'not' done INITIALIZE COMM-SC52-PROC-INDICATORS COMM-SC52-INPUT-INDICATORS REPLACING ALPHANUMERIC BY 'N'

IF COMM-FRANCHISE-STORE-NBR NOT = SPACES SET FRANSTR-ENTERED TO TRUE SET FRANSTR-VALID TO TRUE END-IF MOVE TICKET-LABEL TO TRANLBLO MOVE SPACES TO TRANNBRO WRNMSG1O MOVE UNPROT-BRT TO SALESIDA PHONEA MOVE WS-FUNC-KEYS-1 TO WRNMSG2O MOVE -1 TO SALESIDL . ***************************************************************** CLEAR-MAP-CUST-INFO. ***************************************************************** MOVE SPACES TO SALESIDO PHONEO CUSTNAMO CONTACTO ADDR1O ADDR2O CITYO STATEO POSTLCDO COUNTRYO IDPROMPO * *jcf begin renewals temp code * * TYPCODEO * *jcf end renewals temp code * . ***************************************************************** COMM-NEW-TICKET-CLEAR. ***************************************************************** INITIALIZE COMM-SALES-ID COMM-CUST-PHONE-NBR COMM-CUST-NM COMM-SVP-CNTCT-NM COMM-CUST-LINE1-ADDR COMM-CUST-LINE2-ADDR COMM-CUST-CITY-NM COMM-CUST-STATE-ID COMM-CUST-POSTL-CD COMM-CUST-CNTRY-CD COMM-SALE-RFND-IND COMM-CURR-LINE-SEQ-NBR . *************************************************************** RECEIVE-MAP.

Page 55: COBOL CICS EXAMPLE-SC52P52

*************************************************************** SET NO-MAPFAIL TO TRUE

EXEC CICS RECEIVE MAP('SC52M52') MAPSET('SC52S52') RESP(RESP1) END-EXEC

IF RESP1 NOT = DFHRESP(NORMAL) IF RESP1 = DFHRESP(MAPFAIL) SET MAPFAIL TO TRUE ELSE MOVE 'MAP SET:' TO WHAT MOVE 'SC52S52' TO WHICH PERFORM SYS1PERR-RTN END-IF END-IF . *************************************************************** SEND-MAP. **************************************************************** EVALUATE TRUE WHEN SENDING-WHOLE-MAP EXEC CICS SEND MAP('SC52M52') MAPSET('SC52S52') CURSOR ERASE RESP(RESP1) END-EXEC SET SENDING-DATAONLY TO TRUE

WHEN SENDING-DATAONLY EXEC CICS SEND MAP('SC52M52') MAPSET('SC52S52') DATAONLY CURSOR RESP(RESP1) END-EXEC END-EVALUATE . *************************************************************** CICS-RETURN-TRANSID. *************************************************************** EXEC CICS RETURN TRANSID(TRANS-ID) COMMAREA(DFHCOMMAREA) LENGTH(EIBCALEN) END-EXEC . ****************************************************************** BUILD-NEW-CUST-SCPHONE-KEY. ****************************************************************** MOVE COMM-CUST-STATION-ID-SAVE TO COMM-NEW-CUST-STATION-ID

* GET TODAYS DATE

MOVE SPACES TO DTR-DATE-FIELDS SET GET-TODAYS-DATE TO TRUE PERFORM CALL-CNVDATEC IF VALID-DATE MOVE DTR-CAL-CC2 TO COMM-NEW-ADD-CC MOVE DTR-CAL-YY2 TO COMM-NEW-ADD-YY MOVE DTR-CAL-MM2 TO COMM-NEW-ADD-MM MOVE DTR-CAL-DD2 TO COMM-NEW-ADD-DD ELSE MOVE 'PROGRAM:' TO WHAT MOVE 'CNVDATEC' TO WHICH PERFORM SYS1PERR-RTN END-IF

Page 56: COBOL CICS EXAMPLE-SC52P52

MOVE EIBTIME TO WS-UNPK-EIBTIME MOVE WS-CURR-TIME TO COMM-NEW-ADD-TIME MOVE COMM-OPER-ID TO COMM-NEW-OPER-ID . ****************************************************************** CALL-CNVDATEC. ****************************************************************** EXEC CICS LINK PROGRAM('CNVDATEC') COMMAREA(DTR-DATE-FIELDS) LENGTH(LENGTH OF DTR-DATE-FIELDS) RESP(RESP1) END-EXEC IF RESP1 NOT = DFHRESP(NORMAL) MOVE 'PROGRAM:' TO WHAT MOVE 'CNVDATEC' TO WHICH PERFORM SYS1PERR-RTN END-IF . ****************************************************************** LOAD-NEXT-AVL-TICKET-NBR. ****************************************************************** INITIALIZE CTRL-FILE-KEYS-INIT MOVE 'VALIDSTORE' TO CTRL-KEY1-REC-TYPE MOVE COMM-STORE-NBR TO CTRL-KEY2 PERFORM RPRCTRL-READ-UPDATE MOVE CTRL-NEXT-AVL-TICK-NBR TO WS-UNPK-NEXT-AVL-TICK-NBR MOVE WS-NEXT-AVL-TICK-NBR TO TRANNBRO COMM-TICKET-NBR ADD 1 TO CTRL-NEXT-AVL-TICK-NBR PERFORM RPRCTRL-REWRITE . ****************************************************************** RPRPHONE-STARTBR. ****************************************************************** EXEC CICS STARTBR FILE('RPRPHONE') RIDFLD(PHON-KEY) KEYLENGTH(RPRPHONE-GENERIC-LEN) GENERIC EQUAL RESP(RESP1) END-EXEC PERFORM RPRPHONE-RESP1-ROUTINE . ****************************************************************** RPRPHONE-READNEXT. ****************************************************************** EXEC CICS READNEXT FILE('RPRPHONE') INTO(PHON-RECORD) RIDFLD(PHON-KEY) RESP(RESP1) END-EXEC EVALUATE TRUE WHEN RESP1 = DFHRESP(NORMAL) CONTINUE WHEN RESP1 = DFHRESP(ENDFILE) SET EOF TO TRUE WHEN OTHER MOVE 'FILE:' TO WHAT MOVE 'RPRPHONE' TO WHICH PERFORM SYS1PERR-RTN END-EVALUATE . ******************************************************************

Page 57: COBOL CICS EXAMPLE-SC52P52

RPRPHONE-UPDATE. ****************************************************************** INITIALIZE PHON-KEY-INIT EVALUATE TRUE

* user creating new ticket and selected '** other cust info **'. * load new scphone key to scsale WHEN COMM-ID-SELECTION = COMM-HI-SELECTION MOVE COMM-NEW-CUST-SCPHONE-KEY TO PHON-KEY

* user creating new ticket and selected existing cust info. load * existing scphone key to scsale WHEN COMM-ID-SELECTION >= 1 MOVE COMM-TBL-SCPHONE-KEY (COMM-ID-SELECTION) TO PHON-KEY

* user is changing cust info on existing ticket WHEN OTHER IF COMM-REPLACEMENT-TRAN MOVE SALE-CAA-SCPHONE-KEY TO PHON-KEY ELSE MOVE SALE-BB-SCPHONE-KEY TO PHON-KEY END-IF END-EVALUATE PERFORM RPRPHONE-READ-UPDATE

* record exists. update it IF RECORD-FOUND PERFORM RPRPHONE-DATA-RTN PERFORM RPRPHONE-REWRITE ELSE * record does not exist. add it INITIALIZE PHON-DATA-INIT PERFORM RPRPHONE-DATA-RTN PERFORM RPRPHONE-WRITE END-IF . ****************************************************************** RPRPHONE-DATA-RTN. ****************************************************************** MOVE COMM-CUST-NM TO PHON-CUST-NM MOVE COMM-CUST-LINE1-ADDR TO PHON-CUST-LINE1-ADDR MOVE COMM-CUST-LINE2-ADDR TO PHON-CUST-LINE2-ADDR MOVE COMM-CUST-CITY-NM TO PHON-CUST-CITY-NM MOVE COMM-CUST-STATE-ID TO PHON-CUST-STATE-ID MOVE COMM-CUST-CNTRY-CD TO PHON-CUST-CNTRY-CD MOVE COMM-CUST-POSTL-CD TO PHON-CUST-POSTL-CD MOVE COMM-CUST-PHONE-NBR TO PHON-CUST-PHONE-NBR MOVE COMM-SVP-CNTCT-NM TO PHON-SVP-CNTCT-NM MOVE COMM-STORE-NBR TO PHON-STORE-NBR IF COMM-REPLACEMENT-TRAN MOVE COMM-ISCT-NBR TO PHON-TRAN-NBR ELSE MOVE COMM-TICKET-NBR TO PHON-TRAN-NBR END-IF . ****************************************************************** RPRPHONE-READ-UPDATE. ****************************************************************** EXEC CICS READ FILE('RPRPHONE') INTO(PHON-RECORD) RIDFLD(PHON-KEY) UPDATE

Page 58: COBOL CICS EXAMPLE-SC52P52

RESP(RESP1) END-EXEC PERFORM RPRPHONE-RESP1-ROUTINE . ****************************************************************** RPRPHONE-REWRITE. ****************************************************************** EXEC CICS REWRITE FILE('RPRPHONE') FROM(PHON-RECORD) RESP(RESP1) END-EXEC IF RESP1 NOT = DFHRESP(NORMAL) MOVE 'FILE:' TO WHAT MOVE 'RPRPHONE' TO WHICH PERFORM SYS1PERR-RTN END-IF . ****************************************************************** RPRPHONE-WRITE. ****************************************************************** EXEC CICS WRITE FILE('RPRPHONE') FROM(PHON-RECORD) RIDFLD(PHON-KEY) RESP(RESP1) END-EXEC IF RESP1 NOT = DFHRESP(NORMAL) MOVE 'FILE:' TO WHAT MOVE 'RPRPHONE' TO WHICH PERFORM SYS1PERR-RTN END-IF . ****************************************************************** RPRPHONE-RESP1-ROUTINE. ****************************************************************** EVALUATE TRUE WHEN RESP1 = DFHRESP(NORMAL) SET RECORD-FOUND TO TRUE WHEN RESP1 = DFHRESP(NOTFND) SET RECORD-NOT-FOUND TO TRUE WHEN RESP1 = DFHRESP(ENDFILE) CONTINUE WHEN OTHER MOVE 'FILE:' TO WHAT MOVE 'RPRPHONE' TO WHICH PERFORM SYS1PERR-RTN END-EVALUATE . ****************************************************************** RPRCTRL-STARTBR. ****************************************************************** EXEC CICS STARTBR FILE('RPRCTRL') RIDFLD(CTRL-FILE-KEYS) KEYLENGTH(RPRCTRL-GENERIC-LEN) GENERIC EQUAL RESP(RESP1) END-EXEC PERFORM RPRCTRL-RESP1-ROUTINE . ****************************************************************** RPRCTRL-READ. ****************************************************************** EXEC CICS READ FILE('RPRCTRL')

Page 59: COBOL CICS EXAMPLE-SC52P52

INTO(CTRL-RECORD) RIDFLD(CTRL-FILE-KEYS) RESP(RESP1) END-EXEC PERFORM RPRCTRL-RESP1-ROUTINE . ****************************************************************** RPRCTRL-READNEXT. ****************************************************************** EXEC CICS READNEXT FILE('RPRCTRL') INTO(CTRL-RECORD) RIDFLD(CTRL-FILE-KEYS) RESP(RESP1) END-EXEC PERFORM RPRCTRL-RESP1-ROUTINE . ****************************************************************** RPRCTRL-READ-UPDATE. ****************************************************************** EXEC CICS READ FILE('RPRCTRL') INTO(CTRL-RECORD) RIDFLD(CTRL-FILE-KEYS) UPDATE RESP(RESP1) END-EXEC PERFORM RPRCTRL-RESP1-ROUTINE . ****************************************************************** RPRCTRL-REWRITE. ****************************************************************** EXEC CICS REWRITE FILE('RPRCTRL') FROM(CTRL-RECORD) RESP(RESP1) END-EXEC PERFORM RPRCTRL-RESP1-ROUTINE . ****************************************************************** RPRCTRL-RESP1-ROUTINE. ****************************************************************** EVALUATE TRUE WHEN RESP1 = DFHRESP(NORMAL) SET RECORD-FOUND TO TRUE WHEN RESP1 = DFHRESP(NOTFND) SET RECORD-NOT-FOUND TO TRUE WHEN OTHER MOVE 'FILE:' TO WHAT MOVE 'RPRCTRL' TO WHICH PERFORM SYS1PERR-RTN END-EVALUATE . ****************************************************************** RPRSALE-RECORD-A-UPDATE. ****************************************************************** INITIALIZE SALE-REC-KEY-INIT

* load scsale key MOVE COMM-DAILY-RPT-DT TO SALE-DAILY-RPT-DT MOVE COMM-STORE-NBR TO SALE-STORE-NBR MOVE 'A ' TO SALE-REC-TYPE1 PERFORM RPRSALE-READ

* 'a ' record exists. update it if daily report status needs to be * reverted

Page 60: COBOL CICS EXAMPLE-SC52P52

IF RECORD-FOUND IF SALE-DAILY-REPORT-COMPLETE OR SALE-DR-HAS-INCOMP-TICKETS OR SALE-DR-UNBAL-OR-INCOMPLETE PERFORM RPRSALE-READ-UPDATE SET SALE-DR-NEEDS-EDIT-LISTING TO TRUE PERFORM RPRSALE-REWRITE END-IF ELSE * 'a ' record does not exist. send error message MOVE DR-MISSING-A-REC-MSG TO WRNMSG1O MOVE -1 TO SALESIDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID END-IF . ****************************************************************** RPRSALE-RECORD-B-UPDATE. ****************************************************************** INITIALIZE SALE-REC-KEY-INIT

* load scsale key MOVE COMM-DAILY-RPT-DT TO SALE-DAILY-RPT-DT MOVE COMM-STORE-NBR TO SALE-STORE-NBR MOVE 'B ' TO SALE-REC-TYPE1 MOVE COMM-TICKET-NBR TO SALE-TICKET-NBR PERFORM RPRSALE-READ-UPDATE

* record exists. update it. IF RECORD-FOUND PERFORM RPRSALE-RECORD-B-DATA-RTN PERFORM RPRSALE-REWRITE ELSE * record does not exist. add it. INITIALIZE SALE-RECORD-B MOVE COMM-OPER-ID TO SALE-OPER-ID PERFORM RPRSALE-RECORD-B-DATA-RTN SET SALE-NO-COMMERCIAL-CHG TO TRUE SET SALE-NO-BAD-DEBT TO TRUE SET SALE-NO-ISCT TO TRUE PERFORM RPRSALE-WRITE END-IF . ****************************************************************** RPRSALE-RECORD-B-DATA-RTN. ****************************************************************** MOVE COMM-SLTKT-COMPLETE-IND TO SALE-SLTKT-COMPLETE-IND

* sale ticket date and time MOVE COMM-CURR-YY TO SALE-SLTKT-YY MOVE COMM-CURR-MM TO SALE-SLTKT-MM MOVE COMM-CURR-DD TO SALE-SLTKT-DD IF COMM-CURR-YY < 80 MOVE 20 TO SALE-SLTKT-CC ELSE MOVE 19 TO SALE-SLTKT-CC END-IF MOVE EIBTIME TO WS-UNPK-EIBTIME MOVE WS-CURR-TIME TO SALE-SLTKT-TM

* remainder of 'b ' rec MOVE COMM-SALES-ID TO SALE-SLMKR-SALES-ID MOVE COMM-SALESMAKER-ID TO SALE-SLMKR-ID

Page 61: COBOL CICS EXAMPLE-SC52P52

MOVE COMM-SLTKT-TRAN-TYP-CD TO SALE-SLTKT-TRAN-TYP-CD MOVE COMM-FRANCHISE-STORE-NBR TO SALE-FRNCHS-STR-NBR MOVE COMM-ORG-FRAN-SLTKT-NBR TO SALE-ORG-FRAN-SLTKT-NBR MOVE COMM-CUST-STATE-ID TO SALE-SLTKT-TAX-STATE-ID MOVE COMM-SEND-CUST-TAXMP-FRM-IND TO SALE-SEND-CUST-TAXMP-FRM-IND * *jcf begin renewals temp code * * MOVE COMM-CUST-TYP-CD TO SALE-CUST-TYP-CD * *jcf end renewals temp code * . ****************************************************************** RPRSALE-RECORD-BA-UPDATE. ****************************************************************** INITIALIZE SALE-REC-KEY-INIT

* load scsale key MOVE COMM-DAILY-RPT-DT TO SALE-DAILY-RPT-DT MOVE COMM-STORE-NBR TO SALE-STORE-NBR MOVE 'B ' TO SALE-REC-TYPE1 MOVE COMM-TICKET-NBR TO SALE-TICKET-NBR MOVE 'A ' TO SALE-REC-TYPE2 MOVE 1 TO SALE-REC-TYPE2-SEQ-NBR PERFORM RPRSALE-READ-UPDATE

* record exists. update it. IF RECORD-FOUND PERFORM RPRSALE-RECORD-BA-DATA-RTN PERFORM RPRSALE-REWRITE ELSE * record does not exist. add it. INITIALIZE SALE-RECORD-BA PERFORM RPRSALE-RECORD-BA-DATA-RTN PERFORM RPRSALE-WRITE END-IF . ****************************************************************** RPRSALE-RECORD-BA-DATA-RTN. ****************************************************************** * void date MOVE COMM-CURR-YY TO SALE-SLTKT-VOID-YY MOVE COMM-CURR-MM TO SALE-SLTKT-VOID-MM MOVE COMM-CURR-DD TO SALE-SLTKT-VOID-DD IF COMM-CURR-YY < 80 MOVE 20 TO SALE-SLTKT-VOID-CC ELSE MOVE 19 TO SALE-SLTKT-VOID-CC END-IF

* void time MOVE EIBTIME TO WS-UNPK-EIBTIME MOVE WS-CURR-TIME TO SALE-SLTKT-VOID-TM

MOVE COMM-OPER-ID TO SALE-SLTKT-VOID-OPR MOVE COMM-SLTKT-VOID-IND TO SALE-SLTKT-VOID-IND SET SALE-POS-SALE-VOID TO TRUE . ****************************************************************** RPRSALE-RECORD-BB-UPDATE. ******************************************************************

Page 62: COBOL CICS EXAMPLE-SC52P52

INITIALIZE SALE-REC-KEY-INIT

* load scsale key MOVE COMM-DAILY-RPT-DT TO SALE-DAILY-RPT-DT MOVE COMM-STORE-NBR TO SALE-STORE-NBR MOVE 'B ' TO SALE-REC-TYPE1 MOVE COMM-TICKET-NBR TO SALE-TICKET-NBR MOVE 'B ' TO SALE-REC-TYPE2 MOVE 1 TO SALE-REC-TYPE2-SEQ-NBR PERFORM RPRSALE-READ-UPDATE

* record exists. update it. IF RECORD-FOUND * find station id of phone# stored on scsale 'bb' rec MOVE SALE-CUST-PHONE-NBR TO WS-CHAR-OUT-TBL MOVE LENGTH OF SALE-CUST-PHONE-NBR TO FIELD-MAX-LEN PERFORM LAST-NONBLANK-CHAR MOVE LAST-NONBLANK-CHAR-POS TO COMM-LAST-PHONE-CHAR MOVE SALE-CUST-PHONE-NBR (COMM-LAST-PHONE-CHAR - (LENGTH OF SALE-CUST-STATION-ID - 1): LENGTH OF SALE-CUST-STATION-ID) TO PREV-SALE-CUST-STATION-ID PERFORM RPRSALE-RECORD-BB-DATA-RTN PERFORM RPRSALE-REWRITE ELSE * record does not exist. add it. MOVE RESP1 TO RESP1-HOLD INITIALIZE SALE-RECORD-BB PERFORM RPRSALE-RECORD-BB-DATA-RTN PERFORM RPRSALE-WRITE END-IF . ****************************************************************** RPRSALE-RECORD-BB-DATA-RTN. ****************************************************************** MOVE COMM-CUST-NM TO SALE-CUST-NM MOVE COMM-CUST-LINE1-ADDR TO SALE-CUST-LINE1-ADDR MOVE COMM-CUST-LINE2-ADDR TO SALE-CUST-LINE2-ADDR MOVE COMM-CUST-CITY-NM TO SALE-CUST-CITY-NM MOVE COMM-CUST-STATE-ID TO SALE-CUST-STATE-ID MOVE COMM-CUST-CNTRY-CD TO SALE-CUST-CNTRY-CD MOVE COMM-CUST-POSTL-CD TO SALE-CUST-POSTL-CD MOVE COMM-CUST-PHONE-NBR TO SALE-CUST-PHONE-NBR MOVE COMM-SVP-CNTCT-NM TO SALE-SVP-CNTCT-NM

EVALUATE TRUE * user creating new ticket and selected '** other cust info **'. * load new scphone key to scsale WHEN COMM-ID-SELECTION = COMM-HI-SELECTION MOVE COMM-NEW-CUST-SCPHONE-KEY TO SALE-BB-SCPHONE-KEY

* user creating new ticket and selected existing cust info. load * existing scphone key to scsale WHEN COMM-ID-SELECTION >= 1 MOVE COMM-TBL-SCPHONE-KEY (COMM-ID-SELECTION) TO SALE-BB-SCPHONE-KEY

* build new scphone key if ticket is not already on scsale or the * phone# station id is different from that already on scsale WHEN OTHER IF RESP1-HOLD = DFHRESP(NOTFND)

Page 63: COBOL CICS EXAMPLE-SC52P52

OR COMM-CUST-STATION-ID-SAVE NOT = PREV-SALE-CUST-STATION-ID PERFORM BUILD-NEW-CUST-SCPHONE-KEY MOVE COMM-NEW-CUST-SCPHONE-KEY TO SALE-BB-SCPHONE-KEY END-IF END-EVALUATE . ****************************************************************** RPRSALE-RECORD-C-UPDATE. ****************************************************************** INITIALIZE SALE-REC-KEY-INIT

* load scsale key MOVE COMM-DAILY-RPT-DT TO SALE-DAILY-RPT-DT MOVE COMM-STORE-NBR TO SALE-STORE-NBR MOVE 'C ' TO SALE-REC-TYPE1 MOVE COMM-ISCT-NBR TO SALE-ISCT-NBR PERFORM RPRSALE-READ-UPDATE IF RECORD-FOUND MOVE COMM-ISCT-COMPLETE-IND TO SALE-ISCT-COMPLETE-IND MOVE COMM-CUST-NM TO SALE-ISCT-CUST-NM PERFORM RPRSALE-REWRITE ELSE MOVE 'FILE:' TO WHAT MOVE 'RPRSALE' TO WHICH PERFORM SYS1PERR-RTN END-IF . ****************************************************************** RPRSALE-RECORD-CAA-UPDATE. ****************************************************************** INITIALIZE SALE-REC-KEY-INIT

* load scsale key MOVE COMM-DAILY-RPT-DT TO SALE-DAILY-RPT-DT MOVE COMM-STORE-NBR TO SALE-STORE-NBR MOVE 'C ' TO SALE-REC-TYPE1 MOVE COMM-ISCT-NBR TO SALE-ISCT-NBR MOVE 'A ' 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 PERFORM RPRSALE-READ-UPDATE

* record exists. update it. IF RECORD-FOUND IF SALE-CAA-UNITED-STATES OR SALE-CAA-CANADA MOVE SALE-ISCT-CUST-STATION-ID TO PREV-SALE-CUST-STATION-ID ELSE * find station id of phone# stored on scsale 'caa' rec MOVE SALE-ISCT-CUST-PHONE-NBR TO WS-CHAR-OUT-TBL MOVE LENGTH OF SALE-ISCT-CUST-PHONE-NBR TO FIELD-MAX-LEN PERFORM LAST-NONBLANK-CHAR MOVE LAST-NONBLANK-CHAR-POS TO COMM-LAST-PHONE-CHAR MOVE SALE-ISCT-CUST-PHONE-NBR (COMM-LAST-PHONE-CHAR - (LENGTH OF SALE-ISCT-CUST-STATION-ID - 1): LENGTH OF SALE-ISCT-CUST-STATION-ID) TO PREV-SALE-CUST-STATION-ID

Page 64: COBOL CICS EXAMPLE-SC52P52

END-IF IF PHONEL IS POSITIVE IF COMM-CUST-STATION-ID-SAVE NOT = PREV-SALE-CUST-STATION-ID PERFORM BUILD-NEW-CUST-SCPHONE-KEY MOVE COMM-NEW-CUST-SCPHONE-KEY TO SALE-CAA-SCPHONE-KEY END-IF END-IF * load scsale 'caa' record from commarea MOVE COMM-CUST-LINE1-ADDR TO SALE-ISCT-CUST-LN1-ADDR MOVE COMM-CUST-LINE2-ADDR TO SALE-ISCT-CUST-LN2-ADDR MOVE COMM-CUST-CITY-NM TO SALE-ISCT-CUST-CITY-NM MOVE COMM-CUST-STATE-ID TO SALE-ISCT-CUST-STATE-ID MOVE COMM-CUST-CNTRY-CD TO SALE-ISCT-CUST-CNTRY-CD MOVE COMM-CUST-POSTL-CD TO SALE-ISCT-CUST-POSTL-CD MOVE COMM-CUST-PHONE-NBR TO SALE-ISCT-CUST-PHONE-NBR MOVE COMM-SVP-CNTCT-NM TO SALE-ISCT-SVP-CNTCT-NM PERFORM RPRSALE-REWRITE ELSE MOVE 'FILE:' TO WHAT MOVE 'RPRSALE' TO WHICH PERFORM SYS1PERR-RTN END-IF . ****************************************************************** RPRSALE-READ. ****************************************************************** EXEC CICS READ FILE('RPRSALE') INTO(SALE-RECORD) RIDFLD(SALE-REC-KEY) RESP(RESP1) END-EXEC PERFORM RPRSALE-RESP1-ROUTINE . ****************************************************************** RPRSALE-READ-UPDATE. ****************************************************************** EXEC CICS READ FILE('RPRSALE') INTO(SALE-RECORD) RIDFLD(SALE-REC-KEY) UPDATE RESP(RESP1) END-EXEC PERFORM RPRSALE-RESP1-ROUTINE . ****************************************************************** RPRSALE-RESP1-ROUTINE. ****************************************************************** EVALUATE TRUE WHEN RESP1 = DFHRESP(NORMAL) SET RECORD-FOUND TO TRUE WHEN RESP1 = DFHRESP(NOTFND) SET RECORD-NOT-FOUND TO TRUE WHEN OTHER MOVE 'FILE:' TO WHAT MOVE 'RPRSALE' TO WHICH PERFORM SYS1PERR-RTN END-EVALUATE . ****************************************************************** RPRSALE-REWRITE. ******************************************************************

Page 65: COBOL CICS EXAMPLE-SC52P52

EXEC CICS REWRITE FILE('RPRSALE') FROM(SALE-RECORD) RESP(RESP1) END-EXEC IF RESP1 NOT = DFHRESP(NORMAL) MOVE 'FILE:' TO WHAT MOVE 'RPRSALE' TO WHICH PERFORM SYS1PERR-RTN END-IF . ****************************************************************** RPRSALE-WRITE. ****************************************************************** EXEC CICS WRITE FILE('RPRSALE') FROM(SALE-RECORD) RIDFLD(SALE-REC-KEY) RESP(RESP1) END-EXEC IF RESP1 NOT = DFHRESP(NORMAL) MOVE 'FILE:' TO WHAT MOVE 'RPRSALE' TO WHICH PERFORM SYS1PERR-RTN END-IF . ****************************************************************** GENERIC-ENDBR. ****************************************************************** EXEC CICS ENDBR FILE(WS-FILE-ID) RESP(RESP1) END-EXEC IF RESP1 NOT = DFHRESP(NORMAL) MOVE 'FILE: ' TO WHAT MOVE WS-FILE-ID TO WHICH PERFORM SYS1PERR-RTN END-IF . *************************************************************** XCTL-NEXT. *************************************************************** MOVE DFHENTER TO EIBAID EXEC CICS XCTL PROGRAM(PROG-ID) COMMAREA(DFHCOMMAREA) LENGTH (EIBCALEN) RESP(RESP1) END-EXEC IF RESP1 NOT = DFHRESP(NORMAL) MOVE 'PROGRAM:' TO WHAT MOVE PROG-ID TO WHICH PERFORM SYS1PERR-RTN END-IF . *************************************************************** XCTL-PREV. *************************************************************** MOVE COMM-PGM-STK(1) TO WS-PGM MOVE WS-PGM-LL TO WS-PGM-MM MOVE 'P' TO WS-PGM-PP PERFORM VARYING SUB FROM 1 BY 1 UNTIL SUB = 10 MOVE COMM-PGM-STK(SUB + 1) TO COMM-PGM-STK(SUB) END-PERFORM MOVE LOW-VALUES TO COMM-PGM-STK(10) MOVE DFHENTER TO EIBAID EXEC CICS XCTL PROGRAM(WS-PGM) COMMAREA(DFHCOMMAREA) LENGTH (EIBCALEN) RESP(RESP1) END-EXEC

Page 66: COBOL CICS EXAMPLE-SC52P52

IF RESP1 NOT = DFHRESP(NORMAL) MOVE 'PROGRAM:' TO WHAT MOVE WS-PGM TO WHICH PERFORM SYS1PERR-RTN END-IF . ****************************************************************** CENTRAL-SQL-VALIDATION. ****************************************************************** EXEC CICS LINK PROGRAM('SC53P53S') COMMAREA(SC53P53S-COMM-AREA) LENGTH(COM53S-LENGTH) RESP(RESP1) END-EXEC IF RESP1 NOT = DFHRESP(NORMAL) MOVE 'PROGRAM:' TO WHAT MOVE 'SC53P53S' TO WHICH PERFORM SYS1PERR-RTN END-IF . ****************************************************************** BAD-SQL-MSG. ****************************************************************** MOVE COM53S-SQLCODE TO SQL-RTN-CODE MOVE SQL-PROG TO SQL-PGM MOVE WRN-SQL-MSG TO WRNMSG1O MOVE ASKIP-BRT TO WRNMSG1A PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID . *************************************************************** CREATE-TEMP-Q-ENTRY. *************************************************************** *-------------------------------------------------------------- * THE FOLLOWING CODE WILL CAUSE THE PROGRAM TO ALLOW ONLY ONE * OPERATOR TO HAVE UPDATE ACCESS TO A SALES TICKET / ISCT AT A * TIME. THIS IS DONE WITH A TEMPORARY STORAGE QUEUE STORING THE * TOP SECRET OPERATOR ID OF THE OPERATOR THAT IS WORKING ON THE * TICKET. ALL OTHER OPERATORS WILL BE LOCKED OUT UNTIL THIS OPER- * ATOR IS COMPLETE. THIS CAN BE DONE BY COMPLETING THE TRANSACTION * OR BY EXITING BACK TO THE MENU. *-------------------------------------------------------------- MOVE 8 TO TS-LEN MOVE 'SES' TO WS-PGM-ID MOVE COMM-STORE-NBR TO WS-STORE-DISECT MOVE WS-STR-NBR-TEMP-Q-PART TO WS-PARTIAL-STR-NBR MOVE 'T' TO WS-TRAN-TYP-CD MOVE COMM-TICKET-NBR TO WS-TICKET-DISECT MOVE WS-TICKET-TEMP-Q-PART TO WS-PARTIAL-SLTKT-NBR MOVE SPACES TO TS-REC MOVE COMM-SYSTEM-ID TO TS-SYS-ID MOVE COMM-OPER-ID TO TS-OPER-ID

EXEC CICS WRITEQ TS QUEUE(WS-TS-KEY) FROM(TS-REC) LENGTH(TS-LEN) RESP(RESP1) END-EXEC

IF RESP1 NOT = DFHRESP(NORMAL) MOVE 'TS-QUEUE' TO WHAT MOVE WS-TS-KEY TO WHICH

Page 67: COBOL CICS EXAMPLE-SC52P52

PERFORM SYS1PERR-RTN END-IF . ****************************************************************** SYS1PERR-RTN. ****************************************************************** EXEC CICS LINK PROGRAM('SYS1PERR') COMMAREA(RESPONSE-CODES) LENGTH(RESPONSE-CODE-LENGTH) RESP(RESP1) END-EXEC IF RESP1 NOT = DFHRESP(NORMAL) MOVE SYS1PERR-MSG TO WRNMSG1O ELSE MOVE RMSG1 TO REASON MOVE TOPSECRET-FAIL-MSG TO WRNMSG1O END-IF MOVE -1 TO SALESIDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID . *************************************************************** SC52-EXIT-RTN. *************************************************************** EVALUATE TRUE WHEN COMM-REPLACEMENT-TRAN PERFORM RECEIVE-MAP IF NO-MAPFAIL PERFORM VALIDATE-MAP-INPUT END-IF IF CHANGES-MADE * data to be lost warning given? IF DATA-TO-BE-LOST-WRN-NOT-GIVEN * no SET DATA-TO-BE-LOST-WRN-GIVEN TO TRUE MOVE DATA-TO-BE-LOST-MSG TO WRNMSG1O MOVE -1 TO PHONEL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID * yes END-IF END-IF PERFORM XCTL-PREV

WHEN OTHER IF COMM-TICKET-NOT-VOIDED PERFORM RECEIVE-MAP IF NO-MAPFAIL PERFORM VALIDATE-MAP-INPUT END-IF IF CHANGES-MADE IF COMM-TICKET-NBR NOT = ZERO IF COMM-TICKET-NOT-COMPLETED * ticket not complete warning given? IF TICK-NOT-CMPLT-WRN-NOT-GIVEN * no SET TICK-NOT-CMPLT-WRN-GIVEN TO TRUE MOVE TICK-NOT-CMPLT-MSG2 TO WRNMSG1O MOVE -1 TO SALESIDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID END-IF END-IF

Page 68: COBOL CICS EXAMPLE-SC52P52

* yes PERFORM CHECK-MAP-ERRORS PERFORM RPRSALE-RECORD-B-UPDATE PERFORM RPRSALE-RECORD-BB-UPDATE PERFORM RPRPHONE-UPDATE PERFORM DELETE-TEMP-Q-ENTRY ELSE * data to be lost warning given? IF DATA-TO-BE-LOST-WRN-NOT-GIVEN * no SET DATA-TO-BE-LOST-WRN-GIVEN TO TRUE MOVE DATA-TO-BE-LOST-MSG TO WRNMSG1O MOVE -1 TO SALESIDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID * yes END-IF END-IF ELSE * no changes IF COMM-TICKET-NBR NOT = ZERO IF COMM-TICKET-NOT-COMPLETED * ticket not complete warning given? IF TICK-NOT-CMPLT-WRN-NOT-GIVEN * no SET TICK-NOT-CMPLT-WRN-GIVEN TO TRUE MOVE TICK-NOT-CMPLT-MSG TO WRNMSG1O MOVE -1 TO SALESIDL PERFORM SEND-MAP PERFORM CICS-RETURN-TRANSID * yes END-IF END-IF PERFORM DELETE-TEMP-Q-ENTRY END-IF END-IF END-IF PERFORM XCTL-PREV END-EVALUATE . *************************************************************** DELETE-TEMP-Q-ENTRY. *************************************************************** MOVE 'SES' TO WS-PGM-ID MOVE COMM-STORE-NBR TO WS-STORE-DISECT MOVE WS-STR-NBR-TEMP-Q-PART TO WS-PARTIAL-STR-NBR MOVE 'T' TO WS-TRAN-TYP-CD MOVE COMM-TICKET-NBR TO WS-TICKET-DISECT MOVE WS-TICKET-TEMP-Q-PART TO WS-PARTIAL-SLTKT-NBR

EXEC CICS DELETEQ TS QUEUE(WS-TS-KEY) RESP(RESP1) END-EXEC

IF RESP1 NOT = DFHRESP(NORMAL) AND RESP1 NOT = DFHRESP(QIDERR) MOVE 'TS-QUEUE' TO WHAT MOVE WS-TS-KEY TO WHICH PERFORM SYS1PERR-RTN END-IF .