This COBOL program extracts price information from a DB2 database table for ACR service plans and outputs it to a file with minimal data manipulation. It opens the same cursors multiple times to select different fields for different record types, making processing easier. It includes error handling for empty cursors and outputs informational messages for some. The program extracts data from multiple DB2 tables joined together and limits results to the most current effective and non-expired records.
Slides from OpenWorld. Flashback has been around for long time yet people assume it should entirely within the realm of the DBA. But with modern development techniques such as continuous integration/continuous deployment, flashback actually is a perfect for *developers*
Slides from the ITOUG events in Rome and Milan 2020.
Most people think of the Flashback features in Oracle as the "In Case of Emergency" switch, to only be used when some catastrophe has occurred on your database. And while it is true that Flashback will definitely help you 3 seconds after you press the Commit button and you realise that you probably needed to have a WHERE clause on that "delete all rows from the SALES table" SQL statement. Or for when you run "drop table" on the Production database, when you were just so sure that you were logged onto the Test system. But Flashback is not only for those "Oh No!" moments. It enables benefits for developers ranging from data consistency to continuous integration and data auditing. Tucked away in Enterprise Edition are six independent and powerful technologies that might just save your career—they will also open up a myriad of other benefits of well.
Barometric Digital pressure Sensor BMP085Raghav Shetty
This is a breakout board for the BMP085 high-precision, low-power digital barometer. The BMP085 offers a measuring range of 300 to 1100 hPa with accuracy down to 0.03 hPa in ultra-high resolution mode (that's 0.25m of altitude at sea level!) It's based on piezo-resistive technology for high accuracy, ruggedness and long term stability. These come factory-calibrated, with the calibration coefficients already stored in ROM. Writing your own code for it requires some math. This breadboard-friendly board breaks out every pin to a 6-pin 0.1" pitch header. VCC can be from 1.8V to 3.6V; we typically run it on a clean, regulated 3.3V supply. The analog and digital supplies (VDDD and VDDA) are tied to a single header pin, but are separately decoupled. It connects to a microcontroller via I²C bus .
Slides from OpenWorld. Flashback has been around for long time yet people assume it should entirely within the realm of the DBA. But with modern development techniques such as continuous integration/continuous deployment, flashback actually is a perfect for *developers*
Slides from the ITOUG events in Rome and Milan 2020.
Most people think of the Flashback features in Oracle as the "In Case of Emergency" switch, to only be used when some catastrophe has occurred on your database. And while it is true that Flashback will definitely help you 3 seconds after you press the Commit button and you realise that you probably needed to have a WHERE clause on that "delete all rows from the SALES table" SQL statement. Or for when you run "drop table" on the Production database, when you were just so sure that you were logged onto the Test system. But Flashback is not only for those "Oh No!" moments. It enables benefits for developers ranging from data consistency to continuous integration and data auditing. Tucked away in Enterprise Edition are six independent and powerful technologies that might just save your career—they will also open up a myriad of other benefits of well.
Barometric Digital pressure Sensor BMP085Raghav Shetty
This is a breakout board for the BMP085 high-precision, low-power digital barometer. The BMP085 offers a measuring range of 300 to 1100 hPa with accuracy down to 0.03 hPa in ultra-high resolution mode (that's 0.25m of altitude at sea level!) It's based on piezo-resistive technology for high accuracy, ruggedness and long term stability. These come factory-calibrated, with the calibration coefficients already stored in ROM. Writing your own code for it requires some math. This breadboard-friendly board breaks out every pin to a 6-pin 0.1" pitch header. VCC can be from 1.8V to 3.6V; we typically run it on a clean, regulated 3.3V supply. The analog and digital supplies (VDDD and VDDA) are tied to a single header pin, but are separately decoupled. It connects to a microcontroller via I²C bus .
1. COBOL DB2 Program RPR6520
Project: ACR Service Plans Revamp
DEVELOPED BY APPROVED BY
NAME Jon Fortman Tim Reagan
ROLE SME/Developer Asst. Dir.
2. ******************************************************************
IDENTIFICATION DIVISION.
******************************************************************
PROGRAM-ID. RPR6520.
AUTHOR. J.FORTMAN.
DATE-WRITTEN. 05/01/1998.
DATE-COMPILED.
*INSTALLATION. TANDY INFORMATION SERVICES.
*COPYRIGHT (C) 1998,TANDY INFORMATION SERVICES
*SECURITY. RACF.
*REMARKS.
******************************************************************
* C O N T R A C T S E R V I C E S
*
* ACR/RSSP PRICE MAINTENANCE BATCH XMIT
*
* EXTRACT RSSP PRICE INFORMATION FROM DB2. PRICE-FILE-OUT IS
* AN EXACT PICTURE OF WHAT IS PULLED FROM DB2 WITH ONE
* EXCEPTION WHICH IS THE DOLLAR AMOUNTS WHICH ARE OUTPUT AS
* ZONED DECIMAL INSTEAD OF PACKED DECIMAL. OTHER THAN THIS NO
* DATA MANIPULATION IS DONE PRIOR TO OUTPUT.
*
* FOR EASE OF PROCESSING FLOW, WE ARE OPENING ESSENTIALLY THE
* SAME CURSOR 3 TIMES BUT SELECTING DIFFERENT FIELDS FOR EACH.
* THIS MAKES WRITING AND PROCESSING THE DIFFERENT REC TYPES
* EASIER.
*
* THE ABEND FAILSAFES IN THE 911- PARAGRAPHS AREA HANDLE EMPTY
* CURSORS ONLY FOR THE MAIN ATTRIBUTE CURSORS: SVP CATG ID,
* SVP SKU ID, SVP CATG ASOC. FOR SUBATTRIBUTE CURSORS SUCH AS
* COMPONENT SKUS AND SVP COST AMT, WE ONLY ISSUE AN INFORMATIONAL
* MESSAGE PER CURSOR OPEN.
******************************************************************
ENVIRONMENT DIVISION.
******************************************************************
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-OS390.
OBJECT-COMPUTER. IBM-OS390.
******************************************************************
INPUT-OUTPUT SECTION.
******************************************************************
FILE-CONTROL.
SELECT CONTROL-FILE-IN ASSIGN TO RPRCTRLI
FILE STATUS CTRL-STATUS
RECORD KEY CTRL-FILE-KEYS
ORGANIZATION INDEXED
ACCESS SEQUENTIAL.
SELECT PRICE-FILE-OUT ASSIGN TO RPRPRICO
FILE STATUS PRICE-STATUS.
******************************************************************
DATA DIVISION.
******************************************************************
FILE SECTION.
FD CONTROL-FILE-IN
RECORD CONTAINS 250 CHARACTERS.
01 SCCTRL-CONTROL-RECORD.
COPY SCCTRL REPLACING ==:CTRL:== BY ==CTRL==.
FD PRICE-FILE-OUT
RECORDING MODE IS F
BLOCK CONTAINS 0 RECORDS
3. RECORD CONTAINS 300 CHARACTERS.
01 PRICE-FILE-OUT-REC.
COPY SCTSPPRC REPLACING ==:PRIC:== BY ==PRIC==.
****************************************************************
WORKING-STORAGE SECTION.
****************************************************************
COPY CNVDTWS.
01 SV-PRICE-FILE-OUT-REC.
COPY SCTSPPRC REPLACING ==:PRIC:== BY ==SV==.
01 COUNTER-VARIABLES.
05 CT-NBR-RETRIES PIC 9(2) VALUE ZERO.
05 CT-PRNT-LINES PIC 9(3) VALUE 54.
05 CT-PAGE-NUM PIC 9(3) VALUE ZERO.
05 CT-TOT-A-RECS-WRITTEN PIC 9(8) VALUE ZERO.
05 CT-TOT-B-RECS-WRITTEN PIC 9(8) VALUE ZERO.
05 CT-TOT-BA-RECS-WRITTEN PIC 9(8) VALUE ZERO.
05 CT-TOT-BB-RECS-WRITTEN PIC 9(8) VALUE ZERO.
05 CT-TOT-C-RECS-WRITTEN PIC 9(8) VALUE ZERO.
05 CT-TOT-ALL-RECS-WRITTEN PIC 9(8) VALUE ZERO.
05 CT-SVP-CATG-CUR-FETCHED PIC 9(8) VALUE ZERO.
05 CT-SVP-SKU-ID-CUR-FETCHED PIC 9(8) VALUE ZERO.
05 CT-SVP-COMP-SKU-CUR-FETCHED PIC 9(8) VALUE ZERO.
05 CT-SVP-COST-AMT-CUR-FETCHED PIC 9(8) VALUE ZERO.
05 CT-SVP-CATG-ASOC-CUR-FETCHED PIC 9(8) VALUE ZERO.
01 WS-ERR-MSG.
05 WS-ERR-MSG1 PIC X(50) VALUE SPACES.
05 WS-ERR-MSG2 PIC X(50) VALUE SPACES.
05 WS-ERR-MSG3 PIC X(50) VALUE SPACES.
05 WS-ERR-MSG4 PIC X(50) VALUE SPACES.
01 WS-ERRORS.
05 WS-ERR-SKU PIC X(8) VALUE SPACES.
05 WS-ERR-CVRG-LGTH PIC X(4) VALUE SPACES.
05 WS-ERR-PRICE-TYP PIC X(7) VALUE SPACES.
05 WS-ERR-SKU-CATG PIC X(20) VALUE SPACES.
05 WS-ERR-XMIT-CD PIC X(5) VALUE SPACES.
05 WS-ERR-LOC-CD PIC X(7) VALUE SPACES.
05 WS-ERR-WTY-STUS PIC X(7) VALUE SPACES.
01 WS-VARIABLES.
05 WS-SVP-RTL-AMT PIC 9(7)V99.
05 WS-EDIT-COMP4 PIC ZZZ9.
05 WS-EDIT-REC-COUNT PIC ZZ,ZZZ,ZZ9.
05 WS-EDIT-SQLCODE PIC ZZZ,ZZZ,ZZ9-.
05 WS-EDIT-RETRY-PM PIC ZZZ9.
05 WS-XMIT-DEST-CD PIC X(6).
05 WS-DISPLAY PIC X(50) VALUE SPACES.
05 WS-SQL-SLS-CHNL-ID PIC X(20) VALUE SPACES.
05 WS-SPIFF-AMT PIC S9(7)V99 COMP-3.
05 WS-PRICE-AMT PIC S9(5)V99 COMP-3.
05 WS-SPIFF-PCT PIC S9(3)V99 COMP-3.
05 WS-9999 PIC 9(4).
05 CT-LEAD-ZEROS PIC 9(3).
05 WS-FIELD-LEN PIC 9(3).
05 WS-WRNTY-YRS PIC 9(2).
05 WS-WRNTY-MTHS PIC 9(2).
05 CTRL-STATUS PIC 9(2).
5. *--TABLE INDICATES SPECIFIC PRICE ERRORS THAT HAVE OCCURRED
*
01 WS-PRICE-ERR-MSGS.
05 WS-XMIT-CD-ERR-IND PIC X.
88 XMIT-CD-ERR VALUE 'Y'.
05 WS-SKU-CATG-ERR-MSG PIC X(50)
VALUE 'INVALID TRANSMIT CODE/NOT FOUND ON CONTROL FILE'.
01 WS-PRICE-ERR-TABLE REDEFINES WS-PRICE-ERR-MSGS.
05 WS-PRICE-ERR-INDS OCCURS 5 TIMES
INDEXED BY PRICE-ERR-SUB.
10 WS-PRICE-ERR-IND PIC X.
10 WS-PRICE-ERR-MSG PIC X(50).
****************************************************************
* CONSTANT VARIABLES
****************************************************************
01 WS-CONSTANTS.
05 CN-DSCNTU-CUTOFF-DAYS PIC S9(4) VALUE 0.
05 CN-MAX-PRNT-LINES PIC 9(3) VALUE 53.
05 WS-PRICE-ERR-TBL-MAX PIC S9(4) COMP VALUE 5.
****************************************************************
* TABLES
****************************************************************
* TRANSMIT DESTINATION CODE TABLE
01 XMIT-DEST-CD-TBL.
05 T6-XMIT-CD-TBL-MAX PIC S9(9) COMP VALUE 10.
05 T6-XMIT-CD-TBL-END PIC S9(9) COMP.
05 T6-XMIT-CD OCCURS 1 TO 10 TIMES
DEPENDING ON T6-XMIT-CD-TBL-END
INDEXED BY T6-XMIT-SUB.
10 T6-DB2-XMIT-CD PIC X(5).
10 T6-DEST-CD OCCURS 5 TIMES
PIC X(5).
****************************************************************
* PARAMETER VARIABLES
****************************************************************
COPY PARMWORK REPLACING ==:PARM-:== BY ====
==:REPEAT:== BY 3.
01 PM-MAX-RETRIES PIC S9(4) VALUE 100.
01 PM-COMPANY PIC S9(4) COMP.
****************************************************************
* SQLCA
****************************************************************
EXEC SQL INCLUDE SQLCA END-EXEC.
****************************************************************
* DB2 TABLE & HOST VARIABLE DECLARATIONS
****************************************************************
EXEC SQL INCLUDE SPSMDSES END-EXEC.
EXEC SQL INCLUDE SPSCATEG END-EXEC.
EXEC SQL INCLUDE SPSCATGA END-EXEC.
EXEC SQL INCLUDE SPSDETAI END-EXEC.
EXEC SQL INCLUDE SPSPRICE END-EXEC.
EXEC SQL INCLUDE SPSCOMPA END-EXEC.
EXEC SQL INCLUDE SPSVPCOS END-EXEC.
EXEC SQL INCLUDE SPSLCHNM END-EXEC.
01 DB2-NULL-INDICATOR-VARIABLES.
05 SKU-SERIES-ID-NULL-IND PIC S9(4) BINARY.
********************************************************
6. * SVP CATEGORY CURSOR DECLARE
********************************************************
EXEC SQL
DECLARE SVP-CATG-ID-CUR CURSOR FOR
SELECT DISTINCT
SC.SVP_CATG_ID
,SC.SVP_CATG_DESC
,SC.SKU_MFG_SRCE_CD
,SC.MTH_WRNTY_MIN_NBR
,SC.MTH_WRNTY_MAX_NBR
,SC.SKU_SERIES_ID
,SVD.SVP_XMIT_DEST_CD
FROM SVP_DETAIL SVD
,SVP_PRICE_DTL SPD
,SVP_CATEGORY SC
,SVP_CATG_ASOC SCA
,MDSE_SVP_ASOC MSA
WHERE
MSA.MDSE_GRP_NBR = :PM-COMPANY
*THIS SUBSELECT GETS THE MOST CURRENT MERCH-SKU-TO-SVP-CATG-ID
*ASSOC
AND MSA.ASOC_EFF_DT =
(SELECT MAX(MSA2.ASOC_EFF_DT)
FROM MDSE_SVP_ASOC MSA2
WHERE MSA2.ASOC_EFF_DT <= CURRENT DATE AND
(
MSA2.ASOC_EXP_DT IS NULL OR
MSA2.ASOC_EXP_DT > CURRENT DATE
)
AND
MSA2.MDSE_GRP_NBR = MSA.MDSE_GRP_NBR AND
MSA2.SKU_ID = MSA.SKU_ID AND
MSA2.SLS_CHNL_ID = MSA.SLS_CHNL_ID)
AND MSA.SVP_CATG_ID = SC.SVP_CATG_ID
AND SCA.SVP_CATG_ID = SC.SVP_CATG_ID
AND SCA.SVP_SKU_ID = SVD.SVP_SKU_ID
AND SVD.SVP_SKU_ID = SPD.SVP_SKU_ID
AND SPD.SVP_PRICE_EFF_DT =
(SELECT MAX(SPD2.SVP_PRICE_EFF_DT)
FROM SVP_PRICE_DTL SPD2
WHERE SPD2.SVP_PRICE_EFF_DT <= CURRENT DATE
AND SPD.SVP_SKU_ID = SPD2.SVP_SKU_ID)
AND (
(SVD.SVP_DSCNTU_DT IS NULL)
OR
(SVD.SVP_DSCNTU_DT > :WS-DSCNTU-CUTOFF-DT)
)
END-EXEC.
********************************************************
* SVP SKU ID CURSOR DECLARE
********************************************************
EXEC SQL
DECLARE SVP-SKU-ID-CURSOR CURSOR FOR
SELECT DISTINCT
SVD.SVP_SKU_ID
,SVD.SVP_SPCL_OPTN_CD
7. ,SVD.SVP_BEG_MTH_NBR
,SVD.SVP_COVER_MTH_QTY
,SVD.SVP_WRNTY_TYP_CD
,SVD.SVP_SRVC_LOC_CD
,SVD.SVP_SPIFF_PCT
,SVD.SVP_XMIT_DEST_CD
,SVD.SVP_DESC
,SVD.BILL_FREQ_MTH_QTY
,SVD.SVP_PREPAY_MTH_QTY
,SVD.SVP_SPIFF_AMT
,SPD.SVP_RTL_AMT
FROM SVP_DETAIL SVD
,SVP_PRICE_DTL SPD
,SVP_CATEGORY SC
,SVP_CATG_ASOC SCA
,MDSE_SVP_ASOC MSA
WHERE
MSA.MDSE_GRP_NBR = :PM-COMPANY
*THIS SUBSELECT GETS THE MOST CURRENT MERCH-SKU-TO-SVP-CATG-ID
*ASSOC
AND MSA.ASOC_EFF_DT =
(SELECT MAX(MSA2.ASOC_EFF_DT)
FROM MDSE_SVP_ASOC MSA2
WHERE MSA2.ASOC_EFF_DT <= CURRENT DATE AND
(
MSA2.ASOC_EXP_DT IS NULL OR
MSA2.ASOC_EXP_DT > CURRENT DATE
)
AND
MSA2.MDSE_GRP_NBR = MSA.MDSE_GRP_NBR AND
MSA2.SKU_ID = MSA.SKU_ID AND
MSA2.SLS_CHNL_ID = MSA.SLS_CHNL_ID)
AND MSA.SVP_CATG_ID = SC.SVP_CATG_ID
AND SCA.SVP_CATG_ID = SC.SVP_CATG_ID
AND SCA.SVP_SKU_ID = SVD.SVP_SKU_ID
AND SVD.SVP_SKU_ID = SPD.SVP_SKU_ID
* THIS GETS THE MOST CURRENT PRICE
AND SPD.SVP_PRICE_EFF_DT =
(SELECT MAX(SPD2.SVP_PRICE_EFF_DT)
FROM SVP_PRICE_DTL SPD2
WHERE SPD2.SVP_PRICE_EFF_DT <= CURRENT DATE
AND SPD.SVP_SKU_ID = SPD2.SVP_SKU_ID)
AND (
(SVD.SVP_DSCNTU_DT IS NULL)
OR
(SVD.SVP_DSCNTU_DT > :WS-DSCNTU-CUTOFF-DT)
)
END-EXEC.
********************************************************
* SVP COMPONENT SKU ID CURSOR DECLARE
********************************************************
* THIS GETS COMPONENT SKUS THAT ARE ASSOCIATED (I.E. TERMS AND
* CONDITIONS BROCHURES) TO SVP SKU IDS
EXEC SQL
8. DECLARE SVP-COMP-SKU-CUR CURSOR FOR
SELECT
COM.SVP_COMP_SKU_ID
,COM.SVP_COMP_TYP_CD
FROM
SVP_COMP_ASOC COM
WHERE
COM.SVP_COMP_EFF_DT =
(SELECT MAX(COM2.SVP_COMP_EFF_DT)
FROM SVP_COMP_ASOC COM2
WHERE COM2.SVP_COMP_EFF_DT <= CURRENT DATE AND
COM2.SVP_COMP_EXP_DT > CURRENT DATE AND
COM2.SVP_SKU_ID = :SVP-DETAIL.SVP-SKU-ID AND
COM2.SVP_SKU_ID = COM.SVP_SKU_ID AND
COM2.SVP_COMP_SKU_ID = COM.SVP_COMP_SKU_ID)
END-EXEC
********************************************************
* SVP COST AMT (DEALER NET) CURSOR DECLARE
********************************************************
* THIS GETS SVP COST AMOUNTS THAT ARE ASSOCIATED
* TO SVP SKU IDS. THERE CAN BE MANY SVP COST (DEALER NET)
* AMOUNTS PER * SVP SKU ID (UNIQUELY IDENTIFIED WITH SALES
* CHANNEL ID).
EXEC SQL
DECLARE SVP-COST-AMT-CUR CURSOR FOR
SELECT
SCD.SLS_CHNL_ID
,SCD.SVP_COST_AMT
FROM
SVP_COST_DTL SCD
WHERE
SCD.SVP_COST_EFF_DT =
(SELECT MAX(SCD2.SVP_COST_EFF_DT)
FROM SVP_COST_DTL SCD2
WHERE SCD2.SVP_COST_EFF_DT <= CURRENT DATE AND
(SCD2.SVP_COST_EXP_DT > CURRENT DATE OR
SCD2.SVP_COST_EXP_DT IS NULL) AND
SCD2.SVP_SKU_ID = :SVP-DETAIL.SVP-SKU-ID AND
SCD2.SVP_SKU_ID = SCD.SVP_SKU_ID AND
SCD2.SLS_CHNL_ID = SCD.SLS_CHNL_ID)
ORDER BY
SCD.SLS_CHNL_ID
END-EXEC
********************************************************
* SVP CATEGORY ASSOCIATION CURSOR DECLARE
********************************************************
EXEC SQL
DECLARE SVP-CATG-ASOC-CRSR CURSOR FOR
SELECT DISTINCT
SCA.SVP_CATG_ID
,SCA.SVP_SKU_ID
,SVD.SVP_XMIT_DEST_CD
FROM SVP_DETAIL SVD
,SVP_PRICE_DTL SPD
,SVP_CATEGORY SC
,SVP_CATG_ASOC SCA
,MDSE_SVP_ASOC MSA
WHERE
9. MSA.MDSE_GRP_NBR = :PM-COMPANY
*THIS SUBSELECT GETS THE MOST CURRENT MERCH-SKU-TO-SVP-CATG-ID
*ASSOC
AND MSA.ASOC_EFF_DT =
(SELECT MAX(MSA2.ASOC_EFF_DT)
FROM MDSE_SVP_ASOC MSA2
WHERE MSA2.ASOC_EFF_DT <= CURRENT DATE AND
(
MSA2.ASOC_EXP_DT IS NULL OR
MSA2.ASOC_EXP_DT > CURRENT DATE
)
AND
MSA2.MDSE_GRP_NBR = MSA.MDSE_GRP_NBR AND
MSA2.SKU_ID = MSA.SKU_ID AND
MSA2.SLS_CHNL_ID = MSA.SLS_CHNL_ID)
AND MSA.SVP_CATG_ID = SC.SVP_CATG_ID
AND SCA.SVP_CATG_ID = SC.SVP_CATG_ID
AND SCA.SVP_SKU_ID = SVD.SVP_SKU_ID
AND SVD.SVP_SKU_ID = SPD.SVP_SKU_ID
AND SPD.SVP_PRICE_EFF_DT =
(SELECT MAX(SPD2.SVP_PRICE_EFF_DT)
FROM SVP_PRICE_DTL SPD2
WHERE SPD2.SVP_PRICE_EFF_DT <= CURRENT DATE
AND SPD.SVP_SKU_ID = SPD2.SVP_SKU_ID)
AND (
(SVD.SVP_DSCNTU_DT IS NULL)
OR
(SVD.SVP_DSCNTU_DT > :WS-DSCNTU-CUTOFF-DT)
)
END-EXEC.
*****************************************************************
LINKAGE SECTION.
*****************************************************************
01 PARM-FIELDS.
05 QJ-PARM-L PIC 9(4) COMP-4.
05 QJ-PARM PIC X(100).
******************************************************************
PROCEDURE DIVISION USING PARM-FIELDS.
******************************************************************
PERFORM 100-INITIALIZE
PERFORM 820-OPEN-SVP-CATG-ID-CUR UNTIL CURSOR-OPEN
PERFORM 825-FETCH-SVP-CATG-ID-CUR
IF END-OF-SVP-CATG-ID-CUR
PERFORM 911-EMPTY-SVP-CATG-ID-CUR
END-IF
PERFORM 200-EXTRACT-SVP-CATG-IDS UNTIL END-OF-SVP-CATG-ID-CUR
EXEC SQL
CLOSE SVP-CATG-ID-CUR
END-EXEC
MOVE 'N' TO WS-CURSOR-IND
PERFORM 830-OPEN-SVP-SKU-ID-CURSOR UNTIL CURSOR-OPEN
PERFORM 835-FETCH-SVP-SKU-ID-CURSOR
IF END-OF-SVP-SKU-ID-CURSOR
PERFORM 911-EMPTY-SVP-SKU-ID-CURSOR
END-IF
PERFORM 220-EXTRACT-SVP-SKU-IDS UNTIL
END-OF-SVP-SKU-ID-CURSOR
10. EXEC SQL
CLOSE SVP-SKU-ID-CURSOR
END-EXEC
MOVE 'N' TO WS-CURSOR-IND
PERFORM 840-OPEN-SVP-CATG-ASOC-CURSOR UNTIL CURSOR-OPEN
PERFORM 845-FETCH-SVP-CATG-ASOC-CURSOR
IF END-OF-SVP-CATG-ASOC-CRSR
PERFORM 911-EMPTY-SVP-CATG-ASOC-CRSR
END-IF
PERFORM 230-EXTRACT-SVP-CATG-ASOC
UNTIL END-OF-SVP-CATG-ASOC-CRSR
EXEC SQL
CLOSE SVP-CATG-ASOC-CRSR
END-EXEC
PERFORM 9000-PROGRAM-END
STOP RUN
.
******************************************************************
100-INITIALIZE.
******************************************************************
DISPLAY ' '
DISPLAY '***********************************************'
DISPLAY '* R P R 6 5 2 0 *'
DISPLAY '***********************************************'
DISPLAY ' '
*
* PROCESS PARMS
*
MOVE SPACES TO WORK-AREA
MOVE QJ-PARM(1:QJ-PARM-L) TO JCL-AREA
MOVE 'RETRY' TO KEY-X(1)
MOVE 'COMPANY' TO KEY-X(2)
MOVE 'DSCDAYS' TO KEY-X(3)
CALL 'PARMKEY' USING WORK-AREA
IF ERROR-FLAG > 0
DISPLAY ERROR-MESSAGE
MOVE ' BAD PARMKEY RETURN CODE ' TO WS-ERR-MSG1
MOVE ' PLEASE CORRECT AND RE-SUBMIT ' TO WS-ERR-MSG2
MOVE 12 TO ABEND-CD
PERFORM 9999-ABEND
END-IF
IF KEY-X(1) NOT = SPACES
MOVE KEY-P(1) TO PM-MAX-RETRIES
END-IF
MOVE PM-MAX-RETRIES TO WS-EDIT-RETRY-PM
DISPLAY ' '
DISPLAY 'MAXIMUM NUMBER OF RETRIES = ' WS-EDIT-RETRY-PM
IF KEY-X(2) NOT = SPACES
MOVE KEY-P(2) TO PM-COMPANY
ELSE
DISPLAY ERROR-MESSAGE
MOVE 'COMPANY PARM NOT PRESENT. MUST BE' TO WS-ERR-MSG1
MOVE '2 DIGITS WITH LEADING ZERO. ' TO WS-ERR-MSG2
MOVE 'CORRECT AND RE-SUBMIT. ' TO WS-ERR-MSG3
MOVE 12 TO ABEND-CD
PERFORM 9999-ABEND
END-IF
11. DISPLAY ' '
DISPLAY 'RSSP PRICES EXTRACTED FOR COMPANY ID: ' PM-COMPANY
IF KEY-X(3) NOT = SPACES
IF KEY-X(3)(1:3) IS NUMERIC
MOVE KEY-X(3)(1:3) TO CN-DSCNTU-CUTOFF-DAYS
ELSE
MOVE 'PARM ERROR: DISCONTINUE DAYS SUBTRACT'
TO WS-ERR-MSG1
MOVE 'FORMAT: 3 DIGIT NUMBER'
TO WS-ERR-MSG2
MOVE 12 TO ABEND-CD
PERFORM 9999-ABEND
END-IF
END-IF
*
* GET CURRENT DATE
*
MOVE FUNCTION CURRENT-DATE(1:8) TO WS-CURRENT-YYYYMMDD
MOVE CORRESPONDING WS-CURRENT-YYYYMMDD TO WS-CURRENT-MMDDYYYY
MOVE CORRESPONDING WS-CURRENT-YYYYMMDD TO WS-CURR-YYYYSMMSDD
*
* CALCULATE DISCONTINUE CUT OFF DATE
*
MOVE SPACES TO DTR-DATE-FIELDS
MOVE WS-CURRENT-MMDDYYYY TO DTR-CAL-DATE-N
MOVE CN-DSCNTU-CUTOFF-DAYS TO DTR-NBR-DAYS-N
SET SUBTRACT-DAYS TO TRUE
CALL 'CNVDATE' USING DTR-DATE-FIELDS
IF NOT VALID-DATE
MOVE 'INVALID CUT OFF DATE FOR DISCONTINUED ITEMS'
TO WS-ERR-MSG1
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-IF
MOVE DTR-CAL-MM2 TO WS-DSCNTU-MM
MOVE '/' TO WS-DSCNTU-SL1
MOVE DTR-CAL-DD2 TO WS-DSCNTU-DD
MOVE '/' TO WS-DSCNTU-SL2
MOVE DTR-CAL-CC2 TO WS-DSCNTU-YYYY (1:2)
MOVE DTR-CAL-YY2 TO WS-DSCNTU-YYYY (3:2)
MOVE CN-DSCNTU-CUTOFF-DAYS TO WS-EDIT-COMP4
DISPLAY ' '
DISPLAY 'DISCONTINUE CUT OFF DATE IS CALCULATED AS'
DISPLAY 'CURRENT DATE MINUS ' WS-EDIT-COMP4
DISPLAY 'DAYS. CUT OFF DATE FOR THIS RUN: '
WS-DSCNTU-CUTOFF-DT
*
* OPEN FILES
*
OPEN INPUT CONTROL-FILE-IN
OUTPUT PRICE-FILE-OUT
EVALUATE TRUE
WHEN (CTRL-STATUS IS NOT = 97
AND CTRL-STATUS IS NOT = ZERO)
MOVE 'UNABLE TO OPEN RPRCTRLI FILE' TO
WS-ERR-MSG1
STRING 'FILE STATUS IS ' CTRL-STATUS
12. DELIMITED BY SIZE
INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
WHEN (PRICE-STATUS IS NOT = ZERO)
MOVE 'UNABLE TO OPEN RPRPRICO FILE' TO
WS-ERR-MSG1
STRING 'FILE STATUS IS ' PRICE-STATUS
DELIMITED BY SIZE
INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-EVALUATE
MOVE 'N' TO WS-CURSOR-IND
*
* LOAD VALID DB2 XMIT CODES & DESTINATIONS FROM CTRLFILE
*
MOVE SPACES TO CTRL-FILE-KEYS
MOVE 'XMITDESTCD' TO CTRL-KEY1-REC-TYPE
PERFORM 800-START-CONTROL-FILE
PERFORM 810-READ-CONTROL-FILE
IF CTRL-KEY1-REC-TYPE NOT = 'XMITDESTCD'
MOVE '"XMITDESTCD" REC TYPE NOT FOUND ON CONTROL FILE.'
TO WS-ERR-MSG1
MOVE 'CONTACT CONTRACT SERVICES PROGRAMMING STAFF.'
TO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-IF
MOVE ZERO TO T6-XMIT-CD-TBL-END
PERFORM 145-LOAD-XMIT-TBL VARYING T6-XMIT-SUB
FROM 1 BY 1
UNTIL EOF-CONTROL-FILE-IN
OR CTRL-KEY1-REC-TYPE IS NOT = 'XMITDESTCD'
* INITIALIZE ERROR INDS & MESSAGE FIELDS
MOVE 'N' TO WS-XMIT-CD-ERR-IND
.
******************************************************************
145-LOAD-XMIT-TBL.
******************************************************************
IF (T6-XMIT-CD-TBL-END + 1) > T6-XMIT-CD-TBL-MAX
MOVE 'TRANSMIT CODE TABLE OVERFLOW'
TO WS-ERR-MSG1
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
ELSE
MOVE CTRL-KEY2
TO T6-DB2-XMIT-CD(T6-XMIT-SUB)
PERFORM 150-LOAD-XMIT-DEST-CD
VARYING WS-DEST-SUB FROM 1 BY 1
UNTIL WS-DEST-SUB IS > CTRL-MAX-XMIT-DEST-CD
ADD 1 TO T6-XMIT-CD-TBL-END
PERFORM 810-READ-CONTROL-FILE
END-IF
.
******************************************************************
150-LOAD-XMIT-DEST-CD.
13. ******************************************************************
MOVE CTRL-XMIT-DEST-CD OF CTRL-XMIT-DEST-CD-REC
(WS-DEST-SUB)
TO T6-DEST-CD(T6-XMIT-SUB, WS-DEST-SUB)
.
******************************************************************
200-EXTRACT-SVP-CATG-IDS.
******************************************************************
INITIALIZE PRIC-PRICE-REC-INITIAL
* FILE CREATE DATE
MOVE WS-CURR-YYYYSMMSDD TO PRIC-FILE-CREATE-DT
* RECORD TYPE INDICATOR
SET PRIC-MNT-CATG-REC TO TRUE
* CATEGORY ID
MOVE SVP-CATG-ID OF SVP-CATEGORY TO PRIC-SVP-CATG-ID
* CATEGORY DESC
MOVE SVP-CATG-DESC-TEXT OF SVP-CATEGORY (1:SVP-CATG-DESC-LEN)
TO PRIC-SVP-CATG-DESC
* MFG SOURCE CODE
MOVE SKU-MFG-SRCE-CD OF SVP-CATEGORY TO PRIC-SKU-MFG-SRCE-CD
* MERCHANDISE CLASS
IF SKU-SERIES-ID OF SVP-CATEGORY (1:2) = '25' OR '26'
SET PRIC-COMPUTER-CLASS TO TRUE
ELSE
SET PRIC-CONSUMER-CLASS TO TRUE
END-IF
* MFG WARRANTY RANGE MINIMUM
MOVE MTH-WRNTY-MIN-NBR OF SVP-CATEGORY
TO PRIC-MFG-WTY-MIN-NBR
* MFG WARRANTY RANGE MAXIMUM
MOVE MTH-WRNTY-MAX-NBR OF SVP-CATEGORY
TO PRIC-MFG-WTY-MAX-NBR
MOVE PRIC-PRICE-REC TO SV-PRICE-REC
* CHECK XMIT DESTINATION CODE TO SEE IF THIS INFO SHOULD BE
* XMITTED
PERFORM 340-FIND-CTRL-DB2-XMIT-CD
IF NOT XMIT-CD-ERR
PERFORM 290-WRITE-PRICE-REC
VARYING WS-DEST-SUB FROM 1 BY 1
UNTIL (T6-DEST-CD(T6-XMIT-SUB, WS-DEST-SUB)
IS = SPACES)
END-IF
14. PERFORM 825-FETCH-SVP-CATG-ID-CUR
.
******************************************************************
220-EXTRACT-SVP-SKU-IDS.
******************************************************************
INITIALIZE PRIC-PRICE-REC-INITIAL
*------------------------------------------------------
* THIS LIST OF FIELDS IS TO LOAD THE SVP SKU ID TYPE REC WITH
* SVP SKU ID ATTRIBUTES THAT HAVE A ONE TO ONE RELATIONSHIP
* WITH SVP SKU ID.
*------------------------------------------------------
* FILE CREATE DATE
MOVE WS-CURR-YYYYSMMSDD TO PRIC-FILE-CREATE-DT
* RECORD TYPE INDICATOR
SET PRIC-MNT-SVP-REC TO TRUE
* SVP SKU ID
MOVE SVP-SKU-ID OF SVP-DETAIL TO PRIC-SVP-SKU-ID
* SVP SKU DESC
MOVE SVP-DESC OF SVP-DETAIL TO PRIC-SVP-SKU-DESC
* SPECIAL OPTION CODE
MOVE SVP-SPCL-OPTN-CD OF SVP-DETAIL TO PRIC-SVP-SPCL-OPTN-CD
* WARRANTY TYPE CODE
MOVE SVP-WRNTY-TYP-CD OF SVP-DETAIL TO PRIC-SVP-WRNTY-TYP-CD
* SERVICE LOCATION CODE
MOVE SVP-SRVC-LOC-CD OF SVP-DETAIL TO PRIC-SVP-SRVC-LOC-CD
* XMIT DESTINATION CODE
MOVE SVP-XMIT-DEST-CD OF SVP-DETAIL
TO PRIC-SVP-XMIT-DEST-CD-SVP
* SVP RETAIL AMOUNT
MOVE SVP-RTL-AMT OF SVP-PRICE-DTL TO PRIC-SVP-RTL-AMT
**** MSAHA1-12/14/2010-RB ISSUE 31 *******
**** IF SVP-PREPAY-MTH-QTY OF SVP-DETAIL > 0
**** MULTIPLY SVP-RTL-AMT OF SVP-PRICE-DTL BY
**** SVP-PREPAY-MTH-QTY OF SVP-DETAIL
**** GIVING WS-SVP-RTL-AMT
**** MOVE WS-SVP-RTL-AMT TO PRIC-SVP-RTL-AMT
**** ELSE
**** MOVE SVP-RTL-AMT OF SVP-PRICE-DTL TO PRIC-SVP-RTL-AMT
**** END-IF
* SVP SPIFF AMOUNT
COMPUTE WS-SPIFF-AMT ROUNDED = SVP-RTL-AMT OF SVP-PRICE-DTL *
( SVP-SPIFF-PCT OF SVP-DETAIL / 100 )
15. * THE NEXT MULTIPLY IS BECAUSE THE IBM COMPUTE STATEMENT HAS
* KNOWN BUG THAT ROUNDS INTERMITTENTLY INSTEAD OF AT THE END
MULTIPLY WS-SPIFF-AMT BY 1 GIVING PRIC-SPIFF-AMT ROUNDED
* SVP BEGIN MONTH NUMBER
MOVE SVP-BEG-MTH-NBR OF SVP-DETAIL TO PRIC-SVP-BEG-MTH-NBR
* SVP COVERAGE QUANTITY
MOVE SVP-COVER-MTH-QTY OF SVP-DETAIL
TO PRIC-SVP-COVER-MTH-QTY
* BILL-FREQ-MTH-QTY
MOVE BILL-FREQ-MTH-QTY OF SVP-DETAIL
TO PRIC-BILL-FREQ-MTH-QTY
* SVP-SPIFF-AMT
MOVE SVP-SPIFF-AMT OF SVP-DETAIL
TO PRIC-SVP-SPIFF-AMT
* SVP-PREPAY-MTH-QTY
MOVE SVP-PREPAY-MTH-QTY OF SVP-DETAIL
TO PRIC-SVP-PREPAY-MTH-QTY
MOVE PRIC-PRICE-REC TO SV-PRICE-REC
* CHECK XMIT DESTINATION CODE TO SEE IF THIS INFO SHOULD BE
* XMITTED
PERFORM 340-FIND-CTRL-DB2-XMIT-CD
IF NOT XMIT-CD-ERR
* WRITE OUT THE SVP SKU ID ('B') TYPE REC FIRST
PERFORM 290-WRITE-PRICE-REC
VARYING WS-DEST-SUB FROM 1 BY 1
UNTIL (T6-DEST-CD(T6-XMIT-SUB, WS-DEST-SUB)
IS = SPACES)
* THEN WRITE OUT THE COMPONENT RECS OF THE SVP SKU ID
PERFORM 225-EXTRACT-SVP-COMP-SKU-IDS
* THEN WRITE OUT THE SVP COST AMT (DEALER NET) RECS OF THE SVP
* SKU ID
PERFORM 227-EXTRACT-SVP-COST-AMTS
END-IF
* FETCH NEXT SVP SKU ID ('B') TYPE REC
PERFORM 835-FETCH-SVP-SKU-ID-CURSOR
.
******************************************************************
225-EXTRACT-SVP-COMP-SKU-IDS.
******************************************************************
MOVE 'N' TO WS-CURSOR-IND
PERFORM 837-OPEN-SVP-COMP-SKU-CUR UNTIL CURSOR-OPEN
16. * PRIMING FETCH
PERFORM 839-FETCH-SVP-COMP-SKU-ID-CUR
IF END-OF-SVP-COMP-SKU-ID-CUR
DISPLAY '------------------------------------------------'
DISPLAY '*********** INFORMATIONAL MESSAGE **************'
STRING 'SVP SKU ID ' SVP-SKU-ID OF SVP-DETAIL
DELIMITED BY SIZE
INTO WS-DISPLAY
DISPLAY WS-DISPLAY
MOVE SPACES TO WS-DISPLAY
DISPLAY 'FOUND WITH NO COMPONENT SKUS ASSOCIATED IN VIEW'
DISPLAY 'SVP_COMP_ASOC.'
END-IF
* --------- LOOP THROUGH COMPONENT SKU CURSOR ----------------
PERFORM UNTIL END-OF-SVP-COMP-SKU-ID-CUR
INITIALIZE PRIC-PRICE-REC-INITIAL
* FILE CREATE DATE
MOVE WS-CURR-YYYYSMMSDD TO PRIC-FILE-CREATE-DT
* RECORD TYPE INDICATOR
SET PRIC-MNT-SVP-COMP-REC TO TRUE
* SVP SKU ID
* THIS IS THE SAME SVP-SKU-ID AS ON THE 'B' REC BUT IT HAS
* TO BE REPEATED FOR COMPONENT SKU ASSOCIATION ON 'BA' RECS
MOVE SVP-SKU-ID OF SVP-DETAIL TO PRIC-SVP-SKU-ID-BA
EVALUATE TRUE
WHEN BROCHURE-COMP-TYP OF SVP-COMP-ASOC
MOVE SVP-COMP-SKU-ID OF SVP-COMP-ASOC
TO PRIC-SVP-COMP-SKU-ID
MOVE SVP-COMP-TYP-CD OF SVP-COMP-ASOC
TO PRIC-SVP-COMP-TYP-CD
WHEN OTHER
STRING 'UNDEFINED VALUE: '
SVP-COMP-TYP-CD OF SVP-COMP-ASOC
DELIMITED BY SIZE
INTO WS-ERR-MSG1
MOVE 'DETECTED IN SVP-COMP-TYP-CD OF TABLE'
TO WS-ERR-MSG2
MOVE 'SVP_COMP_ASOC. PROGRAMMER ATTENTION REQUIRED'
TO WS-ERR-MSG3
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-EVALUATE
MOVE PRIC-PRICE-REC TO SV-PRICE-REC
* WE SKIP DOING 340-FIND-CTRL-DB2-XMIT-CD AT THIS LEVEL SINCE XMIT
* DEST CODE IS AT THE SVP SKU ID LEVEL.
* WRITE OUT THE SVP COMPONENT SKU ID ('BA') TYPE RECS
PERFORM 290-WRITE-PRICE-REC
17. VARYING WS-DEST-SUB FROM 1 BY 1
UNTIL (T6-DEST-CD(T6-XMIT-SUB, WS-DEST-SUB)
IS = SPACES)
PERFORM 839-FETCH-SVP-COMP-SKU-ID-CUR
* END OF LOOP THROUGH COMPONENT SKU CURSOR ----------------
END-PERFORM
EXEC SQL
CLOSE SVP-COMP-SKU-CUR
END-EXEC
.
******************************************************************
227-EXTRACT-SVP-COST-AMTS.
******************************************************************
MOVE 'N' TO WS-CURSOR-IND
PERFORM 839A-OPEN-SVP-COST-AMT-CUR UNTIL CURSOR-OPEN
* PRIMING FETCH
PERFORM 839A-FETCH-SVP-COST-AMT-CUR
* IF NO SVP COST AMT (DEALER NET) ASSOCIATED TO A GIVEN SVP SKU ID
* DISPLAY MESSAGE
IF END-OF-SVP-COST-AMT-CUR
DISPLAY '------------------------------------------------'
DISPLAY '*********** INFORMATIONAL MESSAGE **************'
STRING 'SVP SKU ID ' SVP-SKU-ID OF SVP-DETAIL
DELIMITED BY SIZE
INTO WS-DISPLAY
DISPLAY WS-DISPLAY
MOVE SPACES TO WS-DISPLAY
DISPLAY 'FOUND WITH NO SVP COST (DEALER NET) AMOUNT'
DISPLAY 'ASSOCIATED IN TABLE/VIEW SVP_COST_DTL.'
END-IF
* ------- LOOP THROUGH SVP COST (DEALER NET) AMOUNT CURSOR -------
PERFORM UNTIL END-OF-SVP-COST-AMT-CUR
INITIALIZE PRIC-PRICE-REC-INITIAL
* FILE CREATE DATE
MOVE WS-CURR-YYYYSMMSDD TO PRIC-FILE-CREATE-DT
* RECORD TYPE INDICATOR
SET PRIC-MNT-SVP-COST-AMT-REC TO TRUE
* SVP SKU ID
* THIS IS THE SAME SVP-SKU-ID AS ON THE 'B' REC BUT IT HAS
* TO BE REPEATED FOR SVP COST AMT (DEALER NET) ASSOCIATION ON 'BB'
* RECS
MOVE SVP-SKU-ID OF SVP-DETAIL TO PRIC-SVP-SKU-ID-BB
* SALES CHANNEL ID
MOVE SLS-CHNL-ID OF SVP-COST-DTL TO PRIC-SLS-CHNL-ID
* SALES CHANNEL NAME
MOVE SLS-CHNL-ID OF SVP-COST-DTL TO WS-SQL-SLS-CHNL-ID
18. PERFORM 350-FIND-SLS-CHNL-NM
* SVP COST AMT (DEALER NET)
MOVE SVP-COST-AMT OF SVP-COST-DTL TO PRIC-SVP-COST-AMT
MOVE PRIC-PRICE-REC TO SV-PRICE-REC
* WE SKIP DOING 340-FIND-CTRL-DB2-XMIT-CD AT THIS LEVEL SINCE XMIT
* DEST CODE IS AT THE SVP SKU ID LEVEL.
* WRITE OUT THE SVP COST AMT (DEALER NET) ('BB') TYPE RECS. WE
* REPEAT THE WRITE FOR EVERY XMIT DEST CODE THAT WE FIND PER
* SALES CHANNEL
PERFORM 290-WRITE-PRICE-REC
VARYING WS-DEST-SUB FROM 1 BY 1
UNTIL (T6-DEST-CD(T6-XMIT-SUB, WS-DEST-SUB)
IS = SPACES)
PERFORM 839A-FETCH-SVP-COST-AMT-CUR
* END OF LOOP THROUGH SVP COST (DEALER NET) AMOUNT CURSOR
END-PERFORM
EXEC SQL
CLOSE SVP-COST-AMT-CUR
END-EXEC
.
******************************************************************
230-EXTRACT-SVP-CATG-ASOC.
******************************************************************
INITIALIZE PRIC-PRICE-REC-INITIAL
* FILE CREATE DATE
MOVE WS-CURR-YYYYSMMSDD TO PRIC-FILE-CREATE-DT
* RECORD TYPE INDICATOR
SET PRIC-MNT-ASOC-REC TO TRUE
* CATEGORY ID
MOVE SVP-CATG-ID OF SVP-CATG-ASOC TO PRIC-SVP-CATG-ID-ASOC
* SVP SKU ID
MOVE SVP-SKU-ID OF SVP-CATG-ASOC TO PRIC-SVP-SKU-ID-ASOC
MOVE PRIC-PRICE-REC TO SV-PRICE-REC
* CHECK XMIT DESTINATION CODE TO SEE IF THIS INFO SHOULD BE
* XMITTED
PERFORM 340-FIND-CTRL-DB2-XMIT-CD
IF NOT XMIT-CD-ERR
PERFORM 290-WRITE-PRICE-REC
VARYING WS-DEST-SUB FROM 1 BY 1
UNTIL (T6-DEST-CD(T6-XMIT-SUB, WS-DEST-SUB)
IS = SPACES)
END-IF
19. PERFORM 845-FETCH-SVP-CATG-ASOC-CURSOR
.
******************************************************************
290-WRITE-PRICE-REC.
******************************************************************
* LOAD XMIT CODES ACCORDING WHAT REC TYPE WE'RE PROCESSING
* THEN WRITE THE PRICE REC
*-----------------------------------------------------------------
EVALUATE TRUE
* CATEGORY 'A' TYPE REC
WHEN PRIC-MNT-CATG-REC
MOVE T6-DEST-CD(T6-XMIT-SUB, WS-DEST-SUB)
TO PRIC-SVP-XMIT-DEST-CD-CATG
ADD 1 TO CT-TOT-A-RECS-WRITTEN
* SVP SKU ID 'B' TYPE REC
WHEN PRIC-MNT-SVP-REC
MOVE T6-DEST-CD(T6-XMIT-SUB, WS-DEST-SUB)
TO PRIC-SVP-XMIT-DEST-CD-SVP
ADD 1 TO CT-TOT-B-RECS-WRITTEN
* SVP COMPONENT SKU ID 'BA' TYPE REC
WHEN PRIC-MNT-SVP-COMP-REC
MOVE T6-DEST-CD(T6-XMIT-SUB, WS-DEST-SUB)
TO PRIC-SVP-XMIT-DEST-CD-SVP-COMP
ADD 1 TO CT-TOT-BA-RECS-WRITTEN
* SVP COST AMT (DEALER NET) 'BB' TYPE REC
WHEN PRIC-MNT-SVP-COST-AMT-REC
MOVE T6-DEST-CD(T6-XMIT-SUB, WS-DEST-SUB)
TO PRIC-SVP-XMIT-DEST-CD-SVP-COST
ADD 1 TO CT-TOT-BB-RECS-WRITTEN
* CATEGORY / SVP SKU ID ASSOCIATION 'C' TYPE REC
WHEN PRIC-MNT-ASOC-REC
MOVE T6-DEST-CD(T6-XMIT-SUB, WS-DEST-SUB)
TO PRIC-SVP-XMIT-DEST-CD-ASOC
ADD 1 TO CT-TOT-C-RECS-WRITTEN
END-EVALUATE
PERFORM 850-WRITE-PRIC-REC
MOVE SV-PRICE-REC TO PRIC-PRICE-REC
ADD 1 TO CT-TOT-ALL-RECS-WRITTEN
.
******************************************************************
340-FIND-CTRL-DB2-XMIT-CD.
******************************************************************
SET T6-XMIT-SUB TO 1
SEARCH T6-XMIT-CD VARYING T6-XMIT-SUB
AT END
SET XMIT-CD-ERR TO TRUE
WHEN T6-DB2-XMIT-CD(T6-XMIT-SUB) =
SVP-XMIT-DEST-CD OF SVP-DETAIL
CONTINUE
END-SEARCH
.
20. ******************************************************************
350-FIND-SLS-CHNL-NM.
******************************************************************
EXEC SQL
SELECT
SLS_CHNL_NM
INTO
:SLS-CHNL.SLS-CHNL-NM
FROM SLS_CHNL CHNL
WHERE
CHNL.SLS_CHNL_ID = :WS-SQL-SLS-CHNL-ID
END-EXEC
EVALUATE SQLCODE
WHEN ZERO
MOVE SLS-CHNL-NM-TEXT OF SLS-CHNL (1:SLS-CHNL-NM-LEN)
TO PRIC-SLS-CHNL-NM (1:LENGTH OF PRIC-SLS-CHNL-NM)
WHEN 100
MOVE 'CHNL ID NOT IN SLS_CHNL '
TO PRIC-SLS-CHNL-NM
WHEN OTHER
MOVE 'SLS_CHNL TBL NOT AVAIL '
TO PRIC-SLS-CHNL-NM
END-EVALUATE
.
******************************************************************
800-START-CONTROL-FILE.
******************************************************************
START CONTROL-FILE-IN
KEY IS GREATER THAN OR EQUAL TO CTRL-FILE-KEYS
INVALID KEY
STRING 'INVALID CONTROL FILE KEY: '
CTRL-KEY1-REC-TYPE DELIMITED BY SIZE
INTO WS-ERR-MSG1
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-START
.
******************************************************************
810-READ-CONTROL-FILE.
******************************************************************
READ CONTROL-FILE-IN NEXT RECORD
AT END
SET EOF-CONTROL-FILE-IN TO TRUE
END-READ
IF (CTRL-STATUS IS NOT = 97) AND
(CTRL-STATUS IS NOT = ZERO) AND
NOT EOF-CONTROL-FILE-IN
STRING 'INVALID CONTROL FILE READ FOR KEY: '
CTRL-KEY1-REC-TYPE DELIMITED BY SIZE
INTO WS-ERR-MSG1
STRING 'FILE STATUS CODE: ' CTRL-STATUS
DELIMITED BY SIZE
INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-IF
.
******************************************************************
21. 820-OPEN-SVP-CATG-ID-CUR.
******************************************************************
EXEC SQL
OPEN SVP-CATG-ID-CUR
END-EXEC
IF SQLCODE IS NOT = ZERO
IF CT-NBR-RETRIES > PM-MAX-RETRIES
MOVE SQLCODE TO WS-EDIT-SQLCODE
MOVE 'SVP-CATG-ID-CUR OPEN FAILED' TO WS-ERR-MSG1
STRING 'SQLCODE = ' WS-EDIT-SQLCODE
DELIMITED BY SIZE INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
ELSE
ADD 1 TO CT-NBR-RETRIES
END-IF
ELSE
SET CURSOR-OPEN TO TRUE
MOVE 'N' TO WS-SVP-CATG-ID-CUR-IND
MOVE ZERO TO CT-NBR-RETRIES
END-IF
.
******************************************************************
825-FETCH-SVP-CATG-ID-CUR.
******************************************************************
MOVE ZERO TO SQLCODE
EXEC SQL FETCH SVP-CATG-ID-CUR
INTO
:SVP-CATEGORY.SVP-CATG-ID
,:SVP-CATEGORY.SVP-CATG-DESC
,:SVP-CATEGORY.SKU-MFG-SRCE-CD
,:SVP-CATEGORY.MTH-WRNTY-MIN-NBR
,:SVP-CATEGORY.MTH-WRNTY-MAX-NBR
,:SVP-CATEGORY.SKU-SERIES-ID:SKU-SERIES-ID-NULL-IND
,:SVP-DETAIL.SVP-XMIT-DEST-CD
END-EXEC
EVALUATE SQLCODE
WHEN ZERO
ADD 1 TO CT-SVP-CATG-CUR-FETCHED
WHEN 100
SET END-OF-SVP-CATG-ID-CUR TO TRUE
WHEN OTHER
MOVE SQLCODE TO WS-EDIT-SQLCODE
MOVE 'SVP-CATG-ID-CUR FETCH FAILED' TO WS-ERR-MSG1
STRING ' SQLCODE = ' WS-EDIT-SQLCODE
DELIMITED BY SIZE
INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-EVALUATE
.
******************************************************************
830-OPEN-SVP-SKU-ID-CURSOR.
******************************************************************
EXEC SQL
OPEN SVP-SKU-ID-CURSOR
END-EXEC
IF SQLCODE IS NOT = ZERO
IF CT-NBR-RETRIES > PM-MAX-RETRIES
MOVE SQLCODE TO WS-EDIT-SQLCODE
22. MOVE 'SVP-SKU-ID-CURSOR OPEN FAILED' TO WS-ERR-MSG1
STRING 'SQLCODE = ' WS-EDIT-SQLCODE
DELIMITED BY SIZE INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
ELSE
ADD 1 TO CT-NBR-RETRIES
END-IF
ELSE
SET CURSOR-OPEN TO TRUE
MOVE 'N' TO WS-SVP-SKU-ID-CURSOR-IND
MOVE ZERO TO CT-NBR-RETRIES
END-IF
.
******************************************************************
835-FETCH-SVP-SKU-ID-CURSOR.
******************************************************************
MOVE ZERO TO SQLCODE
EXEC SQL FETCH SVP-SKU-ID-CURSOR
INTO
:SVP-DETAIL.SVP-SKU-ID
,:SVP-DETAIL.SVP-SPCL-OPTN-CD
,:SVP-DETAIL.SVP-BEG-MTH-NBR
,:SVP-DETAIL.SVP-COVER-MTH-QTY
,:SVP-DETAIL.SVP-WRNTY-TYP-CD
,:SVP-DETAIL.SVP-SRVC-LOC-CD
,:SVP-DETAIL.SVP-SPIFF-PCT
,:SVP-DETAIL.SVP-XMIT-DEST-CD
,:SVP-DETAIL.SVP-DESC
,:SVP-DETAIL.BILL-FREQ-MTH-QTY
,:SVP-DETAIL.SVP-PREPAY-MTH-QTY
,:SVP-DETAIL.SVP-SPIFF-AMT
,:SVP-PRICE-DTL.SVP-RTL-AMT
END-EXEC
EVALUATE SQLCODE
WHEN ZERO
ADD 1 TO CT-SVP-SKU-ID-CUR-FETCHED
WHEN 100
SET END-OF-SVP-SKU-ID-CURSOR TO TRUE
WHEN OTHER
MOVE SQLCODE TO WS-EDIT-SQLCODE
MOVE 'SVP-SKU-ID-CURSOR FETCH FAILED' TO WS-ERR-MSG1
STRING ' SQLCODE = ' WS-EDIT-SQLCODE
DELIMITED BY SIZE
INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-EVALUATE
.
******************************************************************
837-OPEN-SVP-COMP-SKU-CUR.
******************************************************************
EXEC SQL
OPEN SVP-COMP-SKU-CUR
END-EXEC
IF SQLCODE IS NOT = ZERO
IF CT-NBR-RETRIES > PM-MAX-RETRIES
MOVE SQLCODE TO WS-EDIT-SQLCODE
MOVE 'SVP-COMP-SKUS-CUR OPEN FAILED' TO WS-ERR-MSG1
STRING 'SQLCODE = ' WS-EDIT-SQLCODE
DELIMITED BY SIZE INTO WS-ERR-MSG2
23. MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
ELSE
ADD 1 TO CT-NBR-RETRIES
END-IF
ELSE
SET CURSOR-OPEN TO TRUE
MOVE 'N' TO WS-SVP-COMP-SKU-ID-CUR-IND
MOVE ZERO TO CT-NBR-RETRIES
END-IF
.
******************************************************************
839-FETCH-SVP-COMP-SKU-ID-CUR.
******************************************************************
MOVE ZERO TO SQLCODE
EXEC SQL FETCH SVP-COMP-SKU-CUR
INTO
:SVP-COMP-ASOC.SVP-COMP-SKU-ID
,:SVP-COMP-ASOC.SVP-COMP-TYP-CD
END-EXEC
EVALUATE SQLCODE
WHEN ZERO
ADD 1 TO CT-SVP-COMP-SKU-CUR-FETCHED
WHEN 100
SET END-OF-SVP-COMP-SKU-ID-CUR TO TRUE
WHEN OTHER
MOVE SQLCODE TO WS-EDIT-SQLCODE
MOVE 'SVP-COMP-SKU-ID-CURSOR FETCH FAILED' TO WS-ERR-MSG1
STRING ' SQLCODE = ' WS-EDIT-SQLCODE
DELIMITED BY SIZE
INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-EVALUATE
.
******************************************************************
839A-OPEN-SVP-COST-AMT-CUR.
******************************************************************
EXEC SQL
OPEN SVP-COST-AMT-CUR
END-EXEC
IF SQLCODE IS NOT = ZERO
IF CT-NBR-RETRIES > PM-MAX-RETRIES
MOVE SQLCODE TO WS-EDIT-SQLCODE
MOVE 'SVP-COST-AMT-CUR OPEN FAILED' TO WS-ERR-MSG1
STRING 'SQLCODE = ' WS-EDIT-SQLCODE
DELIMITED BY SIZE INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
ELSE
ADD 1 TO CT-NBR-RETRIES
END-IF
ELSE
SET CURSOR-OPEN TO TRUE
MOVE 'N' TO WS-SVP-COST-AMT-CUR-IND
MOVE ZERO TO CT-NBR-RETRIES
END-IF
.
******************************************************************
839A-FETCH-SVP-COST-AMT-CUR.
******************************************************************
24. MOVE ZERO TO SQLCODE
EXEC SQL FETCH SVP-COST-AMT-CUR
INTO
:SVP-COST-DTL.SLS-CHNL-ID
,:SVP-COST-DTL.SVP-COST-AMT
END-EXEC
EVALUATE SQLCODE
WHEN ZERO
ADD 1 TO CT-SVP-COST-AMT-CUR-FETCHED
WHEN 100
SET END-OF-SVP-COST-AMT-CUR TO TRUE
WHEN OTHER
MOVE SQLCODE TO WS-EDIT-SQLCODE
MOVE 'SVP-COST-AMT-CUR FETCH FAILED' TO WS-ERR-MSG1
STRING ' SQLCODE = ' WS-EDIT-SQLCODE
DELIMITED BY SIZE
INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-EVALUATE
.
******************************************************************
840-OPEN-SVP-CATG-ASOC-CURSOR.
******************************************************************
EXEC SQL
OPEN SVP-CATG-ASOC-CRSR
END-EXEC
IF SQLCODE IS NOT = ZERO
IF CT-NBR-RETRIES > PM-MAX-RETRIES
MOVE SQLCODE TO WS-EDIT-SQLCODE
MOVE 'SVP-CATG-ASOC-CRSR OPEN FAILED' TO WS-ERR-MSG1
STRING 'SQLCODE = ' WS-EDIT-SQLCODE
DELIMITED BY SIZE INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
ELSE
ADD 1 TO CT-NBR-RETRIES
END-IF
ELSE
SET CURSOR-OPEN TO TRUE
MOVE 'N' TO WS-SVP-CATG-ASOC-CRSR-IND
MOVE ZERO TO CT-NBR-RETRIES
END-IF
.
******************************************************************
845-FETCH-SVP-CATG-ASOC-CURSOR.
******************************************************************
MOVE ZERO TO SQLCODE
EXEC SQL FETCH SVP-CATG-ASOC-CRSR
INTO
:SVP-CATG-ASOC.SVP-CATG-ID
,:SVP-CATG-ASOC.SVP-SKU-ID
,:SVP-DETAIL.SVP-XMIT-DEST-CD
END-EXEC
EVALUATE SQLCODE
WHEN ZERO
ADD 1 TO CT-SVP-CATG-ASOC-CUR-FETCHED
WHEN 100
SET END-OF-SVP-CATG-ASOC-CRSR TO TRUE
WHEN OTHER
25. MOVE SQLCODE TO WS-EDIT-SQLCODE
MOVE 'SVP-CATG-ASOC-CRSR FETCH FAILED' TO WS-ERR-MSG1
STRING ' SQLCODE = ' WS-EDIT-SQLCODE
DELIMITED BY SIZE
INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-EVALUATE
.
******************************************************************
850-WRITE-PRIC-REC.
******************************************************************
WRITE PRICE-FILE-OUT-REC
IF PRICE-STATUS IS NOT = '00'
MOVE 'WRITE TO CATALOG PRICE FILE RPRPRICO UNSUCCESSFUL.'
TO WS-ERR-MSG1
STRING 'THE STATUS CODE WAS ' PRICE-STATUS
DELIMITED BY SIZE INTO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-IF
.
******************************************************************
911-EMPTY-SVP-CATG-ID-CUR.
******************************************************************
MOVE 'SVP-CATG-ID-CUR OPEN RESULTED IN NO DATA BEING'
TO WS-ERR-MSG1
MOVE 'RETURNED. FATAL ERROR. CONTACT RSSP PROGRAMMER.'
TO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
.
******************************************************************
911-EMPTY-SVP-SKU-ID-CURSOR.
******************************************************************
MOVE 'SVP-SKU-ID-CURSOR OPEN RESULTED IN NO DATA BEING'
TO WS-ERR-MSG1
MOVE 'RETURNED. FATAL ERROR. CONTACT RSSP PROGRAMMER.'
TO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
.
******************************************************************
911-EMPTY-SVP-CATG-ASOC-CRSR.
******************************************************************
MOVE 'SVP-CATG-ASOC-CRSR OPEN RESULTED IN NO DATA BEING'
TO WS-ERR-MSG1
MOVE 'RETURNED. FATAL ERROR. CONTACT RSSP PROGRAMMER.'
TO WS-ERR-MSG2
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
.
******************************************************************
9000-PROGRAM-END.
******************************************************************
CLOSE CONTROL-FILE-IN
PRICE-FILE-OUT
DISPLAY '================================================'
DISPLAY '> FINAL TOTALS SUMMARY - RPR6520 '
DISPLAY '================================================'
26. IF CT-TOT-ALL-RECS-WRITTEN = ZERO
MOVE 'PROGRAM DID NOT OUTPUT ANY RSSP PRICING RECORDS.'
TO WS-ERR-MSG1
MOVE 'THIS IS HIGHLY UNUSUAL AND LIKELY INDICATIVE OF'
TO WS-ERR-MSG2
MOVE 'A MAJOR PROBLEM. PROGRAMMER ATTENTION REQUIRED.'
TO WS-ERR-MSG3
MOVE 16 TO ABEND-CD
PERFORM 9999-ABEND
END-IF
* TOTAL SVP CATEGORY ('A') RECS FETCHED
MOVE CT-SVP-CATG-CUR-FETCHED TO WS-EDIT-REC-COUNT
DISPLAY ' '
DISPLAY WS-EDIT-REC-COUNT
' TOTAL SVP CATEGORY RECS ("A") FETCHED'
* TOTAL SVP CATEGORY ('A') RECS WRITTEN
MOVE CT-TOT-A-RECS-WRITTEN TO WS-EDIT-REC-COUNT
DISPLAY WS-EDIT-REC-COUNT
' TOTAL SVP CATEGORY RECS ("A") WRITTEN'
* TOTAL SVP SKU ID ('B') RECS FETCHED
MOVE CT-SVP-SKU-ID-CUR-FETCHED TO WS-EDIT-REC-COUNT
DISPLAY ' '
DISPLAY WS-EDIT-REC-COUNT
' TOTAL SVP SKU ID ("B") RECS FETCHED'
* TOTAL SVP SKU ID ('B') RECS WRITTEN
MOVE CT-TOT-B-RECS-WRITTEN TO WS-EDIT-REC-COUNT
DISPLAY WS-EDIT-REC-COUNT
' TOTAL SVP SKU ID ("B") RECS WRITTEN'
* TOTAL SVP COMPONENT SKU ('BA') RECS FETCHED
MOVE CT-SVP-COMP-SKU-CUR-FETCHED TO WS-EDIT-REC-COUNT
DISPLAY ' '
DISPLAY WS-EDIT-REC-COUNT
' TOTAL SVP COMPONENT SKU ("BA") RECS FETCHED'
* TOTAL SVP COMPONENT SKU ('BA') RECS WRITTEN
MOVE CT-TOT-BA-RECS-WRITTEN TO WS-EDIT-REC-COUNT
DISPLAY WS-EDIT-REC-COUNT
' TOTAL SVP COMPONENT SKU ("BA") RECS WRITTEN'
* TOTAL SVP COST AMT (DEALER NET) ('BB') RECS FETCHED
MOVE CT-SVP-COST-AMT-CUR-FETCHED TO WS-EDIT-REC-COUNT
DISPLAY ' '
DISPLAY WS-EDIT-REC-COUNT
' TOTAL SVP COST AMT (DEALER NET) ("BB") RECS FETCHED'
* TOTAL SVP COST AMT (DEALER NET) ('BB') RECS WRITTEN
MOVE CT-TOT-BB-RECS-WRITTEN TO WS-EDIT-REC-COUNT
DISPLAY WS-EDIT-REC-COUNT
' TOTAL SVP COST AMT (DEALER NET) ("BB") RECS WRITTEN'
27. * TOTAL SVP CATEGORY ('C') RECS FETCHED
MOVE CT-SVP-CATG-ASOC-CUR-FETCHED TO WS-EDIT-REC-COUNT
DISPLAY ' '
DISPLAY WS-EDIT-REC-COUNT
' TOTAL SVP CATEGORY ASOC ("C") RECS FETCHED'
* TOTAL SVP CATEGORY ('C') RECS WRITTEN
MOVE CT-TOT-C-RECS-WRITTEN TO WS-EDIT-REC-COUNT
DISPLAY WS-EDIT-REC-COUNT
' TOTAL SVP CATEGORY ASOC ("C") RECS WRITTEN'
* TOTAL RECS (ALL TYPES) WRITTEN
MOVE CT-TOT-ALL-RECS-WRITTEN TO WS-EDIT-REC-COUNT
DISPLAY ' '
DISPLAY WS-EDIT-REC-COUNT ' TOTAL PRICE RECS WRITTEN'
.
******************************************************************
9999-ABEND.
******************************************************************
DISPLAY '***********************************************'
UPON CONSOLE
DISPLAY '** ABEND TAKEN BY COBOL' UPON CONSOLE
DISPLAY '** PROGRAM RPR6520' UPON CONSOLE
DISPLAY '**' UPON CONSOLE
DISPLAY '** ' WS-ERR-MSG1 UPON CONSOLE
DISPLAY '** ' WS-ERR-MSG2 UPON CONSOLE
DISPLAY '** ' WS-ERR-MSG3 UPON CONSOLE
DISPLAY '** ' WS-ERR-MSG4 UPON CONSOLE
DISPLAY '** ' UPON CONSOLE
DISPLAY '***********************************************'
UPON CONSOLE
MOVE 0 TO TIMING
CALL "CEE3ABD" USING ABEND-CD , TIMING
.