8149 lines
239 KiB
Plaintext
8149 lines
239 KiB
Plaintext
// don lowenstein - June 1993 -(preproc) for acd on screen 2100
|
|
// all unique procs for the CGW SYSTEM
|
|
|
|
//** #INCLUDE 'CGWINCLD.PRG'
|
|
// #INCLUDE 'FIVEWIN.CH'
|
|
|
|
#INCLUDE 'INKEY.CH'
|
|
#INCLUDE 'BOX.CH'
|
|
|
|
|
|
******************************************************************
|
|
|
|
FUNCTION ACD_ATTRIB_CUT()
|
|
|
|
LOCAL SAVESEL := SELECT()
|
|
LOCAL SAVESCR := SAVESCREEN()
|
|
LOCAL ACTION_CODE := GETAVAR('ACTION_CODE')
|
|
|
|
IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD'
|
|
ACD_PAR_CHILD(1, 'Cutting Attribute Definitions', {NIL, 'ATTRIB_CUT', .F. ,,'ADD',,,,,,.F., 'USERFILET'})
|
|
ELSE
|
|
ACD_PAR_CHILD(3, 'Cutting Attribute Definitions', {NIL, 'ATTRIB_CUT', .F. ,,'REV',,,,,,.F., 'USERFILET'})
|
|
ENDIF
|
|
|
|
SELECT (SAVESEL)
|
|
RESTSCREEN(,,,,SAVESCR)
|
|
RETURN .T.
|
|
|
|
******************************************************************
|
|
FUNCTION CUT_SPEC_DISP(ACTION)
|
|
// DISPLAYS GB_EXTRA FOR SEQ_NUM IN CUT SPEC FILE
|
|
|
|
LOCAL RETVAL := ''
|
|
|
|
IF !EMPTY(ATT_CODE)
|
|
IF ACTION = 'PROFILE'
|
|
RETVAL := DISPVALUE(ATT_CODE,"ATTRIB_CUT",{"PROFILE"})
|
|
ELSE
|
|
RETVAL := DISPVALUE(ATT_CODE,"ATTRIB_CUT",{"PRINT_DESC"})
|
|
** RETVAL := RETVAL + ' ' + DISPVALUE(ATT_CODE,"ATTRIB_CUT",{"DESC"})
|
|
RETVAL := DISPVALUE(ATT_CODE,"ATTRIB_CUT",{"DESC"})
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN RETVAL
|
|
|
|
|
|
******************************************************************
|
|
|
|
FUNCTION SIZE_ERR( )
|
|
ERR_BOX( ' Entry Sizes MUST Be HHHWWW ', ;
|
|
' For NOMINAL SIZES or 99 X 99 ',;
|
|
" or 99G Basement or 9'9 Width Only",;
|
|
' PLEASE RE-ENTER ')
|
|
RETURN .T.
|
|
|
|
******************************************************************
|
|
FUNCTION BLANK_1ST( ALLOW, FIELD, ALTPRICE )
|
|
// CHECK TO SEE IF BLANK RECORD IS OK IF F10 ON EMPTY 1ST RECORD
|
|
LOCAL ALLOW_ENTER := .F. //** P3N - 6/30/98
|
|
IF EMPTY(ALTPRICE) //** P3N - 6/30/98
|
|
ALLOW_ENTER := .F. //** P3N - 6/30/98
|
|
ELSEIF ALTPRICE == 'ALT_SPRICE' //** P3N - 6/30/98
|
|
ALLOW_ENTER := .T. //** P3N - 6/30/98
|
|
ENDIF //** P3N - 6/30/98
|
|
IF ALLOW_ENTER //** ALLOW ENTER ON ALT_SPRICE EDIT - P3N - 6/30/98
|
|
IF ALLOW .AND. EMPTY(&FIELD) .AND. RECNO() = 1
|
|
REPLACE ORDER_NUM WITH ' '
|
|
ENDIF
|
|
RETURN .T.
|
|
ELSE
|
|
IF LASTKEY() <> K_F10
|
|
RETURN .F.
|
|
ELSE
|
|
IF ALLOW .AND. EMPTY(&FIELD) .AND. RECNO() = 1
|
|
REPLACE ORDER_NUM WITH ' '
|
|
RETURN .T.
|
|
ELSE
|
|
RETURN .F.
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
******************************************************************
|
|
FUNCTION DISPCOLOR(ADDL_MODE, REALFILE)
|
|
// DISPLAY THE COLOR OF PRODUCT ON THE LINE ITEM SCREEN FOR EACH MODEL
|
|
|
|
LOCAL RETVAL, SEEKKEY
|
|
LOCAL SAVESEL := SELECT()
|
|
|
|
IF REALFILE = NIL
|
|
REALFILE := 'USERFILE8' // USER ORDER_OPTS / ADDL_OPTS , NOT USERFILE8
|
|
ENDIF
|
|
|
|
|
|
IF ADDL_MODE = NIL
|
|
ADDL_MODE := .F.
|
|
ENDIF
|
|
|
|
IF ADDL_MODE
|
|
SEEKKEY := &CUR_MAST->ORDER_NUM + PROD_CODE + STR(USERFILE2->LINE_NUM,3) + 'FR COLOR'
|
|
ELSE
|
|
SEEKKEY := &CUR_MAST->ORDER_NUM + STR(USERFILE2->LINE_NUM,3) + 'FR COLOR'
|
|
ENDIF
|
|
|
|
SELECT (REALFILE)
|
|
SEEK SEEKKEY
|
|
IF FOUND()
|
|
RETVAL := TRIM( (REALFILE)->USER_RESP)
|
|
ELSE
|
|
RETVAL := 'N/A'
|
|
ENDIF
|
|
SELECT (SAVESEL)
|
|
|
|
RETURN RETVAL
|
|
|
|
******************************************************************
|
|
FUNCTION NEED_CALC(ACTIONCODE, FLD_NAME, UP_RECNO)
|
|
LOCAL SAVESEL := SELECT(), ADDL_MODE, SEEKKEY
|
|
STATIC LASTVAL := NIL
|
|
|
|
IF UP_RECNO = NIL
|
|
UP_RECNO := .F.
|
|
ENDIF
|
|
|
|
ADDL_MODE := UP_RECNO
|
|
|
|
IF UP_RECNO
|
|
REPLACE LINE_NUM WITH RECNO()
|
|
ENDIF
|
|
|
|
IF PROCNAME(1) = 'EDITGBROW' // F10 KEY PRESSED
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
IF ACTIONCODE = 'W' // A BU_WHEN CONDITION
|
|
LASTVAL := USERFILE2->&FLD_NAME
|
|
ELSE
|
|
IF ACTIONCODE = 'V' // VALID_FUNC
|
|
IF !EMPTY(LASTVAL) // CAN'T CHANGE CERTAIN ITEMS
|
|
IF LASTVAL == USERFILE2->&FLD_NAME
|
|
// LEAVE THE NEEDCALC FLAG ALONE!
|
|
ELSE // DIFFERENT VALUES
|
|
SELECT USERFILE8
|
|
IF ADDL_MODE
|
|
SEEKKEY := &CUR_MAST->ORDER_NUM + USERFILE2->PROD_CODE + STR(USERFILE2->LINE_NUM,3)
|
|
ELSE
|
|
SEEKKEY := &CUR_MAST->ORDER_NUM + STR(USERFILE2->LINE_NUM,3)
|
|
ENDIF
|
|
SEEK SEEKKEY
|
|
IF FOUND()
|
|
SELECT (SAVESEL)
|
|
DO CASE
|
|
// IF SPECIAL PROTECTED FIELD, REVERT TO OLD VALUE - LEAVE CALC FLAG ALONE
|
|
CASE FLD_NAME == 'PROD_CODE' // CAN'T CHANGE MODEL NUMBER
|
|
REPLACE USERFILE2->PROD_CODE WITH LASTVAL
|
|
ERR_BOX( ' You Can NOT Change the MODEL ', ;
|
|
' You may DELETE incorrect Line Items ', ;
|
|
' Model Changed to Original Value ')
|
|
CASE FLD_NAME == 'STD_OPTS' // CAN'T CHANGE STD OPTS
|
|
REPLACE USERFILE2->STD_OPTS WITH LASTVAL
|
|
ERR_BOX( ' You Can NOT Change the STANDARD OPTIONS FLAG ', ;
|
|
' You may DELETE incorrect Line Items ', ;
|
|
' SO Changed to Original Value ')
|
|
OTHERWISE // DIFFERENT VALUE/NON PROTECTED/SET NEEDCALC
|
|
REPLACE USERFILE2->NEED_CALC WITH 'Y'
|
|
ENDCASE
|
|
ELSE /// NO USERFILE8 OPTS FOUND
|
|
SELECT (SAVESEL)
|
|
REPLACE USERFILE2->NEED_CALC WITH 'Y'
|
|
ENDIF
|
|
ENDIF
|
|
ELSE // WAS EMPTY LASTVAL - NEED A CALC
|
|
REPLACE USERFILE2->NEED_CALC WITH 'Y'
|
|
ENDIF
|
|
LASTVAL := NIL
|
|
REPLACE USERFILE2->GL311_AMT WITH ;
|
|
( SET_GL311(USERFILE2->PROD_CODE) * USERFILE2->QUANTITY )
|
|
ENDIF
|
|
ENDIF
|
|
RETURN .T.
|
|
|
|
******************************************************************
|
|
FUNCTION SET_TCALC()
|
|
LOCAL SAVESEL := SELECT(), SEEKKEY := &CUR_MAST->ORDER_NUM
|
|
LOCAL SAVEORD, TAGNAME
|
|
|
|
IF &CUR_MAST->NEED_CALC$'Y' .AND. SELECT('USERFILE2') > 0
|
|
SELECT USERFILE2
|
|
IF FIELDPOS('NEED_CALC') > 0
|
|
REPLACE ALL NEED_CALC WITH 'Y'
|
|
ENDIF
|
|
ENDIF
|
|
IF SELECT('USERFILE8') > 0 //** P3N - 5/18/98
|
|
SELECT USERFILE8
|
|
ZAP
|
|
ELSE
|
|
SELECT (CUR_OO) //** P3N - 5/18/98
|
|
COPY STRUCTURE TO &USERFILE8
|
|
NET_USE( USERFILE8, .T., 3, 'USERFILE8' )
|
|
ENDIF
|
|
//*SELECT ORDER_OPTS
|
|
SELECT (CUR_OO)
|
|
SAVEORD := INDEXORD()
|
|
DONSETORD(1)
|
|
NDX_EXP = INDEXKEY()
|
|
SELECT USERFILE8
|
|
**INDEX ON &NDX_EXP TO &USERFILE8
|
|
IF __DBDRIVER = 'CDX'
|
|
TAGNAME := 'T1'
|
|
INDEX ON &NDX_EXP TAG &TAGNAME TO &USERFILE8
|
|
ELSE
|
|
INDEX ON &NDX_EXP TO &USERFILE8
|
|
ENDIF
|
|
|
|
|
|
//*SELECT ORDER_OPTS
|
|
SELECT (CUR_OO)
|
|
DONSETORD(SAVEORD)
|
|
|
|
SELECT (SAVESEL)
|
|
RETURN .T.
|
|
|
|
******************************************************************
|
|
FUNCTION NEED_TCALC()
|
|
LOCAL SAVESEL := SELECT()
|
|
LOCAL LOOKARR, ELEM, I
|
|
LOCAL DBFVAR, G_ACT_LIST, GA_DBFVAR
|
|
|
|
G_ACT_LIST := GETACTIVE()
|
|
IF EMPTY(G_ACT_LIST) .OR. EMPTY(GETLIST)
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
I := G_ACT_LIST[2,1]
|
|
GA_DBFVAR := GETVARS[I,3]
|
|
DBFVAR := &GA_DBFVAR
|
|
MEMVAR := GETVARS[I,4]
|
|
|
|
IF EMPTY(&CUR_MAST->NEED_CALC)
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
IF DBFVAR == MEMVAR
|
|
ELSE
|
|
REC_LOCK(3)
|
|
REPLACE &CUR_MAST->NEED_CALC WITH 'Y'
|
|
UNLOCK
|
|
ENDIF
|
|
RETURN .T.
|
|
|
|
******************************************************************
|
|
|
|
FUNCTION CGWACD(OPTION, TITLE, WHICHFILE)
|
|
|
|
|
|
// OPEN CUST_MAST FILE FOR CUSTOMER SPECIFIC OPTIONS
|
|
DBOPEN('CUST_MAST', .F.) //** P3N - 3/2/99
|
|
// OPEN MATHPACK FILE FOR 'C' FIELDS
|
|
DBOPEN('MATHPACK', .F.)
|
|
DO CASE
|
|
CASE WHICHFILE = 'PRODUCTS'
|
|
ACD_PAR_CHILD(OPTION, TITLE, {'PRODUCT', 'PROD_ATTS', .T., 3, 'ADD' })
|
|
|
|
CASE WHICHFILE = 'CATEGORY'
|
|
ACD_PAR_CHILD(OPTION, TITLE, {'CATEGORY', 'CAT_ATTS', .T., 3, 'ADD' })
|
|
|
|
ENDCASE
|
|
|
|
RETURN
|
|
|
|
******************************************************************
|
|
|
|
FUNCTION CGWPRINT(OPTION, TITLE, WHICHFILE)
|
|
LOCAL GET_PARMS, PRNT_KEY, CORR_MSG, CORR
|
|
PRIVATE PAGE_BREAK
|
|
|
|
CLS
|
|
|
|
DO CASE
|
|
CASE WHICHFILE = 'MODEL OPTIONS'
|
|
SAYTITLE('Select Model to PRINT', 'PRDI' )
|
|
DBOPEN('ATTRIBUTES')
|
|
GET_PARMS := DBOPEN('PRODUCT')
|
|
PRNT_KEY = GET_KEY(GET_PARMS, .T.)
|
|
IF LASTKEY() = 27
|
|
CLOSE DATABASES
|
|
RETURN
|
|
ENDIF
|
|
PRNTDISP(OPTION, TITLE, "MODEL OPTIONS")
|
|
|
|
CASE WHICHFILE = 'CATEGORY OPTIONS'
|
|
SAYTITLE('Select CATEGORY to PRINT', 'PRDI' )
|
|
DBOPEN('ATTRIBUTES')
|
|
GET_PARMS := DBOPEN('CATEGORY')
|
|
PRNT_KEY = GET_KEY(GET_PARMS, .T.)
|
|
IF LASTKEY() = 27
|
|
CLOSE DATABASES
|
|
RETURN
|
|
ENDIF
|
|
PRNTDISP(OPTION, TITLE, "CATEGORY OPTIONS")
|
|
|
|
CASE WHICHFILE = 'MODEL BASE PRICE'
|
|
SAYTITLE('Select Model to PRINT', 'PRDI' )
|
|
DBOPEN('CATEGORY')
|
|
GET_PARMS := DBOPEN('PRODUCT')
|
|
PRNT_KEY = GET_KEY(GET_PARMS, .T.)
|
|
IF LASTKEY() = 27
|
|
CLOSE DATABASES
|
|
RETURN
|
|
ENDIF
|
|
PRNTDISP(OPTION, TITLE, WHICHFILE)
|
|
|
|
CASE WHICHFILE = 'CATEGORY BASE PRICE'
|
|
SAYTITLE('Select CATEGORY to PRINT', 'PRDI' )
|
|
DBOPEN('PRODUCT')
|
|
GET_PARMS := DBOPEN('CATEGORY')
|
|
PRNT_KEY = GET_KEY(GET_PARMS, .T.)
|
|
IF LASTKEY() = 27
|
|
CLOSE DATABASES
|
|
RETURN
|
|
ENDIF
|
|
SELECT PRODUCT
|
|
DONSETORD(3)
|
|
SEEK CATEGORY->CAT_CODE
|
|
DONSETORD(1)
|
|
CORR_MSG := 'PAGE BREAK BETWEEN PRODUCTS? '
|
|
PAGE_BREAK := CORRCHEK( 10, CORR_MSG, , 2 )
|
|
*- READ()
|
|
IF LASTKEY() = 27 .OR. PAGE_BREAK$'X'
|
|
CLOSE DATABASES
|
|
RETURN
|
|
ENDIF
|
|
PRNTDISP(OPTION, TITLE, WHICHFILE)
|
|
|
|
ENDCASE
|
|
|
|
RETURN
|
|
|
|
******************************************************************
|
|
FUNCTION SIZE_CONVERT( MPROD_CODE, IN_HM, OUT_HM, IN_WIDTH, IN_HEIGHT )
|
|
LOCAL SAVESEL := SELECT(), RETVAL
|
|
LOCAL WORKVAR1, WORKVAR2
|
|
|
|
IF PRODUCT->(DBSEEK(MPROD_CODE))
|
|
|
|
DO CASE
|
|
CASE IN_HM = 'OS'
|
|
IF OUT_HM = 'TT'
|
|
WORKVAR1 := IN_WIDTH + PRODUCT->OS_WIDTH + PRODUCT->SAW_WIDTH
|
|
WORKVAR2 := IN_HEIGHT + PRODUCT->OS_HEIGHT + PRODUCT->SAW_HEIGHT
|
|
RETVAL := {WORKVAR1, WORKVAR2}
|
|
ELSEIF OUT_HM = 'NS'
|
|
WAIT_BOX('** NOT ACTIVE FOR "FROM" TT "TO" NS CONVERSIONS YET')
|
|
ENDIF
|
|
|
|
CASE IN_HM = 'TT'
|
|
WAIT_BOX('** NOT ACTIVE FOR "FROM" TT CONVERSIONS YET')
|
|
IF OUT_HM = 'OS'
|
|
ELSEIF OUT_HM = 'NS'
|
|
ENDIF
|
|
|
|
CASE IN_HM = 'NS'
|
|
WAIT_BOX('** NOT ACTIVE FOR "FROM" OS CONVERSIONS YET')
|
|
IF OUT_HM = 'TT'
|
|
ELSEIF OUT_HM = 'OS'
|
|
ENDIF
|
|
|
|
ENDCASE
|
|
ENDIF
|
|
RETURN RETVAL
|
|
|
|
* * * * * * * * * *
|
|
FUNCTION CGW11PRE(WHICHFILE)
|
|
// GET KEY --- PRODUCT ATTRIBUTE, FOR UPDATING OPTIONS
|
|
|
|
LOCAL RETVAL
|
|
IF WHICHFILE = 'CATEGORY'
|
|
RETVAL := { USERFILE2->CAT_CODE, USERFILE2->ATT_CODE }
|
|
ELSE
|
|
IF WHICHFILE = 'PRODUCT'
|
|
RETVAL := { USERFILE2->PROD_CODE, USERFILE2->ATT_CODE }
|
|
ELSE
|
|
IF WHICHFILE = 'CUST'
|
|
RETVAL := { USERFILE3->CUST_ID, USERFILE3->PROD_CODE, USERFILE3->ATT_CODE }
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN RETVAL
|
|
|
|
**********************************************************
|
|
FUNCTION CONT_PROC(M1, M2, M3)
|
|
|
|
/// the system is pointing to the product parent record!
|
|
LOCAL SEEKKEY := PRODUCT->PROD_CODE
|
|
IF ( PROD_ATTS->(DBSEEK( SEEKKEY ) ) )
|
|
ELSE
|
|
IF !PROMPT_BOX(M1,M2,M3)
|
|
CLEAR TYPEAHEAD
|
|
KEYBOARD CHR(27)
|
|
INKEY()
|
|
ENDIF
|
|
ENDIF
|
|
RETURN NIL
|
|
|
|
******************************************************
|
|
FUNCTION MAKE_MATH(FILENUM)
|
|
LOCAL USERFILE := 'USERFILE' + FILENUM
|
|
LOCAL SAVESEL := SELECT()
|
|
DBOPEN('PROD_OPTS')
|
|
DBOPEN('CAT_OPTS')
|
|
DBOPEN('MATHPACK')
|
|
IF SELECT('USERFILE5') > 0
|
|
SELECT USERFILE5
|
|
USE
|
|
ENDIF
|
|
SELECT MATHPACK
|
|
**COPY STRUCT TO &USERFILE5
|
|
COPYSTRUCT(USERFILE5, .T.)
|
|
NET_USE('&USERFILE5', .T., 3, 'USERFILE5')
|
|
IF SAVESEL > 0
|
|
SELECT (SAVESEL)
|
|
ENDIF
|
|
RETURN .T.
|
|
|
|
***************************************************************
|
|
FUNCTION WHCHPRICE(NCHOICE)
|
|
STATIC M_ARR
|
|
|
|
@2,0 CLEAR TO 20,80
|
|
|
|
IF M_ARR = NIL
|
|
M_ARR := BLD_M_ARR()
|
|
ENDIF
|
|
|
|
NCHOICE = LISTBOX(M_ARR, NCHOICE, 'Price Sheet')
|
|
|
|
RETURN NCHOICE
|
|
|
|
|
|
**************************************************
|
|
FUNCTION BLD_M_ARR()
|
|
LOCAL M_ARR := {}
|
|
AADD(M_ARR, 'Dealer Price')
|
|
AADD(M_ARR, 'Special Dealer Price')
|
|
AADD(M_ARR, 'Builder/Build Stock Price')
|
|
AADD(M_ARR, 'Lumbermen Price')
|
|
AADD(M_ARR, 'Distributor Price')
|
|
AADD(M_ARR, 'Intercompany Price')
|
|
RETURN M_ARR
|
|
|
|
|
|
***************************************************************
|
|
PROCEDURE CUSTP_TABLE( )
|
|
LOCAL SAVESEL := SELECT(), SAVESCR := SAVESCREEN()
|
|
LOCAL CUSTID := USERFILE2->CUST_ID
|
|
LOCAL MPROD := USERFILE2->PROD_CODE
|
|
LOCAL MTITLE := 'Select CUSTOMER to Copy Pricing for Customer ' + ALLTRIM(CUSTID) + '/'+ALLTRIM(MPROD)
|
|
LOCAL FILE_CP := 'U'+ ALLTRIM(USERFILE2->PROD_CODE) //** P3N - 2/25/99
|
|
LOCAL FILE_CP_SFX := '', PRICEFL := '', ORIGPRFL := '' //** P3N - 2/25/99
|
|
LOCAL M1 := 'Customer pricing does not exist for this customer.'
|
|
LOCAL M2 := ' '
|
|
LOCAL M3 := 'Do you want to copy pricing from an existing customer?'
|
|
LOCAL CPRICENUM := CUST_MAST->CPRICE_NUM
|
|
|
|
IF USERFILE2->BASEFAC <> 0
|
|
ERR_BOX('*** Price for this Product ' + MPROD + ' Customer # ' + CUSTID , ;
|
|
'*** Is Set Up as ' + STR(USERFILE2->BASEFAC,8,4) + '% of DEALER PRICE' ,;
|
|
'*** NO PRICE TABLE AVAILABLE ')
|
|
RETURN
|
|
ENDIF
|
|
|
|
IF !CK_SPEC_PRICE( CUSTID, MPROD, CURDATE, 'USERFILE2' )
|
|
ERR_BOX('*** NO SPECIAL Pricing Attributes FOUND', ;
|
|
'*** or SPECIAL Pricing Is EXPIRED', ;
|
|
'*** FOR This CUSTOMER - Set ATTS/OPTS 1st')
|
|
RETURN
|
|
ENDIF
|
|
|
|
WAIT_BOX('*** Retrieving CUSTOMER PRICE TABLE ***', ;
|
|
'*** Please Wait ***')
|
|
|
|
IF EMPTY(CPRICENUM)
|
|
DBOPEN('CONTROL')
|
|
IF CPRICE_NUM = 999
|
|
ERR_BOX('*** 999 Customer Price Tables Defined', ;
|
|
'*** No More May Be Added - Call Don')
|
|
USE
|
|
SELECT(SAVESEL)
|
|
RETURN
|
|
ELSE
|
|
REC_LOCK(1)
|
|
REPLACE CPRICE_NUM WITH CPRICE_NUM + 1
|
|
SELECT CUST_MAST
|
|
REC_LOCK(1)
|
|
REPLACE CUST_MAST->CPRICE_NUM WITH CONTROL->CPRICE_NUM
|
|
UNLOCK
|
|
CPRICENUM := CUST_MAST->CPRICE_NUM
|
|
SELECT CONTROL
|
|
USE
|
|
ENDIF
|
|
SELECT (SAVESEL)
|
|
ENDIF
|
|
FILE_CP_SFX := STR(CPRICENUM,3) //** P3N - 2/25/99
|
|
FILE_CP_SFX := STRTRAN(FILE_CP_SFX, ' ', '0') //** P3N - 2/25/99
|
|
PRICEFL := FILE_CP +'.'+FILE_CP_SFX //** P3N - 2/25/99
|
|
IF FILE(PRICEFL) //** P3N - 2/26/99
|
|
ELSEIF PROMPT_BOX(M1, M2, M3) //** P3N - 2/26/99
|
|
@ 00, 00 CLEAR TO 24, 80 //** P3N - 2/26/99
|
|
SAYTITLE( MTITLE, 'CUSTPR') //** P3N - 2/26/99
|
|
GET_THE_CUST(' ') //** P3N - 2/26/99
|
|
FILE_CP_SFX := STR(CUST_MAST->CPRICE_NUM,3) //** P3N - 2/26/99
|
|
FILE_CP_SFX := STRTRAN(FILE_CP_SFX, ' ', '0') //** P3N - 2/26/99
|
|
ORIGPRFL := FILE_CP +'.'+FILE_CP_SFX //** P3N - 2/25/99
|
|
IF FILE(ORIGPRFL) //** P3N - 2/26/99
|
|
COPY FILE (ORIGPRFL) TO (PRICEFL) //** P3N - 2/26/99
|
|
ENDIF //** P3N - 2/26/99
|
|
ENDIF //** P3N - 2/26/99
|
|
CUST_MAST->(DBSEEK(CUSTID)) //** P3N - 2/26/99
|
|
|
|
CGWPRICE( NIL, 'CUSTOMER PRICING - ' + CUSTID + '/' + ALLTRIM(MPROD), ;
|
|
99, CUSTID, MPROD, PADL(ALLTRIM(STR(CPRICENUM,3)),3,'0') )
|
|
|
|
SELECT (SAVESEL)
|
|
RESTSCREEN(,,,,SAVESCR)
|
|
|
|
RETURN .T.
|
|
|
|
***************************************************************
|
|
PROCEDURE CGWPRICE(OPTION, TITLE, PNCHOICE, PPR_CUSTID, PPRODCODE, P_CPRICENUM )
|
|
|
|
LOCAL MODELPARMS := DBOPEN("PRODUCT"), CORRECT, SAVESCR2
|
|
LOCAL MPROD_CODE, L, L2, POINTER, OFFSET, I , II, NUMVARS
|
|
LOCAL CURVAL, VARYPOS, FLD_ARR, PREFIX
|
|
LOCAL C_ARR := {}, R_ARR := {}, NEWFILE, NCHOICE
|
|
LOCAL COL_ARR := {}, ROW_ARR := {}, FILE1, FILE2
|
|
LOCAL SEEKKEY, MFILE, DESC_ARR := {}, CHK_BLOCK, DBNAME
|
|
LOCAL CNTR, COUNT_ARR := {}, NUM_2_DO, MCODE
|
|
LOCAL NTOP, NLEFT, NRIGHT, NBOTTOM, TBARR := {}
|
|
LOCAL NUM_DONE, SAVESCR, LOOPKEY, MPRICE_SHEET
|
|
LOCAL REAL_FILE, OLDDESC_ARR := {}, MSG
|
|
LOCAL OLDDBF_ARR, NEWDBF_ARR, DIFFERENT, OLD_MFILE := ''
|
|
LOCAL MPERCENT, MCHOICE, OLD_PRICE_CD := '', CORR
|
|
LOCAL SV_SEL, SV_ORD, DLR_FILE, SV_REAL_FILE
|
|
LOCAL DESC_SIZE := 50, ELEM
|
|
LOCAL P1, P2, P3, P4, COPYTO
|
|
LOCAL PR_CUSTID := PPR_CUSTID
|
|
LOCAL CPRICENUM := P_CPRICENUM
|
|
|
|
STATIC FILESOPEN, M_ARR, ALL_PR_ARR := {}
|
|
|
|
IF PR_CUSTID = NIL
|
|
PR_CUSTID := SPACE(8)
|
|
ENDIF
|
|
//** P3N - 01/02/02 HAPPY NEW YEAR - LINDA
|
|
//**IF FILESOPEN = NIL .OR. SELECT('CAT_OPTS') = 0
|
|
DBOPEN('ATTRIBUTES')
|
|
DBOPEN('ATT_OPTS')
|
|
|
|
DBOPEN('CUST_ATTS')
|
|
DONSETORD(2) // CUSTID + PROD_CODE + ORDER
|
|
DBOPEN('CUST_OPTS')
|
|
DBOPEN('PROD_ATTS')
|
|
DONSETORD(2) // PROD_CODE + ORDER
|
|
DBOPEN('PROD_OPTS')
|
|
DBOPEN('CAT_ATTS')
|
|
DONSETORD(2) // CAT_CODE + ORDER
|
|
DBOPEN('CAT_OPTS')
|
|
FILESOPEN = .T.
|
|
//**ENDIF
|
|
|
|
IF EMPTY(M_ARR)
|
|
M_ARR := BLD_M_ARR()
|
|
ENDIF
|
|
|
|
SAVESCR = SAVESCREEN()
|
|
DO WHILE .T.
|
|
IF PNCHOICE = NIL .OR. PNCHOICE = 99 // MENU OPTION FOR UPDATE PRICE TABLES - PRODUCT OR CUSTOMER
|
|
CLS
|
|
SAYTITLE(TITLE,'PRPO')
|
|
IF PNCHOICE = NIL
|
|
MPROD_CODE := {GET_KEY( GET_FILEPARM("PRODUCT") )}
|
|
IF LASTKEY() = 27
|
|
CLOSE DATABASES
|
|
RETURN
|
|
ENDIF
|
|
ELSE
|
|
MPROD_CODE := {PPRODCODE}
|
|
ENDIF
|
|
ELSE
|
|
RESTSCREEN(,,,,SAVESCR)
|
|
ENDIF
|
|
DO WHILE .T.
|
|
IF PNCHOICE = NIL
|
|
NCHOICE := WHCHPRICE(1)
|
|
IF LASTKEY() = 27
|
|
EXIT
|
|
ENDIF
|
|
ELSE
|
|
NCHOICE := PNCHOICE
|
|
ENDIF
|
|
|
|
IF NCHOICE = 99
|
|
MPRICE_SHEET = 'U' // USER SPECIFIC CUSTOMER PRICING
|
|
ELSE
|
|
MPRICE_SHEET = LEFT(M_ARR[NCHOICE],1)
|
|
ENDIF
|
|
|
|
IF NCHOICE = 5 // IF IT'S DISTRIBUTOR
|
|
MPRICE_SHEET = 'J' // USE 'J' FOR THE CODE! (JOBBER)
|
|
ENDIF
|
|
|
|
IF PNCHOICE <> NIL .AND. PNCHOICE <> 99 //PRINT THE BASE PRICE RPT
|
|
MFILE := PRODUCT->PROD_CODE
|
|
REAL_FILE := STRTRAN(ALLTRIM(MFILE), ' ', '_')
|
|
REAL_FILE := STRTRAN(REAL_FILE, '-', '_')
|
|
SV_REAL_FILE := REAL_FILE
|
|
REAL_FILE := MPRICE_SHEET + REAL_FILE
|
|
DLR_FILE := 'D' + SV_REAL_FILE
|
|
RETURN {REAL_FILE, DLR_FILE, MPRICE_SHEET}
|
|
ELSE // CALLED FROM A MENU / UPDATE SCREEN
|
|
IF PNCHOICE = NIL // REGULAR PRICING BUILD TABLE FROMMENU
|
|
MSG = M_ARR[NCHOICE]
|
|
ELSE
|
|
MSG = '' // CUSTOMER SPECIFIC PRICING
|
|
ENDIF
|
|
MFILE = MPROD_CODE[1]
|
|
MCODE = MFILE
|
|
REAL_FILE = STRTRAN(ALLTRIM(MFILE), ' ', '_')
|
|
REAL_FILE = STRTRAN(REAL_FILE, '-', '_')
|
|
REAL_FILE = MPRICE_SHEET + REAL_FILE
|
|
PREFIX := REAL_FILE
|
|
IF PNCHOICE = NIL
|
|
REAL_FILE = REAL_FILE + '.DBF'
|
|
ELSE
|
|
REAL_FILE = REAL_FILE + '.' + CPRICENUM
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// SEE IF IT'S THE SAME ONE TO DO, IF NOT BUILD THE STUFF FROM SCRATCH
|
|
ELEM := ASCAN(ALL_PR_ARR, {|X| X[1] == REAL_FILE .AND. X[5] == PR_CUSTID} )
|
|
IF ELEM > 0
|
|
FLD_ARR := ALL_PR_ARR[ELEM,2]
|
|
MFILE := ALL_PR_ARR[ELEM,3]
|
|
DESC_ARR := ALL_PR_ARR[ELEM,4]
|
|
ELSE
|
|
|
|
SEEKKEY = MCODE // SEEK SO THE PERCENT OF DEALER STUFF IS ALWAYS VISIBLE
|
|
|
|
IF !EMPTY(PR_CUSTID)
|
|
SELECT CUST_ATTS
|
|
FILE1 = 'CUST_ATTS'
|
|
FILE2 = 'CUST_OPTS'
|
|
DBNAME = 'CUST_ID + PROD_CODE'
|
|
SEEKKEY := PR_CUSTID + MCODE
|
|
CUST_ATTS->(DBSEEK(SEEKKEY))
|
|
IF CUST_ATTS->(FOUND())
|
|
ELSE
|
|
**********ERR_BOX('*** Customer Price table NOT FOUND! Pricing table/attributes', ;
|
|
********** '*** will be copied from the MODEL. You MUST save (F10) these', ;
|
|
********** '*** table/attributes to ensure accurate Price table creation!')
|
|
ENDIF
|
|
ENDIF
|
|
IF EMPTY(PR_CUSTID) .OR. !FOUND()
|
|
SEEKKEY = MCODE
|
|
SELECT PROD_ATTS
|
|
FILE1 = 'PROD_ATTS'
|
|
FILE2 = 'PROD_OPTS'
|
|
DBNAME = 'PROD_CODE'
|
|
SEEK SEEKKEY
|
|
IF !FOUND()
|
|
SELECT CAT_ATTS
|
|
SEEK SEEKKEY
|
|
FILE1 = 'CAT_ATTS'
|
|
FILE2 = 'CAT_OPTS'
|
|
DBNAME = 'CAT_CODE'
|
|
ENDIF
|
|
ENDIF
|
|
* SEEKKEY = MCODE
|
|
*
|
|
* SELECT PROD_ATTS
|
|
* FILE1 = 'PROD_ATTS'
|
|
* FILE2 = 'PROD_OPTS'
|
|
* DBNAME = 'PROD_CODE'
|
|
* SEEK SEEKKEY
|
|
* IF !FOUND()
|
|
** SELECT PRODUCT
|
|
** SEEK SEEKKEY
|
|
** MCODE = CAT_CODE
|
|
** SEEKKEY = MCODE
|
|
*
|
|
* SELECT CAT_ATTS
|
|
* SEEK SEEKKEY
|
|
* /// IF STILL NOT FOUND, DO MESSAGE THEN RETURN!
|
|
* FILE1 = 'CAT_ATTS'
|
|
* FILE2 = 'CAT_OPTS'
|
|
* DBNAME = 'CAT_CODE'
|
|
* ENDIF
|
|
// SITTING ON FILE1, EITHER PRODUCTS OR CATEGORY FILE OR CUST_ATTS FILE
|
|
// SHOULD HAVE FOUND AN APPROPRIATE RECORD
|
|
C_ARR := {}
|
|
R_ARR := {}
|
|
DO WHILE SEEKKEY == &DBNAME .AND. !EOF()
|
|
IF !EMPTY(PR_CUSTID)
|
|
IF LINK_CODE$'C'
|
|
AADD(C_ARR, ATT_CODE)
|
|
ELSE
|
|
IF LINK_CODE$'R'
|
|
AADD(R_ARR, ATT_CODE)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
|
|
DO CASE
|
|
CASE NCHOICE = 1
|
|
IF LINK_CODE = 'C'
|
|
AADD(C_ARR, ATT_CODE)
|
|
ELSE
|
|
IF LINK_CODE = 'R'
|
|
AADD(R_ARR, ATT_CODE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CASE NCHOICE = 2
|
|
IF LINK_SD = 'C'
|
|
AADD(C_ARR, ATT_CODE)
|
|
ELSE
|
|
IF LINK_SD = 'R'
|
|
AADD(R_ARR, ATT_CODE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CASE NCHOICE = 3
|
|
IF LINK_BU = 'C'
|
|
AADD(C_ARR, ATT_CODE)
|
|
ELSE
|
|
IF LINK_BU = 'R'
|
|
AADD(R_ARR, ATT_CODE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CASE NCHOICE = 4
|
|
IF LINK_LU = 'C'
|
|
AADD(C_ARR, ATT_CODE)
|
|
ELSE
|
|
IF LINK_LU = 'R'
|
|
AADD(R_ARR, ATT_CODE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CASE NCHOICE = 5
|
|
IF LINK_DI = 'C'
|
|
AADD(C_ARR, ATT_CODE)
|
|
ELSE
|
|
IF LINK_DI = 'R'
|
|
AADD(R_ARR, ATT_CODE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CASE NCHOICE = 6
|
|
IF LINK_IN = 'C'
|
|
AADD(C_ARR, ATT_CODE)
|
|
ELSE
|
|
IF LINK_IN = 'R'
|
|
AADD(R_ARR, ATT_CODE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
END CASE
|
|
ENDIF
|
|
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
// IF EMPTY C_ARR OR R_ARR, DO MESSAGE THEN RETURN
|
|
LOOPKEY = .F.
|
|
IF EMPTY(C_ARR) .OR. EMPTY(R_ARR)
|
|
IF MPRICE_SHEET$'D'
|
|
ERR_BOX( ' CANNOT find all ROW or COLUMN Information ', ;
|
|
' for the ' + TRIM(MFILE) + ' Model! ', ;
|
|
' Please Set them up in MODEL DEFINITIONS')
|
|
LOOPKEY = .T.
|
|
LOOP
|
|
ELSE
|
|
IF NCHOICE = 99 // CUSTOMER PRICING
|
|
MPERCENT = USERFILE2->BASEFAC
|
|
IF MPERCENT = 0
|
|
ERR_BOX( ' CANNOT find all ROW or COLUMN Information ', ;
|
|
' for Model ' + TRIM(MFILE) + ' Customer ' + PR_CUSTID, ;
|
|
' and the % of DEALER was 0.00 ', ;
|
|
' Please Set them up in CUSTOMER PRICING')
|
|
RETURN
|
|
ENDIF
|
|
ELSE
|
|
SELECT PRODUCT
|
|
DO CASE
|
|
CASE NCHOICE = 2
|
|
MPERCENT = SD_BASEFAC
|
|
|
|
CASE NCHOICE = 3
|
|
MPERCENT = BU_BASEFAC
|
|
|
|
CASE NCHOICE = 4
|
|
MPERCENT = LU_BASEFAC
|
|
|
|
CASE NCHOICE = 5
|
|
MPERCENT = DI_BASEFAC
|
|
|
|
CASE NCHOICE = 6
|
|
MPERCENT = IN_BASEFAC
|
|
|
|
ENDCASE
|
|
CORRECT := .F.
|
|
DO WHILE !CORRECT
|
|
@ 10,10 SAY 'Dealer Price Percentage' GET MPERCENT PICTURE '999.9999'
|
|
READ()
|
|
IF LASTKEY() = 27
|
|
CORRECT := .T.
|
|
EXIT
|
|
ENDIF
|
|
CORR := CORRCHEK()
|
|
IF CORR = 'N'
|
|
LOOP
|
|
ELSE
|
|
CORRECT := .T.
|
|
IF CORR = 'Y'
|
|
SELECT PRODUCT
|
|
REC_LOCK(1)
|
|
DO CASE
|
|
CASE NCHOICE = 2
|
|
REPLACE SD_BASEFAC WITH MPERCENT
|
|
CASE NCHOICE = 3
|
|
REPLACE BU_BASEFAC WITH MPERCENT
|
|
CASE NCHOICE = 4
|
|
REPLACE LU_BASEFAC WITH MPERCENT
|
|
CASE NCHOICE = 5
|
|
REPLACE DI_BASEFAC WITH MPERCENT
|
|
CASE NCHOICE = 6
|
|
REPLACE IN_BASEFAC WITH MPERCENT
|
|
END CASE
|
|
UNLOCK
|
|
ENDIF
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
LOOP
|
|
ENDIF
|
|
ENDIF
|
|
// IF IT GOT THIS FAR THEN IT'S GOING TO BE A PRICE TABLE
|
|
// NEED TO ZERO OUT ANY OLD PERCENTAGE AMOUNT FOR THIS TYPE
|
|
SELECT PRODUCT
|
|
REC_LOCK(1)
|
|
DO CASE
|
|
CASE NCHOICE = 2
|
|
REPLACE SD_BASEFAC WITH 0
|
|
|
|
CASE NCHOICE = 3
|
|
REPLACE BU_BASEFAC WITH 0
|
|
|
|
CASE NCHOICE = 4
|
|
REPLACE LU_BASEFAC WITH 0
|
|
|
|
CASE NCHOICE = 5
|
|
REPLACE DI_BASEFAC WITH 0
|
|
|
|
CASE NCHOICE = 6
|
|
REPLACE IN_BASEFAC WITH 0
|
|
|
|
END CASE
|
|
UNLOCK
|
|
|
|
SELECT (FILE2)
|
|
COL_ARR := {}
|
|
|
|
FOR L = 1 TO LEN(C_ARR)
|
|
AADD(COL_ARR, {}) // MAKE ARRAY BUCKET FOR CURRENT ATTRIBUTE
|
|
|
|
IF !EMPTY(PR_CUSTID)
|
|
CHK_BLOCK = {|| CUST_ID + PROD_CODE + ATT_CODE}
|
|
SELECT CUST_OPTS
|
|
FILE2 = 'CUST_OPTS'
|
|
SEEKKEY = PR_CUSTID + MPROD_CODE[1] + C_ARR[L]
|
|
SEEK SEEKKEY
|
|
ENDIF
|
|
IF EMPTY(PR_CUSTID) .OR. !FOUND()
|
|
// CHECK PRODUCT LEVEL NEXT
|
|
SELECT PROD_OPTS
|
|
CHK_BLOCK = {|| PROD_OPTS->PROD_CODE + PROD_OPTS->ATT_CODE}
|
|
|
|
SEEKKEY = MPROD_CODE[1] + C_ARR[L] // MODEL + ATTRIBUTE
|
|
SEEK SEEKKEY
|
|
|
|
IF !FOUND()
|
|
// CHECK CATEGORY LEVEL NEXT
|
|
SELECT CAT_OPTS
|
|
SEEKKEY = PRODUCT->CAT_CODE + C_ARR[L] // CAT CODE + ATTRIBUTE
|
|
SEEK SEEKKEY
|
|
CHK_BLOCK = {|| CAT_OPTS->CAT_CODE + CAT_OPTS->ATT_CODE}
|
|
ENDIF
|
|
|
|
IF !FOUND()
|
|
// CHECK ATTRIBUTE LEVEL NEXT
|
|
SELECT ATT_OPTS
|
|
SEEKKEY = C_ARR[L] // ATTRIBUTE
|
|
SEEK SEEKKEY
|
|
CHK_BLOCK = {|| ATT_OPTS->ATT_CODE}
|
|
ENDIF
|
|
ENDIF
|
|
DO WHILE SEEKKEY == EVAL(CHK_BLOCK) .AND. !EOF()
|
|
AADD(COL_ARR[L], ALLTRIM(OPT_VALUE) )
|
|
SKIP 1
|
|
ENDDO
|
|
NEXT
|
|
// IF EMPTY COL_ARR, DO MESSAGE THEN RETURN
|
|
LOOPKEY = .F.
|
|
FOR L = 1 TO LEN(COL_ARR)
|
|
IF EMPTY(COL_ARR[L])
|
|
ERR_BOX( ' CANNOT find COLUMN OPTION Info' , ;
|
|
' for the ' + TRIM(MFILE) + ' Model! ', ;
|
|
' Please Set them up in DEFAULT OPTIONS')
|
|
LOOPKEY = .T.
|
|
IF EMPTY(PR_CUSTID)
|
|
LOOP
|
|
ELSE
|
|
RETURN
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
IF LOOPKEY
|
|
LOOP
|
|
ENDIF
|
|
|
|
ROW_ARR := {}
|
|
FOR L = 1 TO LEN(R_ARR)
|
|
AADD(ROW_ARR, {}) // MAKE ARRAY BUCKET FOR CURRENT ATTRIBUTE
|
|
|
|
IF !EMPTY(PR_CUSTID)
|
|
CHK_BLOCK = {|| CUST_ID + PROD_CODE + ATT_CODE}
|
|
SELECT CUST_OPTS
|
|
FILE2 = 'CUST_OPTS'
|
|
SEEKKEY = PR_CUSTID + MPROD_CODE[1] + R_ARR[L]
|
|
SEEK SEEKKEY
|
|
ENDIF
|
|
IF EMPTY(PR_CUSTID) .OR. !FOUND()
|
|
// CHECK IT AT THE PRODUCT LEVEL
|
|
SELECT PROD_OPTS
|
|
DONSETORD(1) // PROD_CODE + ATT_CODE
|
|
CHK_BLOCK = {|| PROD_OPTS->PROD_CODE + PROD_OPTS->ATT_CODE}
|
|
|
|
SEEKKEY = MPROD_CODE[1] + R_ARR[L]
|
|
SEEK SEEKKEY
|
|
IF !FOUND()
|
|
// CHECK IT AT THE CATEGORY LEVEL
|
|
SELECT CAT_OPTS
|
|
DONSETORD(1) // CAT_CODE + ATT_CODE
|
|
SEEKKEY = PRODUCT->CAT_CODE + R_ARR[L] // CAT ATTT + ATTRIBUTE
|
|
SEEK SEEKKEY
|
|
CHK_BLOCK = {|| CAT_OPTS->CAT_CODE + CAT_OPTS->ATT_CODE}
|
|
ENDIF
|
|
IF !FOUND()
|
|
// CHECK ATTRIBUTE LEVEL NEXT
|
|
SELECT ATT_OPTS
|
|
SEEKKEY = R_ARR[L] // ATTRIBUTE
|
|
SEEK SEEKKEY
|
|
CHK_BLOCK = {|| ATT_OPTS->ATT_CODE}
|
|
ENDIF
|
|
ENDIF
|
|
|
|
DO WHILE SEEKKEY == EVAL(CHK_BLOCK) .AND. !EOF()
|
|
AADD(ROW_ARR[L], ALLTRIM(OPT_VALUE) )
|
|
SKIP 1
|
|
ENDDO
|
|
NEXT
|
|
// IF EMPTY ROW_ARR, DO MESSAGE THEN RETURN
|
|
LOOPKEY = .F.
|
|
FOR L = 1 TO LEN(ROW_ARR)
|
|
IF EMPTY(ROW_ARR[L])
|
|
ERR_BOX( ' CANNOT find ROW OPTION Info' , ;
|
|
' for the ' + TRIM(MFILE) + ' Model! ', ;
|
|
' Please Set them up in DEFAULT OPTIONS')
|
|
LOOPKEY = .T.
|
|
LOOP
|
|
ENDIF
|
|
NEXT
|
|
IF LOOPKEY
|
|
LOOP
|
|
ENDIF
|
|
|
|
// BUILD FIELD LIST
|
|
FLD_ARR := {}
|
|
AADD(FLD_ARR, {'DESC', DESC_SIZE, 'C', 0}) // ADD REQUIRED FIELD FIRST!
|
|
FOR L = 1 TO LEN(COL_ARR)
|
|
FOR L2 = 1 TO LEN(COL_ARR[L])
|
|
VAR = COL_ARR[L,L2]
|
|
VAR = STRTRAN(ALLTRIM(VAR), ' ', '_')
|
|
VAR = STRTRAN(VAR, '-', '_')
|
|
|
|
// NO NUMERICS IN FIRST CHARACTER!
|
|
IF ISDIGIT(LEFT(VAR,1))
|
|
VAR = 'V' + VAR
|
|
ENDIF
|
|
|
|
// VAR CAN'T BE LONGER THAN 10 BYTES!!!
|
|
VAR = LEFT(VAR+SPACE(10), 10)
|
|
|
|
AADD(FLD_ARR, {VAR, 7, 'N', 2 } )
|
|
NEXT
|
|
NEXT
|
|
AADD(FLD_ARR, {'COL_HEAD1', 15, 'C', 0}) // ADD REQUIRED FIELD FIRST!
|
|
AADD(FLD_ARR, {'COL_HEAD2', 15, 'C', 0}) // ADD REQUIRED FIELD FIRST!
|
|
AADD(FLD_ARR, {'COL_HEAD3', 15, 'C', 0}) // ADD REQUIRED FIELD FIRST!
|
|
AADD(FLD_ARR, {'CUST_ID', 8, 'C', 0}) // ADD REQUIRED FIELD FIRST!
|
|
AADD(FLD_ARR, {'DATE_STAMP', 8, 'D', 0}) // ADD REQUIRED FIELD FIRST!
|
|
AADD(FLD_ARR, {'TIME_STAMP', 5, 'C', 0}) // ADD REQUIRED FIELD FIRST!
|
|
AADD(FLD_ARR, {'USER_STAMP', 8, 'C', 0}) // ADD REQUIRED FIELD FIRST!
|
|
AADD(FLD_ARR, {'UPDATED', 1, 'C', 0}) // ADD REQUIRED FIELD FIRST!
|
|
|
|
NUMVARS := LEN(ROW_ARR)
|
|
|
|
// SET UP THE 'DESC' FIELD VALUES
|
|
DESC_ARR := {}
|
|
ROWVARS := {}
|
|
CURVAL := {}
|
|
NUM_2_DO = 1
|
|
FOR I = 1 TO NUMVARS // IE 3 ROW VARIABLES
|
|
NUM_2_DO = NUM_2_DO * LEN(ROW_ARR[I]) // IE 2 VALUES OF EACH VARIABLE
|
|
AADD(ROWVARS, LEN(ROW_ARR[I]) ) // IE # VALUES FOR THIS ATTRIBUTE
|
|
AADD(CURVAL, 1) // IE CURRENT VALUE POINTER FOR THIS ATTRIBUTE
|
|
NEXT
|
|
|
|
FOR L = 1 TO NUM_2_DO // CREATE EMPTY ARRAY
|
|
AADD(DESC_ARR, '')
|
|
NEXT
|
|
|
|
// MAKE ONE DESCVAR FOR EACH COMBINATION OF ALL ELEMENTS
|
|
// IE. FACTORIAL(ROW_ARR)
|
|
|
|
VARYPOS := NUMVARS
|
|
POINTER := 0
|
|
FOR I := 1 TO NUM_2_DO / ROWVARS[NUMVARS] // IE 3 ATTRIBUTES
|
|
FOR II := 1 TO ROWVARS[NUMVARS] // IE 2 CHOICES EACH ATTRIB
|
|
POINTER ++
|
|
CURVAL[NUMVARS] := II
|
|
DESC_ARR[POINTER] := BLD_PRICE_LINE(ROW_ARR, CURVAL )
|
|
NEXT
|
|
FOR III := NUMVARS-1 TO 1 STEP -1
|
|
IF CURVAL[III] < ROWVARS[III]
|
|
CURVAL[III] ++
|
|
EXIT
|
|
ELSE
|
|
CURVAL[III] := 1
|
|
ENDIF
|
|
NEXT
|
|
NEXT
|
|
AADD(ALL_PR_ARR, {REAL_FILE, FLD_ARR, MFILE, DESC_ARR, PR_CUSTID} )
|
|
ENDIF
|
|
|
|
DIFFERENT = .F.
|
|
REAL_FILE = STRTRAN(ALLTRIM(MFILE), ' ', '_')
|
|
REAL_FILE = STRTRAN(REAL_FILE, '-', '_')
|
|
REAL_FILE = MPRICE_SHEET + REAL_FILE
|
|
IF CPRICENUM = NIL
|
|
REAL_FILE = REAL_FILE + '.DBF'
|
|
ELSE
|
|
REAL_FILE = REAL_FILE + '.' + CPRICENUM
|
|
ENDIF
|
|
** IF !FILE(REAL_FILE + '.DBF')
|
|
IF !FILE(REAL_FILE )
|
|
NEWFILE = .T.
|
|
ELSE
|
|
// SEE IF STRUCTURE HAS CHANGED
|
|
NEWFILE = .F.
|
|
DIFFERENT = .F.
|
|
SET EXACT ON
|
|
NET_USE(REAL_FILE, .T., 5, 'REAL_FILE')
|
|
OLDDBF_ARR = ASORT(DBSTRUCT(),,, {|X,Y| X[1] < Y[1]}) // GET OLD STRUCTURE
|
|
NEWDBF_ARR = ASORT(ACLONE(FLD_ARR),,, {|X,Y| X[1] < Y[1]})
|
|
IF LEN(OLDDBF_ARR) <> LEN(NEWDBF_ARR)
|
|
DIFFERENT = .T.
|
|
ELSE
|
|
FOR L = 1 TO LEN(OLDDBF_ARR)
|
|
IF OLDDBF_ARR[L,1] <> NEWDBF_ARR[L,1]
|
|
DIFFERENT = .T.
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
|
|
// SEE IF THE 'DESC' FIELD VALUES HAVE CHANGED!
|
|
OLDDESC_ARR := {}
|
|
DO WHILE !EOF()
|
|
AADD(OLDDESC_ARR, ALLTRIM(DESC) )
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
IF LEN(OLDDESC_ARR) <> LEN(DESC_ARR)
|
|
DIFFERENT = .T.
|
|
ELSE
|
|
FOR L = 1 TO LEN(OLDDESC_ARR)
|
|
IF PADR(OLDDESC_ARR[L],DESC_SIZE) = PADR(DESC_ARR[L],DESC_SIZE)
|
|
ELSE
|
|
DIFFERENT = .T.
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
SET EXACT OFF
|
|
|
|
IF DIFFERENT
|
|
IF PROMPT_BOX ('PRICE TABLE &/or OPTS for - ' + ALLTRIM(MFILE) + ' '+ ;
|
|
'Have Possibly Changed!', ; //** P3N - 3/08/00
|
|
'"YES" TO USE THE EXISTING ' + REAL_FILE, ; //** P3N - 3/08/00
|
|
'To RESTORE ORIGINAL FILE - copy '+ ; //** P3N - 3/08/00
|
|
ALLTRIM(PREFIX) + '.OLD to ' + REAL_FILE, 1) //** P3N - 3/08/00
|
|
SELECT REAL_FILE //** P3N - 3/08/00
|
|
DIFFERENT := .F. //** P3N - 3/08/00
|
|
FLD_ARR := DBSTRUCT() //** GET CURRENT STRUCTURE INFO
|
|
IF FILE(PREFIX+'.OLD') //** P3N - 12/27/01
|
|
ERASE(PREFIX+'.OLD') //** P3N - 12/27/01
|
|
ENDIF //** P3N - 12/27/01
|
|
ALL_PR_ARR := {} //** P3N - 12/27/01
|
|
ELSE //** P3N - 03/08/00
|
|
SELECT REAL_FILE
|
|
USE
|
|
?? CHR(7)
|
|
ERR_BOX( ' WARNING! The Pricing File for the ' + MFILE +' ', ;
|
|
' Model has Changed! Some PRICES May Be LOST!', ;
|
|
' Press <ESC> to QUIT, or any other to continue.')
|
|
IF LASTKEY() = 27
|
|
RETURN
|
|
ENDIF
|
|
ENDIF //** P3N - 03/08/00
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NEWFILE .OR. DIFFERENT
|
|
IF DIFFERENT
|
|
NET_USE(REAL_FILE, .T., 5, 'REAL_FILE')
|
|
COPY TO &USERFILEX
|
|
COPYTO := ALLTRIM(PREFIX) + '.OLD'
|
|
COPY TO ©TO
|
|
USE
|
|
NET_USE(USERFILEX, .T., 5, 'TEMP_FILE')
|
|
ENDIF
|
|
|
|
CREATE_DBF(REAL_FILE, FLD_ARR)
|
|
NET_USE(REAL_FILE, .T., 5, 'REAL_FILE')
|
|
|
|
// LOAD THE ROW DESC RECORDS
|
|
NUM_ELEMS = LEN(DESC_ARR)
|
|
FOR L = 1 TO NUM_ELEMS
|
|
ADD_REC(3)
|
|
REPLACE DESC WITH DESC_ARR[L]
|
|
NEXT
|
|
|
|
IF DIFFERENT
|
|
SELECT REAL_FILE
|
|
GOTO TOP
|
|
DO WHILE !EOF()
|
|
SELECT TEMP_FILE
|
|
LOCATE FOR ALLTRIM(DESC) == ALLTRIM(REAL_FILE->DESC)
|
|
IF FOUND()
|
|
REP_ONEREC('TEMP_FILE', 'REAL_FILE')
|
|
ENDIF
|
|
SELECT REAL_FILE
|
|
SKIP 1
|
|
ENDDO
|
|
SELECT TEMP_FILE
|
|
USE
|
|
SELECT REAL_FILE
|
|
GOTO TOP
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
// DBROWSE WITH UPDATE ON CURRENT FILE
|
|
TBARR := {}
|
|
NTOP = 5
|
|
NLEFT = 1
|
|
NRIGHT = 78
|
|
NBOTTOM = 20
|
|
|
|
P1 = 'Description'
|
|
P2 = 'DESC'
|
|
P3 = NIL
|
|
P4 = 30
|
|
AADD(TBARR, {P1, P2, P3, P4})
|
|
|
|
FOR L = 2 TO LEN(FLD_ARR)
|
|
IF FLD_ARR[L,1] <> 'UPDATED' .AND. FLD_ARR[L,1] <> 'CUST_ID'
|
|
P1 = ALLTRIM(FLD_ARR[L,1])
|
|
P2 = FLD_ARR[L,1]
|
|
P3 = 'REAL_FILE'
|
|
P5 = 'CK_PR_CHG()'
|
|
IF RIGHT(FLD_ARR[L,1],5) = 'STAMP' // AUDIT STAMPS
|
|
P7 = '.F.'
|
|
ELSE
|
|
P7 = NIL
|
|
ENDIF
|
|
AADD(TBARR, {P1, P2, P3, NIL, P5})
|
|
ENDIF
|
|
NEXT
|
|
|
|
////////////////////////////////////////////////////////////
|
|
OLD_MFILE = MFILE // SAVE IT IN CASE WE HAVE TO DO IT AGAIN
|
|
OLD_PRICE_CD = MPRICE_SHEET
|
|
|
|
@ 0,0
|
|
TOPHEADING := {}
|
|
GOTO TOP
|
|
IF EMPTY(CPRICENUM) //P3N - 2-5-98
|
|
XTITLE := TITLE + ' ' + PRODUCT->PROD_CODE
|
|
ELSE
|
|
XTITLE := TITLE + ' ' + CPRICENUM
|
|
ENDIF
|
|
DO WHILE .T.
|
|
BROWINST(XTITLE + ' ' + MSG, 'PRPO')
|
|
DBROWSE(NTOP,NLEFT,NBOTTOM,NRIGHT,.F.,TBARR,1,.F.,TOPHEADING)
|
|
@ 21,0 CLEAR
|
|
CORR = CORRCHEK()
|
|
IF CORR <> 'N' .OR. LASTKEY() = 27
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
SELECT REAL_FILE
|
|
IF !EMPTY(PR_CUSTID) // ONE TIME THRU FOR SPEC CUST PRICING
|
|
REPLACE ALL CUST_ID WITH PR_CUSTID
|
|
USE
|
|
RETURN
|
|
ELSE
|
|
USE // CLOSE THE MFILE
|
|
ENDIF
|
|
ENDDO
|
|
ENDDO
|
|
|
|
RETURN
|
|
//*******************************************************************
|
|
//** P3N - 2/26/99
|
|
//** F2-CUST PRICE HOTKEY TO REMOVE PRICE TABLE
|
|
//*******************************************************************
|
|
FUNCTION REMOVE_CUSTPR()
|
|
LOCAL CUSTID := USERFILE2->CUST_ID
|
|
LOCAL MPROD := USERFILE2->PROD_CODE
|
|
LOCAL MTITLE := 'Select CUSTOMER to Copy Pricing for Customer ' + ALLTRIM(CUSTID) + '/'+ALLTRIM(MPROD)
|
|
LOCAL FILE_CP := 'U'+ ALLTRIM(USERFILE2->PROD_CODE)
|
|
LOCAL FILE_CP_SFX := '', PRICEFL := '', ORIGPRFL := ''
|
|
LOCAL M1 := 'Are you sure you want to remove pricing for this Customer/Model?'
|
|
LOCAL M2 := ' '
|
|
LOCAL M3 := 'Customer - ' + CUSTID + '/'
|
|
LOCAL CPRICENUM := CUST_MAST->CPRICE_NUM
|
|
FILE_CP_SFX := STR(CPRICENUM,3)
|
|
FILE_CP_SFX := STRTRAN(FILE_CP_SFX, ' ', '0')
|
|
PRICEFL := FILE_CP +'.'+FILE_CP_SFX
|
|
IF FILE(PRICEFL)
|
|
M3 := M3 + PRICEFL
|
|
IF PROMPT_BOX(M1, M2, M3)
|
|
ERASE(PRICEFL)
|
|
ENDIF
|
|
ENDIF
|
|
RETURN
|
|
***************************************************************
|
|
FUNCTION CK_PR_CHG()
|
|
LOCAL GETO := GETACTIVE()
|
|
|
|
IF GETO:CHANGED
|
|
AUDIT_STAMP( "PRICETABLE" )
|
|
ENDIF
|
|
RETURN .T.
|
|
|
|
***************************************************************
|
|
FUNCTION BLD_PRICE_LINE(ROWARR, CURVARS)
|
|
LOCAL I, RETVAL
|
|
|
|
FOR I = 1 TO LEN(ROWARR)
|
|
IF RETVAL = NIL
|
|
RETVAL := ''
|
|
ELSE
|
|
RETVAL := RETVAL + '-'
|
|
ENDIF
|
|
RETVAL := RETVAL + ALLTRIM(ROWARR[I,CURVARS[I]])
|
|
NEXT
|
|
|
|
RETURN RETVAL
|
|
|
|
***************************************************************
|
|
FUNCTION COPY_OPTS(WHICH_OPT_FILE, WHICH_FILE)
|
|
LOCAL SAVESEL := SELECT(), SAVEFILT
|
|
LOCAL SAVEORD, MAC, FILTEXP, SEEKKEY, MACX, NEWMSG
|
|
LOCAL FILTX
|
|
LOCAL NEWCUST := .F. //** P3N - 12/27/01
|
|
PRIVATE CPYCUST := GETAVAR('CPYCUST') //** P3N - 12/27/01
|
|
PRIVATE ITEMCATCODE
|
|
|
|
IF EMPTY(CPYCUST) //** P3N - 12/27/01
|
|
CPYCUST := '' //** P3N - 12/27/01
|
|
ENDIF //** P3N - 12/27/01
|
|
SELECT USERFILE1
|
|
IF RECCOUNT() > 0
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
SELECT (WHICH_OPT_FILE) //CAT_OPTS OR ATT_OPTS
|
|
SAVEORD := INDEXORD()
|
|
SAVEFILT := DBFILTER()
|
|
// CALLED FROM PRODUCT SETUP
|
|
IF WHICH_FILE = 'PROD_OPTS' // 1ST, LOOK AT CATEGORY OPTS - 2ND TIME THRU
|
|
SEEKKEY := 'USERFILE2->ATT_CODE'
|
|
IF WHICH_OPT_FILE = 'CAT_OPTS' // CATEGORY OPTS TO PRODUCT OPTS
|
|
****SET FILTER TO CAT_CODE = PRODUCT->CAT_CODE
|
|
FILTEXP := 'CAT_CODE = PRODUCT->CAT_CODE'
|
|
DONSETORD(2) // ATT_CODE + OPTION
|
|
NEWMSG := 'CATEGORY'
|
|
ELSE
|
|
IF WHICH_OPT_FILE = 'ATT_OPTS' // ATTRIBUTE OPTS TO PRODUCT OPTS
|
|
** SET FILTER TO ATT_CODE = USERFILE2->ATT_CODE
|
|
FILTEXP := 'ATT_CODE = USERFILE2->ATT_CODE'
|
|
DONSETORD(1) // ATT_CODE + OPTION
|
|
NEWMSG := 'SYSTEM ATTRIBUTE'
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF WHICH_FILE = 'CAT_OPTS' // ATTRIBUTE OPTS TO CATEGOTY OPTS
|
|
SEEKKEY := 'USERFILE2->ATT_CODE'
|
|
** SET FILTER TO ATT_CODE = USERFILE2->ATT_CODE
|
|
FILTEXP := 'ATT_CODE = USERFILE2->ATT_CODE'
|
|
DONSETORD(1) // ATT_CODE + OPTION
|
|
NEWMSG := 'ATTRIBUTE'
|
|
ELSE
|
|
IF WHICH_FILE = 'CUST_OPTS' // CALLED FROM CUSTOMER PRICING SETUP
|
|
NEWCUST := .F. //** P3N - 12/27/01
|
|
FILTEXP := '' //** P3N - 12/27/01
|
|
SEEKKEY := CPYCUST + USERFILE3->PROD_CODE + USERFILE3->ATT_CODE
|
|
IF (WHICH_FILE)->(DBSEEK(SEEKKEY)) //** P3N - 12/27/01
|
|
SELECT(WHICH_FILE) //** P3N - 12/27/01
|
|
NEWCUST := .T. //** P3N - 12/27/01
|
|
ENDIF //** P3N - 12/27/01
|
|
SEEKKEY := 'USERFILE3->ATT_CODE'
|
|
IF WHICH_OPT_FILE = 'PROD_OPTS' // CATEGORY OPTS TO CUST_OPTS
|
|
** SET FILTER TO PROD_CODE = USERFILE3->PROD_CODE
|
|
NEWMSG := 'PRODUCT'
|
|
IF NEWCUST //** P3N - 12/27/01
|
|
NEWMSG := 'CUSTOMER' //** P3N - 12/27/01
|
|
FILTEXP := 'CUST_ID == CPYCUST .AND. ' //** P3N - 12/27/01
|
|
ENDIF //** P3N - 12/27/01
|
|
FILTEXP := FILTEXP + 'PROD_CODE = USERFILE3->PROD_CODE'
|
|
//** FILTEXP := 'PROD_CODE = USERFILE3->PROD_CODE'
|
|
DONSETORD(2) // ATT_CODE + OPTION
|
|
ELSEIF WHICH_OPT_FILE = 'CAT_OPTS' // CATEGORY OPTS TO CUST_OPTS
|
|
********* SET FILTER TO CAT_CODE = ITEMCATCODE
|
|
ITEMCATCODE := GET_CATCODE(USERFILE3->PROD_CODE)
|
|
NEWMSG := 'CATEGORY'
|
|
IF NEWCUST //** P3N - 12/27/01
|
|
NEWMSG := 'CUSTOMER' //** P3N - 12/27/01
|
|
FILTEXP := 'CUST_ID == CPYCUST .AND. ' //** P3N - 12/27/01
|
|
ENDIF //** P3N - 12/27/01
|
|
FILTEXP := FILTEXP + 'CAT_CODE = ITEMCATCODE' //** P3N - 12/27/01
|
|
//** FILTEXP := 'CAT_CODE = ITEMCATCODE'
|
|
DONSETORD(2) // ATT_CODE + OPTION
|
|
ELSEIF WHICH_OPT_FILE = 'ATT_OPTS' // ATTRIBUTE OPTS TO CUST_OPTS
|
|
**********SET FILTER TO ATT_CODE = USERFILE3->ATT_CODE
|
|
NEWMSG := 'SYSTEM ATTRIBUTE'
|
|
IF NEWCUST //** P3N - 12/27/01
|
|
NEWMSG := 'CUSTOMER' //** P3N - 12/27/01
|
|
FILTEXP := 'CUST_ID == CPYCUST .AND. ' //** P3N - 12/27/01
|
|
ENDIF //** P3N - 12/27/01
|
|
FILTEXP := FILTEXP + 'ATT_CODE = USERFILE3->ATT_CODE'
|
|
DONSETORD(1) // ATT_CODE + OPTION
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
MAC := 'ATT_CODE == ' + SEEKKEY
|
|
SEEKKEY := &SEEKKEY
|
|
SEEK SEEKKEY
|
|
|
|
** MACX := &('{|| ' + MAC + '}')
|
|
|
|
MACX := MAKE_BLOCK(MAC)
|
|
FILTX := MAKE_BLOCK(FILTEXP)
|
|
DO WHILE EVAL(MACX)
|
|
IF EVAL( FILTX )
|
|
__WHEREFROM := NEWMSG
|
|
SELECT USERFILE1
|
|
IF NEWCUST //** P3N - 12/27/01
|
|
ADD_ONEREC(WHICH_FILE, 'USERFILE1' ) //** CUST_OPTS
|
|
ELSE //** P3N -12/27/01
|
|
ADD_ONEREC(WHICH_OPT_FILE, 'USERFILE1' )
|
|
ENDIF //** P3N -12/27/01
|
|
ENDIF
|
|
SELECT (WHICH_OPT_FILE) //CAT_OPTS OR ATT_OPTS
|
|
IF NEWCUST //** P3N - 12/27/01
|
|
SELECT(WHICH_FILE) //** P3N - 12/27/01 CUST_OPTS
|
|
ENDIF //** P3N - 12/27/01
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
DONSETORD(SAVEORD)
|
|
SET FILTER TO &SAVEFILT
|
|
SELECT (SAVESEL)
|
|
RETURN .T.
|
|
|
|
****************************************************
|
|
****************************************************
|
|
FUNCTION CAT_PAINT
|
|
// PUT COLUMN HEADING ON SCREEN FOR PRODUCTION INFO
|
|
|
|
LOCAL SAVECOLOR := SETCOLOR(HNOR)
|
|
@ 11,1 SAY 'Conversion'
|
|
@ 12,1 SAY '--------------------'
|
|
@ 11,23 SAY 'Width'
|
|
@ 12,23 SAY '--------'
|
|
@ 11,34 SAY 'Height'
|
|
@ 12,34 SAY '--------'
|
|
SETCOLOR(SAVECOLOR)
|
|
RETURN NIL
|
|
|
|
****************************************************
|
|
** P3N - 02/13/04 **
|
|
****************************************************
|
|
FUNCTION CATPAINT2()
|
|
// PUT DOUBLE SPACING ORDER OPTIONS INFO ON SCREEN FOR CATEGORY SETUP
|
|
|
|
LOCAL SAVECOLOR := SETCOLOR(HNOR)
|
|
@ 13,25 SAY '(Select Order Double Spacing Options)'
|
|
@ 14,07 SAY '-----------------------------------------------------------------------'
|
|
@ 15,34 SAY '( "F" Frame/"G" Glass/"S" Screen/"R" GoldRod )'
|
|
@ 16,34 SAY '( "D" Delivery/"O" OrderDesk /"I" ICO )'
|
|
@ 17,34 SAY '( "I" Invoice/"B" PreBill/"C" PreCost )'
|
|
@ 18,34 SAY '( "Y" Yes )'
|
|
SETCOLOR(SAVECOLOR)
|
|
RETURN NIL
|
|
|
|
****************************************************
|
|
FUNCTION GET_ORD_NUM(SCRNUM, CHGTYPE)
|
|
// GENERATE A NUMBER FOR A NEW ORDER
|
|
|
|
LOCAL SAVESEL, MSG1, MORDER_NUM, NKEY
|
|
LOCAL LAST_GOOD_ORD, OLDCOLOR
|
|
LOCAL CLOSECTL := .T. //** P3N - 6/25/98
|
|
|
|
F5ORD := 0 //** P3N - 3/9/00
|
|
|
|
IF CHGTYPE <> NIL .AND. CHGTYPE = 'MANUAL'
|
|
**IF _CUROPT = 2 // CHANGE
|
|
RETURN '?'
|
|
ENDIF
|
|
|
|
IF SELECT('USERFILE8') = 0 .AND. SCRNUM <> 'QCNV'
|
|
RETURN .T.
|
|
ENDIF
|
|
SAVESEL := SELECT()
|
|
|
|
NKEY = NEXTKEY()
|
|
IF NKEY = ASC('Y') .OR. NKEY = ASC('y') .OR. NKEY = 19 // LEFT ARROW KEY
|
|
ELSE
|
|
CLEAR TYPEAHEAD
|
|
ENDIF
|
|
|
|
IF CUR_MAST = 'ORD_MAST'
|
|
MSG1 := ' ADD New Sales ORDER? '
|
|
ELSE
|
|
OLDCOLOR := SETCOLOR(BLOW)
|
|
@ 05,13 SAY ' '
|
|
@ 06,13 SAY ' * * * * Q U O T E P R O C E S S I N G * * * * '
|
|
@ 07,13 SAY ' '
|
|
SETCOLOR(OLDCOLOR)
|
|
MSG1 := ' ADD New Sales QUOTE? '
|
|
ENDIF
|
|
IF SELECT('CONTROL') > 0 //** P3N - 6/25/98
|
|
CLOSE CONTROL
|
|
CLOSECTL := .F.
|
|
ENDIF
|
|
IF SCRNUM == 'QCNV'
|
|
DBOPEN('CONTROL')
|
|
REC_LOCK()
|
|
MORDER_NUM = STR( (VAL(ORDER_NUM) + 1),6) // GET NEW ORDER NUMBER
|
|
REPLACE ORDER_NUM WITH MORDER_NUM
|
|
USE
|
|
ELSE
|
|
IF PROMPT_BOX(MSG1,'','',1) // ASKS YES/NO, YES = .T., NO = .F.
|
|
DBOPEN('CONTROL')
|
|
REC_LOCK()
|
|
IF CUR_MAST = 'ORD_MAST'
|
|
MORDER_NUM = STR( (VAL(ORDER_NUM) + 1),6) // GET NEW ORDER NUMBER
|
|
REPLACE ORDER_NUM WITH MORDER_NUM
|
|
ELSE
|
|
MORDER_NUM = STR( (VAL(QUOTE_NUM) + 1),6) // GET NEW QUOTE NUMBER
|
|
REPLACE QUOTE_NUM WITH MORDER_NUM
|
|
ENDIF
|
|
USE
|
|
ELSE
|
|
MORDER_NUM = SPACE(6) // MAKE IT EMPTY
|
|
ENDIF
|
|
ENDIF
|
|
IF CLOSECTL //** P3N - 6/25/98
|
|
//** SHOULD ALREADY BE CLOSED
|
|
ELSE
|
|
DBOPEN('CONTROL')
|
|
ENDIF
|
|
SELECT(SAVESEL)
|
|
@ 10,0
|
|
RETURN MORDER_NUM
|
|
|
|
************************************************************
|
|
// RESET CONTROL FILE IF SOMEONE ESCAPED SOMEWHERE FROM NEW ORDER
|
|
FUNCTION RESET_CNTL(WHICHNUM)
|
|
LOCAL SAVESEL := SELECT()
|
|
|
|
IF WHICHNUM = 'ORDER'
|
|
DBOPEN('CONTROL')
|
|
REC_LOCK(1)
|
|
REPLACE ORDER_NUM WITH STR( VAL(ORDER_NUM) - 1, 6)
|
|
USE
|
|
ELSE
|
|
IF NEWREC
|
|
IF CUR_MAST = 'ORD_MAST'
|
|
DBOPEN('CONTROL')
|
|
REC_LOCK(1)
|
|
IF (CUR_MAST)->ORDER_NUM = ORDER_NUM
|
|
REPLACE ORDER_NUM WITH STR( VAL(ORDER_NUM) - 1, 6)
|
|
ENDIF
|
|
USE
|
|
ELSE
|
|
DBOPEN('CONTROL')
|
|
REC_LOCK(1)
|
|
IF (CUR_MAST)->ORDER_NUM = QUOTE_NUM
|
|
REPLACE QUOTE_NUM WITH STR( VAL(QUOTE_NUM) - 1, 6)
|
|
ENDIF
|
|
USE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SELECT (SAVESEL)
|
|
|
|
RETURN
|
|
*
|
|
****************************************************
|
|
FUNCTION UP_OM_NEED_CALC()
|
|
SELECT (CUR_MAST)
|
|
REC_LOCK(3)
|
|
REPLACE NEED_CALC WITH 'N'
|
|
UNLOCK
|
|
SELECT USERFILE2
|
|
RETURN .T.
|
|
|
|
****************************************************
|
|
FUNCTION GET_LINEOPTS(MCODE, PACTION, UP_RECNO, ADDL_MODE)
|
|
// GET LINE OPTIONS FOR MODEL MCODE
|
|
|
|
|
|
LOCAL FILE1, FILE2, DBNAME, GET_ARR := {}, OPT_ARR := {}, WORKVAR
|
|
LOCAL SAVESEL := SELECT(), NCURSOR := SETCURSOR(1)
|
|
LOCAL ROW, SAVESCRN1 := SAVESCREEN(), SAVESCRN
|
|
LOCAL MORDER_NUM := &CUR_MAST->ORDER_NUM, EXITKEY, THISTITLE
|
|
LOCAL MLINE_NUM, MPROD_CODE
|
|
LOCAL SAVEDELIM := SET(_SET_DELIMITERS, .F.)
|
|
LOCAL MSTD_OPTS := USERFILE2->STD_OPTS, MTYPE, GET_IT
|
|
LOCAL SAVEREC, PRICE_ARR := {}
|
|
LOCAL SAVECURSOR := SETCURSOR(), PACK_FLAG
|
|
LOCAL CUR_PRICE_VALU := USERFILE2->SALE_PRICE
|
|
LOCAL RETVAL, NDX_EXP, FOUND_FLAG
|
|
LOCAL PIRATE_VAR, INFINAL := .F., TTEDIT
|
|
LOCAL CUR_USER_REC, MIDDLE, XSTD_OPTS, REPLINE
|
|
LOCAL DISC_ARR := {}, F7CALC_PRICE := 0
|
|
LOCAL THIS_DISC_AMT := 0
|
|
LOCAL PR_CUSTID := SPACE(8), RETARR := {}, M_MODEL
|
|
LOCAL HM_VAR, HMERR := .F., HM_VAROUT:=""
|
|
|
|
STATIC P_CHGLIST := ''
|
|
STATIC O_CHGLIST := ''
|
|
STATIC STOP_SHOW := .F.
|
|
|
|
PRIVATE SGACTION := PACTION
|
|
PRIVATE _SELFILE := SELECT()
|
|
|
|
IF UP_RECNO = NIL
|
|
UP_RECNO := .F.
|
|
ENDIF
|
|
|
|
IF ADDL_MODE = NIL
|
|
ADDL_MODE := .F.
|
|
ENDIF
|
|
|
|
IF UP_RECNO
|
|
SELECT USERFILE2
|
|
REPLACE LINE_NUM WITH RECNO()
|
|
ENDIF
|
|
MLINE_NUM = STR(USERFILE2->LINE_NUM,3)
|
|
|
|
IF PROCNAME(1) = 'EDITGBROW' // F10 FINAL EDIT
|
|
INFINAL := .T.
|
|
ENDIF
|
|
|
|
IF RECNO() = 1
|
|
O_CHGLIST := '' // RESET CHANGED OPTION ITEMS
|
|
P_CHGLIST := '' // RESET CHANGED PRICE LINE ITEMS
|
|
STOP_SHOW := .F. // BE SURE STOP_SHOW ALWAYS FALSE
|
|
ENDIF // WHEN ENTERING THE PRICE FINAL EDIT
|
|
// ON 1ST RECORD
|
|
|
|
IF SGACTION = NIL
|
|
IF !_OC_CAPABLE .OR. GETAVAR('ACTION_CODE') <> 'ADD'
|
|
SGACTION = 'REV'
|
|
ENDIF
|
|
|
|
IF SGACTION = NIL
|
|
SGACTION = 'GET'
|
|
ENDIF
|
|
|
|
**SGACTION = 'GET'
|
|
ENDIF
|
|
|
|
IF PROCNAME(1) = 'EDITGBROW' .AND. USERFILE2->NEED_CALC = 'N' // DONT DO THE SYSTEM EDITS!
|
|
SET(_SET_DELIMITERS, SAVEDELIM)
|
|
IF RECNO() = LASTREC() .AND. STOP_SHOW
|
|
DISP_CHANGES(P_CHGLIST, O_CHGLIST)
|
|
|
|
KEYBOARD CHR(1) // HOME KEY
|
|
RETURN .F.
|
|
ELSE
|
|
RETURN .T.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CUR_USER_REC := RECNO()
|
|
PIRATE_VAR := FILL_EMPTY(MCODE, SGACTION, ADDL_MODE)
|
|
SELECT USERFILE2
|
|
GOTO CUR_USER_REC
|
|
MCODE = USERFILE2->PROD_CODE
|
|
MPROD_CODE := MCODE
|
|
PRODUCT->(DBSEEK(MCODE))
|
|
IF EMPTY(PRODUCT->ALLOW_SIZE)
|
|
HM_VAR := 'OTN' // ALLOW OS / TT / NS
|
|
ELSE
|
|
HM_VAR := PRODUCT->ALLOW_SIZE
|
|
ENDIF
|
|
|
|
IF PIRATE_VAR == 'NO CONT'
|
|
IF RECNO() == 1 .AND. BLANK_1ST( .T.,'PROD_CODE')
|
|
SET(_SET_DELIMITERS, SAVEDELIM)
|
|
RETURN .T.
|
|
ELSE
|
|
?? CHR(7)
|
|
ERR_BOX( ' MUST supply Missing Line Item Fields! ')
|
|
IF PROCNAME(1) = 'EDITGBROW'
|
|
RETURN .F.
|
|
ELSE
|
|
RETURN .T.
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// DO SPECIAL FIELD EDITS HERE!
|
|
// DO SPECIAL FIELD EDITS HERE!
|
|
// DO SPECIAL FIELD EDITS HERE!
|
|
// DO SPECIAL FIELD EDITS HERE!
|
|
|
|
IF EMPTY(ENTRY_SIZE) // ONLY NEED TO CHECK IF EMPTY
|
|
// IF ! EMPTY, THE SIZE ALREADY VALIDATED
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
IF !USERFILE2->STD_OPTS$'YN'
|
|
ERR_BOX( ' Invalid STANDARD OPTIONS CODE ' , ;
|
|
' "Y" = Use Std Options ' ,;
|
|
' "N" = Special Options ' ,;
|
|
' PLEASE RE-ENTER')
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
TTEDIT := CK_ENTRY_SIZE( HM_VAR, USERFILE2->ENTRY_SIZE, USERFILE2->HOW_MEAS )
|
|
|
|
IF TTEDIT == 'OK'
|
|
RND_WID_HT(MPROD_CODE, GET_ARR ) //CALC THE BILLING SIZE
|
|
BILL_SIZE(MPROD_CODE, ADDL_MODE, GET_ARR) //CALC THE BILLING SIZE
|
|
ELSE
|
|
IF TTEDIT = 'INVALID' .OR. TTEDIT = 'MU'
|
|
RETURN .F.
|
|
ELSE
|
|
ERR_BOX( ' UNKNOWN TTEDIT CODE IN CGWPRPO ' , ;
|
|
' ')
|
|
RETURN .F.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// IN CASE OF AN EMPTY PRICE_SHEET
|
|
IF EMPTY(USERFILE2->PRICE_SHT)
|
|
DISC_ARR := CALC_DISC(USERFILE2->PROD_CODE)
|
|
IF !EMPTY(DISC_ARR[2])
|
|
REPLACE USERFILE2->PRICE_SHT WITH DISC_ARR[2]
|
|
ELSE
|
|
REPLACE USERFILE2->PRICE_SHT WITH &CUR_MAST->PRICE_SHT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF PROCNAME(1) = 'EDITGBROW'
|
|
DO CASE
|
|
CASE PIRATE_VAR = 'NO_OPTS_NO_PIRATE'
|
|
SGACTION = 'GET'
|
|
|
|
OTHERWISE
|
|
SGACTION = 'PRICE'
|
|
|
|
END CASE
|
|
ENDIF
|
|
|
|
|
|
**IF LASTKEY() = -6 // F7 KEY - GET PRICE
|
|
IF LASTKEY() = K_F7 // F7 KEY - GET PRICE
|
|
DO CASE
|
|
CASE PIRATE_VAR = 'NO_OPTS_NO_PIRATE'
|
|
SGACTION = 'GET'
|
|
|
|
OTHERWISE
|
|
SGACTION = 'PRICE'
|
|
|
|
END CASE
|
|
ENDIF
|
|
|
|
|
|
IF SGACTION == 'PRICE'
|
|
WAIT_BOX(' *** Calculating Price *** ',;
|
|
' *** PLEASE WAIT ***')
|
|
ENDIF
|
|
|
|
M_MODEL = MCODE // SAVE MODEL NAME FOR PRICING LOOKUP, MCODE MIGHT BE CATEGORY LATER ON!
|
|
|
|
IF CK_SPEC_PRICE( (CUR_MAST)->CUST_ID, MCODE, (CUR_MAST)->ORDER_DATE, 'CUST_BP' )
|
|
PR_CUSTID := (CUR_MAST)->CUST_ID
|
|
ENDIF
|
|
|
|
// GO GET THE GET_ARR AND PRICE_ARR FOR THIS MODEL
|
|
RETVAL = BUILD_GETARR(MCODE, 1, MORDER_NUM, MLINE_NUM, PIRATE_VAR, , ADDL_MODE, PR_CUSTID, , 'USERFILE2')
|
|
GET_ARR = RETVAL[1]
|
|
PRICE_ARR = RETVAL[2]
|
|
|
|
RND_WID_HT(MPROD_CODE, GET_ARR ) //ROUND THE WIDTH AND HEIGHT BASED ON OPTIONS
|
|
BILL_SIZE(MPROD_CODE, ADDL_MODE, GET_ARR) //CALC THE BILLING SIZE
|
|
PROD_SIZE(GET_ARR,MPROD_CODE, ADDL_MODE) // MAKE SURE CURRENT PROD SIZE INFO IS IN THERE
|
|
|
|
LAST_CODE = MCODE // SAVE LAST MCODE
|
|
|
|
|
|
// SET THE INSTOCK, STDSIZE, ORIELSIZE FIELDS IN THE USERFILE RECORD
|
|
CK_STD_STOCK_SIZE(MPROD_CODE, GET_ARR, 'ALL', ADDL_MODE)
|
|
|
|
IF SGACTION = 'GET' .OR. SGACTION = 'REV'
|
|
@ 0,0 CLEAR
|
|
THISTITLE := 'Line Item Options For Model '+ ALLTRIM(MCODE)
|
|
IF ADDL_MODE
|
|
THISTITLE := THISTITLE + '(Attach to ' + ALLTRIM(USERFILE2->PAR_COLOR) + ' '+ ALLTRIM(USERFILE2->PAR_PROD) + ')'
|
|
ENDIF
|
|
SAYTITLE(THISTITLE, 'PRPO')
|
|
@ 2,0 CLEAR
|
|
ENDIF
|
|
|
|
//** P3N - 3/18/98
|
|
F7CALC_PRICE := LASTKEY()
|
|
|
|
RETARR := PROCESS_GETVALS( GET_ARR, ADDL_MODE, SGACTION, ;
|
|
STOP_SHOW, O_CHGLIST, P_CHGLIST, ;
|
|
MORDER_NUM, MLINE_NUM, MPROD_CODE, ;
|
|
M_MODEL, PR_CUSTID, PRICE_ARR, THISTITLE)
|
|
STOP_SHOW := RETARR[1]
|
|
O_CHGLIST := RETARR[2]
|
|
P_CHGLIST := RETARR[3]
|
|
|
|
SETCURSOR(SAVECURSOR)
|
|
SELECT USERFILE2
|
|
IF (CUR_PRICE_VALU <> USERFILE2->SALE_PRICE) ;
|
|
.AND. PROCNAME(1) = 'EDITGBROW'
|
|
STOP_SHOW := .T.
|
|
P_CHGLIST := P_CHGLIST + STR(RECNO() ,3)
|
|
ENDIF
|
|
|
|
SELECT USERFILE2
|
|
|
|
//** P3N - 3/18/98 - F7 CALC PRICE DISPLAY ALL PRICING COMPONENTS
|
|
IF F7CALC_PRICE = K_F7
|
|
DISP_PRICE_COMP()
|
|
ENDIF
|
|
|
|
IF RECNO() = LASTREC() .AND. STOP_SHOW .AND. SGACTION = "PRICE"
|
|
DISP_CHANGES(P_CHGLIST, O_CHGLIST)
|
|
KEYBOARD CHR(1) // HOME KEY
|
|
RETVAL := .F.
|
|
ELSE
|
|
RETVAL := .T.
|
|
ENDIF
|
|
|
|
SET(_SET_DELIMITERS, SAVEDELIM)
|
|
RESTSCREEN(,,,,SAVESCRN1)
|
|
SELECT(SAVESEL)
|
|
|
|
RETURN RETVAL
|
|
|
|
***************************************************************
|
|
* //** P3N - 3/18/98
|
|
* IF F7 KEY DEPRESSED - DISPLAY ALL PRICE COMPONENTS
|
|
* (IE: LINE ITEM - BASE_PRICE, OPT_PRICE, AND EXT_PRICE)
|
|
***************************************************************
|
|
FUNCTION DISP_PRICE_COMP()
|
|
LOCAL L1 := 'Base Price - ' + STR(BASE_PRI,7,2)
|
|
LOCAL L2 := 'Opt. Price - ' + STR(OPT_PRI,7,2)
|
|
LOCAL L3 := 'Ext. Price - ' + STR(EXTRA_PRI,7,2)
|
|
LOCAL L4 := 'Sale Price - ' + STR(SALE_PRICE,7,2)
|
|
LOCAL L5 := 'SPECIAL CUSTOMER PRICING EXISTS' //** P3N - 07/17/02
|
|
IF EMPTY(CUST_MAST->CPRICE_NUM)
|
|
L5 := ''
|
|
ENDIF
|
|
PRICEBOX( L5, L1, L2, L3, ;
|
|
' --------', ;
|
|
L4, ;
|
|
' ========')
|
|
RETURN .T.
|
|
//****************************************************************
|
|
//** p3n - 05/01/03 ***
|
|
//** ADDRESS MSG LINES PASSED ***
|
|
//** (IE: MSG7 VARIABLE DOES NOT EXIST ABEND) ***
|
|
//****************************************************************
|
|
FUNCTION PRICEBOX(LINE1, LINE2, LINE3, LINE4, LINE5, LINE6, LINE7)
|
|
LOCAL SCRN1, I, LONGEST, H, SAVECOL, SAVESCR
|
|
//**ATE LINEVAR, MSG1, MSG2, MSG3
|
|
PRIVATE LINEVAR, MSG1, MSG2, MSG3, MSG4, MSG5, MSG6, MSG7
|
|
CLEAR TYPEAHEAD
|
|
MSG1 := LINE1
|
|
MSG2 := LINE2
|
|
MSG3 := LINE3
|
|
MSG4 := LINE4
|
|
MSG5 := LINE5
|
|
MSG6 := LINE6
|
|
MSG7 := LINE7
|
|
SAVECOL := SETCOLOR()
|
|
SETCOLOR(HREV)
|
|
SAVE SCREEN TO SAVESCR
|
|
LONGEST := 25
|
|
FOR I = 1 TO PCOUNT()
|
|
LINEVAR := 'MSG' + STR(I,1)
|
|
IF &LINEVAR = NIL
|
|
ELSE
|
|
IF LEN(&LINEVAR) > LONGEST
|
|
LONGEST := LEN(&LINEVAR)
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
H = ((80 - LONGEST) / 2)
|
|
@ 12,H-5 CLEAR TO 17 + PCOUNT(),H+5+LONGEST
|
|
@ 12,H-5 TO 17 + PCOUNT(),H+5+LONGEST DOUBLE
|
|
V = 14
|
|
@ V,H SAY LINE1
|
|
IF PCOUNT() > 1
|
|
V++
|
|
@ V ,H SAY LINE2
|
|
ENDIF
|
|
IF PCOUNT() > 2
|
|
V++
|
|
@ V,H SAY LINE3
|
|
ENDIF
|
|
IF PCOUNT() > 3
|
|
V++
|
|
@ V,H SAY LINE4
|
|
ENDIF
|
|
IF PCOUNT() > 4
|
|
V++
|
|
@ V,H SAY LINE5
|
|
ENDIF
|
|
IF PCOUNT() > 5
|
|
V++
|
|
@ V,H SAY LINE6
|
|
ENDIF
|
|
IF PCOUNT() > 6
|
|
V++
|
|
@ V,H SAY LINE7
|
|
ENDIF
|
|
V++
|
|
V++
|
|
@ V,H SAY "Press Any Key to Continue"
|
|
INKEY(0)
|
|
RESTORE SCREEN FROM SCRN1
|
|
SETCOLOR(SAVECOL)
|
|
RESTORE SCREEN FROM SAVESCR
|
|
RETURN (.T.)
|
|
|
|
|
|
***************************************************************
|
|
*
|
|
***************************************************************
|
|
FUNCTION CK_ENTRY_SIZE( HM_VAR, ENTSIZE, HOWMEAS )
|
|
|
|
LOCAL MIDDLE := AT('X', ENTSIZE)
|
|
LOCAL GPOS := AT('G', ENTSIZE)
|
|
LOCAL WOVAR := AT("'", ENTSIZE)
|
|
LOCAL FTVAR := 0 , I
|
|
LOCAL INVAR := 0
|
|
LOCAL HMERR := .F., HM_VAROUT := ''
|
|
|
|
FOR I := 1 TO LEN( ENTSIZE )
|
|
IF SUBS(ENTSIZE,I,1)$"'"
|
|
FTVAR ++
|
|
ENDIF
|
|
NEXT
|
|
|
|
FOR I := 1 TO LEN( ENTSIZE )
|
|
IF SUBS(ENTSIZE,I,1)$'"'
|
|
INVAR ++
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF !EMPTY(HM_VAR)
|
|
DO CASE
|
|
CASE HOWMEAS=='TT' .AND. AT( 'T', HM_VAR ) = 0
|
|
HMERR := .T.
|
|
CASE HOWMEAS=='OS' .AND. AT( 'O', HM_VAR ) = 0
|
|
HMERR := .T.
|
|
CASE HOWMEAS=='NS' .AND. AT( 'N', HM_VAR ) = 0
|
|
HMERR := .T.
|
|
CASE HOWMEAS=='WO' .AND. AT( 'W', HM_VAR ) = 0
|
|
HMERR := .T.
|
|
CASE HOWMEAS=='BW' .AND. AT( 'B', HM_VAR ) = 0
|
|
HMERR := .T.
|
|
CASE HOWMEAS=='OT' .AND. AT( '1', HM_VAR ) = 0
|
|
HMERR := .T.
|
|
CASE HOWMEAS=='TO' .AND. AT( '2', HM_VAR ) = 0
|
|
HMERR := .T.
|
|
ENDCASE
|
|
IF HMERR
|
|
IF AT('O', HM_VAR) > 0
|
|
HM_VAROUT := HM_VAROUT + '"OS" '
|
|
ENDIF
|
|
IF AT('T', HM_VAR) > 0
|
|
HM_VAROUT := HM_VAROUT + '"TT" '
|
|
ENDIF
|
|
IF AT('N', HM_VAR) > 0
|
|
HM_VAROUT := HM_VAROUT + '"NS" '
|
|
ENDIF
|
|
IF AT('W', HM_VAR) > 0
|
|
HM_VAROUT := HM_VAROUT + '"WO" '
|
|
ENDIF
|
|
IF AT('B', HM_VAR) > 0
|
|
HM_VAROUT := HM_VAROUT + '"BW" '
|
|
ENDIF
|
|
IF AT('1', HM_VAR) > 0
|
|
HM_VAROUT := HM_VAROUT + '"OT" '
|
|
ENDIF
|
|
IF AT('2', HM_VAR) > 0
|
|
HM_VAROUT := HM_VAROUT + '"TO" '
|
|
ENDIF
|
|
ERR_BOX('*** Invalid HOW MEASURE ', ;
|
|
'*** Valid Method(s) - ' + HM_VAROUT )
|
|
RETURN 'INVALID'
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
WORKVAR := VAL_WD( 'USERFILE2', ENTSIZE)
|
|
DO CASE
|
|
CASE HOWMEAS=='TT' .AND. MIDDLE > 0
|
|
TTEDIT := 'OK'
|
|
CASE HOWMEAS=='OS' .AND. MIDDLE > 0
|
|
TTEDIT := 'OK'
|
|
CASE ( HOWMEAS=='NS' .AND. MIDDLE = 0 ) .OR. FTVAR = 2
|
|
TTEDIT := 'OK'
|
|
CASE HOWMEAS=='WO' .AND. WORKVAR[2] = 'WO'
|
|
TTEDIT := 'OK'
|
|
* CASE HOWMEAS=='WO' .AND. WOVAR > 0 .AND. FTVAR = 1
|
|
* TTEDIT := 'OK'
|
|
* CASE HOWMEAS=='WO' .AND. INVAR = 1
|
|
* TTEDIT := 'OK'
|
|
* CASE HOWMEAS=='WO' .AND. VAL_WD('USERFILE2', ENTSIZE )
|
|
* TTEDIT := 'OK'
|
|
CASE HOWMEAS=='BW' .AND. GPOS > 0
|
|
TTEDIT := 'OK'
|
|
CASE HOWMEAS=='TO' .AND. MIDDLE > 0
|
|
TTEDIT := 'OK'
|
|
CASE HOWMEAS=='OT' .AND. MIDDLE > 0
|
|
TTEDIT := 'OK'
|
|
OTHERWISE
|
|
DO CASE
|
|
CASE HOWMEAS=='TT'
|
|
TTEDIT := 'MU'
|
|
CASE HOWMEAS=='OS'
|
|
TTEDIT := 'MU'
|
|
CASE HOWMEAS=='NS'
|
|
TTEDIT := 'MU'
|
|
CASE HOWMEAS=='WO'
|
|
TTEDIT := 'MU'
|
|
CASE HOWMEAS=='BW'
|
|
TTEDIT := 'MU'
|
|
CASE HOWMEAS=='TO'
|
|
TTEDIT := 'MU'
|
|
CASE HOWMEAS=='OT'
|
|
TTEDIT := 'MU'
|
|
OTHERWISE
|
|
TTEDIT := 'INVALID'
|
|
ENDCASE
|
|
ENDCASE
|
|
|
|
IF TTEDIT = 'MU' // MIXED - UP
|
|
ERR_BOX( ' Size and HOW MEASURE are ILLOGICAL ' , ;
|
|
' "TT/OS/TO/OT" = 99 X 99' , ;
|
|
' "NS" = 9999 ' , ;
|
|
[ "WO" = 99'99 ] , ;
|
|
' "BW" = 99G99 ')
|
|
REPLACE USERFILE2->HOW_MEAS WITH ' '
|
|
TTEDIT := 'INVALID'
|
|
**RETURN .F.
|
|
ENDIF
|
|
|
|
IF TTEDIT = 'INVALID'
|
|
ERR_BOX( ' Invalid HOW MEASURE CODE ' , ;
|
|
'"TT" = Tip to Tip "BW" = Basement Window ' , ;
|
|
'"OS" = Opening Size "WO" = Width Only ' , ;
|
|
'"TO" = TT WD - OS HT "OT" = OS WD - TT WD ' , ;
|
|
'"NS" = Nominal Size ')
|
|
**RETURN .F.
|
|
ENDIF
|
|
|
|
RETURN TTEDIT
|
|
*****************************************************************
|
|
|
|
FUNCTION PROCESS_GETVALS( GET_ARR, ADDL_MODE, SGACTION, ;
|
|
STOP_SHOW, O_CHGLIST, P_CHGLIST, ;
|
|
MORDER_NUM, MLINE_NUM, MPROD_CODE, ;
|
|
M_MODEL, PR_CUSTID, PRICE_ARR, THISTITLE)
|
|
|
|
LOCAL PAGENUM := 0, STRTROW, ENDROW, FULLPAGE, FSTPAGE, GET_COL
|
|
LOCAL L, NUM2GET, L2, MTYPE, GET_IT, ROW, SAY_COL, DESCVAR
|
|
LOCAL CORRECT, EXITKEY, CORR, SAVEL, FSTGET, LASTGET
|
|
LOCAL REPLINE, PACK_FLAG, MOPT_VALUE, ELEM, XSTD_OPTS, SEEKKEY
|
|
LOCAL DISC_ARR, MSALE_PRICE, BPD, OPD, EPD
|
|
LOCAL PRNT_DESARR
|
|
LOCAL ASALE // P3N - 2/18/98
|
|
LOCAL BASEPRICE_CUST // P3N - 2/18/98
|
|
|
|
// PUT GET ARRAY ON SCREEN
|
|
SETCOLOR(LNOR)
|
|
STRTROW = 2
|
|
ENDROW := MAXROW() - 3
|
|
FULLPAGE := ENDROW - STRTROW
|
|
FSTPAGE := .T.
|
|
PAGENUM := 0
|
|
GET_COL = 35
|
|
|
|
|
|
FOR L = 1 TO LEN(GET_ARR)
|
|
PAGENUM ++
|
|
ROW := STRTROW
|
|
NUM2GET = 0
|
|
NUMGOT := 0
|
|
FSTGET := 0
|
|
LASTGET := 0
|
|
GOTFST := .F.
|
|
* IF SGACTION <> 'PRICE'
|
|
* @ 2,0 CLEAR
|
|
* ENDIF
|
|
DO WHILE ROW < ENDROW .AND. L <= LEN(GET_ARR)
|
|
NUM2GET++
|
|
IF FSTGET = 0
|
|
FSTGET := L
|
|
ENDIF
|
|
LASTGET := L
|
|
MTYPE = GET_ARR[L,2]
|
|
GET_IT = .F.
|
|
IF MTYPE$'UP'
|
|
GET_IT = .T.
|
|
ENDIF
|
|
|
|
IF MTYPE = 'P' .AND. USERFILE2->STD_OPTS = 'Y'
|
|
GET_IT = .F.
|
|
|
|
// MAKE SURE THERE ARE DEFAULTS IN THE PICK LIST
|
|
// LOOK FOR THE DEFAULT VALUE
|
|
IF GET_ARR[L,7] .OR. EMPTY(GET_DEFAULT(L,GET_ARR, ADDL_MODE))
|
|
GET_IT = .T.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
GET_ARR[L,7] = GET_IT // LET ARR KNOW TO GET/SAY OR NOT!
|
|
|
|
IF GET_IT .AND. (SGACTION = 'GET' .OR. SGACTION = 'REV')
|
|
IF !GOTFST
|
|
GOTFST := .T.
|
|
CLS
|
|
IF SGACTION = 'GET' .OR. SGACTION = 'REV'
|
|
IF SGACTION <> 'PRICE'
|
|
SAYTITLE(THISTITLE, 'PRPO')
|
|
@ 2,0 CLEAR
|
|
ENDIF
|
|
// PUT UP MSG FOR SECOND GET_ARR COLUMN
|
|
* IF CUR_OO = 'ACT_OPTS'
|
|
* PMSG = 'Actual # Before ' + DTOC(MDISP_DATE)
|
|
* @ 2,55 SAY PMSG
|
|
* ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ROW++
|
|
NUMGOT ++
|
|
DESCVAR := ALLTRIM(GET_ARR[L,5])
|
|
SAY_COL = GET_COL - LEN(DESCVAR) -1
|
|
@ ROW, SAY_COL SAY DESCVAR
|
|
|
|
ENDIF
|
|
L++ // SET LOOP COUNTER TO NEXT ELEMENT
|
|
ENDDO
|
|
L-- // RESET LOOP COUNTER TO CORRECT ELEMENT
|
|
|
|
IF SGACTION = 'GET' .OR. SGACTION = 'REV'
|
|
SAY_GET('SAY',GET_COL, L, NUM2GET, GET_ARR, USERFILE2->STD_OPTS, ADDL_MODE, STRTROW)
|
|
ENDIF
|
|
|
|
*
|
|
* GET USER'S INPUT
|
|
*
|
|
CORRECT := .F.
|
|
EXITKEY = .F.
|
|
DO WHILE !CORRECT // AND IT IS EDIT MODE
|
|
IF SGACTION = 'GET'
|
|
SAY_GET( 'GET', GET_COL, L, NUM2GET, GET_ARR, USERFILE2->STD_OPTS, ADDL_MODE, STRTROW)
|
|
ENDIF
|
|
|
|
IF LASTKEY() = 27
|
|
CORRECT := .T.
|
|
EXITKEY = .T.
|
|
CORR := 'X'
|
|
L := LEN(GET_ARR) + 1
|
|
SETKEY(-4,{|| ' '}) //** TURN OFF F5-PICKLIST HOTKEY - P3N - 6/18/98
|
|
RETURN {STOP_SHOW, O_CHGLIST, P_CHGLIST}
|
|
******EXIT
|
|
ENDIF
|
|
IF EXITKEY
|
|
L := LEN(GET_ARR) + 1
|
|
RETURN {STOP_SHOW, O_CHGLIST, P_CHGLIST}
|
|
ENDIF
|
|
CORR = ' '
|
|
IF SGACTION = 'GET' .OR. SGACTION = 'REV'
|
|
SAY_GET('SAY',GET_COL, L, NUM2GET, GET_ARR, USERFILE2->STD_OPTS, ADDL_MODE, STRTROW)
|
|
FOR L2 = FSTGET TO LASTGET
|
|
IF GET_ARR[L2,7] // DID WE 'GET' THIS ONE?
|
|
IF GET_ARR[L2,4] = 'No DEFAULT' .OR. !VALID_PICK(GET_ARR, L2)
|
|
|
|
ERR_BOX( 'INVALID Response for the ', ;
|
|
ALLTRIM(GET_ARR[L2,5]) + ' Option!', ;
|
|
' PLEASE RE-ENTER ')
|
|
|
|
CORR = 'N'
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
IF CORR = 'N'
|
|
LOOP
|
|
ENDIF
|
|
|
|
IF NUMGOT > 0
|
|
CORR := CORRCHEK( MAXROW()-1)
|
|
@ MAXROW()-1,0 CLEAR // ERASE CORRCHEK LINE
|
|
ENDIF
|
|
ELSE
|
|
CORR = 'Y'
|
|
ENDIF
|
|
|
|
|
|
IF CORR = 'N'
|
|
LOOP
|
|
ELSE
|
|
CORRECT := .T.
|
|
IF CORR = 'X'
|
|
CORRECT := .T.
|
|
EXITKEY = .T.
|
|
L = LEN(GET_ARR) // EXIT ENTIRE LOOP
|
|
EXIT
|
|
ELSE // ASSUMES CORR = 'Y' // good record - do the update
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDDO
|
|
|
|
NEXT
|
|
|
|
// CALCULATE/UPDATE BILLING/PRODUCTION SIZE BASED ON OPTIONS
|
|
// ALSO WILL CALC THE ACTUAL FINISHED PRODUCTION SIZE
|
|
|
|
RND_WID_HT(MPROD_CODE, GET_ARR) //ROUND WID/HT ENTRY SIZE
|
|
BILL_SIZE(MPROD_CODE, ADDL_MODE, GET_ARR) //CALC THE BILLING SIZE
|
|
PROD_SIZE(GET_ARR,MPROD_CODE, ADDL_MODE)
|
|
|
|
|
|
REPLINE := USERFILE2->LINE_NUM
|
|
SELECT USERFILE6
|
|
REPLACE ALL UPDATED WITH 'X' FOR LINE_NUM = REPLINE
|
|
SELECT USERFILE2
|
|
PACK_FLAG = .F.
|
|
SAVEL := L
|
|
FOR L2 = 1 TO LEN(GET_ARR)
|
|
|
|
// SEE IF THERE IS A PARENT PRODUCT FOR THIS OPTION
|
|
// OR IF THERE IS AN ADDITIONAL PRODUCT FOR THIS OPTION
|
|
MOPT_VALUE = GET_ARR[L2,4]
|
|
IF !EMPTY(MOPT_VALUE)
|
|
ELEM = ASCAN(GET_ARR[L2,3], {|X| X[1] == MOPT_VALUE})
|
|
IF ELEM > 0
|
|
IF !EMPTY(GET_ARR[L2,3,ELEM,11]) // PARENT PRODUCT CODE
|
|
REPLACE USERFILE2->PAR_PROD WITH GET_ARR[L2,3,ELEM,11]
|
|
ENDIF
|
|
IF !EMPTY(GET_ARR[L2,3,ELEM,10]) // addl product code
|
|
IF USERFILE2->STD_OPTS <> 'Y' // USE USERFILE2 BECAUSE IT GETS UPDATED ON THE FLY IN
|
|
// PIRATE OPTS / FILL_EMPTY PROCESSING
|
|
XSTD_OPTS = CHK_ADDITIONAL(GET_ARR[L2,1],;
|
|
GET_ARR[L2,3,ELEM,10], GET_ARR[L2,5], GET_ARR[L2,4])
|
|
ELSE
|
|
XSTD_OPTS = 'Y'
|
|
ENDIF
|
|
// SEE IF WE NEED TO ADDIT TO LINEITEM FILE
|
|
ADD_ADDITIONAL(GET_ARR[L2,3,ELEM,10], XSTD_OPTS, GET_ARR)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
|
|
// REEVALUATE ALL ITEMS SELECT FOR DEFAULT INCASE
|
|
// THE DEFAULT IS NOW DIFFERENT DUE TO USER RESPONSES
|
|
IF GET_ARR[L2,9] == '*' // DEFAULT
|
|
GET_ARR[L2,4] = GET_DEFAULT(L2, GET_ARR, ADDL_MODE)
|
|
ENDIF
|
|
|
|
// UPDATE THE DATA FILE
|
|
IF GET_ARR[L2,2] = 'C' // CALC FIELD
|
|
UPDATE_MATH(L2, GET_ARR) // GO DO MATH CALCULATIONS
|
|
ENDIF
|
|
|
|
// DON'T PUT DEFAULT OR EMPTY VALUES INTO THE ORDER OPTION FILE
|
|
IF ( EMPTY(GET_ARR[L2,4]) .OR. ;
|
|
GET_ARR[L2,9] == '*' ) .AND. ;
|
|
TRIM(GET_ARR[L2,1]) <> 'RANCH SLID' // ALWAYS WRITE RANCH SLIDER ATTRIBUTES
|
|
|
|
SELECT USERFILE8
|
|
IF ADDL_MODE
|
|
SEEKKEY = MORDER_NUM + MPROD_CODE + MLINE_NUM + GET_ARR[L2,1] // ATT_CODE
|
|
ELSE
|
|
SEEKKEY = MORDER_NUM + MLINE_NUM + GET_ARR[L2,1] // ATT_CODE
|
|
ENDIF
|
|
SEEK SEEKKEY
|
|
IF FOUND()
|
|
REC_LOCK(1)
|
|
DELETE
|
|
PACK_FLAG = .T.
|
|
ENDIF
|
|
ELSE // NOT DEFAULT OR EMPTY CHOICE OR N/A
|
|
SELECT USERFILE8
|
|
IF ADDL_MODE
|
|
SEEKKEY = MORDER_NUM + MPROD_CODE + MLINE_NUM + GET_ARR[L2,1] // ATT_CODE
|
|
ELSE
|
|
SEEKKEY = MORDER_NUM + MLINE_NUM + GET_ARR[L2,1] // ATT_CODE
|
|
ENDIF
|
|
SEEK SEEKKEY
|
|
IF !FOUND()
|
|
ADD_REC(3)
|
|
ELSE
|
|
REC_LOCK(3)
|
|
ENDIF
|
|
// SET KEY ON ORDER OPTS FILE
|
|
REPLACE ORDER_NUM WITH MORDER_NUM
|
|
REPLACE LINE_NUM WITH VAL(MLINE_NUM)
|
|
REPLACE ATT_CODE WITH GET_ARR[L2,1]
|
|
REPLACE USER_RESP WITH GET_ARR[L2,4]
|
|
IF ADDL_MODE
|
|
REPLACE PROD_CODE WITH MPROD_CODE
|
|
ENDIF
|
|
UNLOCK
|
|
ENDIF
|
|
NEXT
|
|
L := SAVEL
|
|
|
|
// REMOVE RECORDS NO LONGER NEEDED!
|
|
SELECT USERFILE6
|
|
DELETE ALL FOR UPDATED = 'X'
|
|
PACK
|
|
|
|
IF PACK_FLAG
|
|
SELECT USERFILE8
|
|
PACK
|
|
ENDIF
|
|
|
|
// BUILD PRINT DESCRIPTION
|
|
// MSG TO SHOW PROCESSING IS OCCURING!!
|
|
|
|
// CALCULATE/UPDATE BILLING/PRODUCTION SIZE BASED ON OPTIONS
|
|
// ALSO WILL CALC THE ACTUAL FINISHED PRODUCTION SIZE
|
|
|
|
RND_WID_HT(MPROD_CODE, GET_ARR) //ROUND WID/HT ENTRY SIZE
|
|
BILL_SIZE(MPROD_CODE, ADDL_MODE, GET_ARR) //CALC THE BILLING SIZE
|
|
PROD_SIZE(GET_ARR,MPROD_CODE, ADDL_MODE)
|
|
|
|
|
|
// SS CLEAR GLASS? USED IN GLASS BOX PROCESSING DURING PRINT.
|
|
CLR_SS_GLASS(GET_ARR, 'USERFILE2')
|
|
|
|
// standard size edit
|
|
CK_STD_STOCK_SIZE(MPROD_CODE, GET_ARR, 'ALL', ADDL_MODE)
|
|
|
|
// DO WE HAVE ANY SYSTEM LEVEL/PRODUCT LINE DISCOUNTS?
|
|
// THIS DISC% / PRICE_SHT COMES FROM CUST_PRICE OR (CUR_MAST)
|
|
DISC_ARR := CALC_DISC(USERFILE2->PROD_CODE)
|
|
|
|
// GO GET PRICING
|
|
//**MSALE_PRICE = GET_SALEPRICE(M_MODEL, USERFILE2->PRICE_SHT, PRICE_ARR, GET_ARR, ADDL_MODE, PR_CUSTID)
|
|
ASALE := GET_SALEPRICE(M_MODEL, USERFILE2->PRICE_SHT, PRICE_ARR, GET_ARR, ADDL_MODE, PR_CUSTID)
|
|
MSALE_PRICE := ASALE[1] //* P3N - 2/18/98
|
|
BASEPRICE_CUST := ASALE[2] //* P3N - 2/18/98
|
|
IF &CUR_MAST->QUOTE_PRIC = 0
|
|
// CALC THE SYSTEM DISCOUNT IF REQUIRED
|
|
IF USERFILE2->PRICE_SHT == DISC_ARR[2] .AND. EMPTY(USERFILE2->ALT_SPRICE)
|
|
REPLACE USERFILE2->SYS_DISC WITH DISC_ARR[1]
|
|
BPD:=0
|
|
OPD:=0
|
|
EPD:=0
|
|
IF DISC_ARR[3] = 'Y'
|
|
BPD := (USERFILE2->SYS_DISC * USERFILE2->BASE_PRI * .01)
|
|
ENDIF
|
|
IF DISC_ARR[4] = 'Y'
|
|
OPD := (USERFILE2->SYS_DISC * USERFILE2->OPT_PRI * .01)
|
|
ENDIF
|
|
IF DISC_ARR[5] = 'Y'
|
|
EPD := (USERFILE2->SYS_DISC * USERFILE2->EXTRA_PRI * .01)
|
|
ENDIF
|
|
REPLACE USERFILE2->DISC_S_AMT WITH BPD + OPD + EPD
|
|
ELSE
|
|
IF (CUR_MAST)->DISCOUNT <> 0
|
|
REPLACE USERFILE2->SYS_DISC WITH (CUR_MAST)->DISCOUNT
|
|
IF EMPTY(USERFILE2->ALT_SPRICE) .AND. EMPTY(USERFILE2->DISCOUNT)
|
|
REPLACE USERFILE2->DISC_S_AMT WITH MSALE_PRICE * ((CUR_MAST)->DISCOUNT*.01)
|
|
ELSEIF !EMPTY(USERFILE2->ALT_SPRICE) .AND. !EMPTY(USERFILE2->DISCOUNT)
|
|
REPLACE USERFILE2->DISC_S_AMT WITH USERFILE2->ALT_SPRICE * (USERFILE2->DISCOUNT*.01)
|
|
ELSEIF EMPTY(USERFILE2->ALT_SPRICE)
|
|
REPLACE USERFILE2->DISC_S_AMT WITH MSALE_PRICE * (USERFILE2->DISCOUNT*.01)
|
|
ELSE
|
|
REPLACE USERFILE2->DISC_S_AMT WITH 0
|
|
REPLACE USERFILE2->SYS_DISC WITH 0
|
|
******ELSE
|
|
****** REPLACE USERFILE2->DISC_S_AMT WITH USERFILE2->ALT_SPRICE * (USERFILE2->DISCOUNT*.01)
|
|
ENDIF
|
|
ELSE
|
|
REPLACE USERFILE2->SYS_DISC WITH 0
|
|
REPLACE USERFILE2->DISC_S_AMT WITH 0
|
|
ENDIF
|
|
ENDIF
|
|
ELSE // QUOTED PRICE
|
|
REPLACE USERFILE2->CALC_PRICE WITH MSALE_PRICE
|
|
MSALE_PRICE := 0
|
|
REPLACE USERFILE2->DISCOUNT WITH 0
|
|
REPLACE USERFILE2->SYS_DISC WITH 0
|
|
REPLACE USERFILE2->DISC_S_AMT WITH 0
|
|
ENDIF
|
|
|
|
IF BASEPRICE_CUST //* P3N - 2/18/98 - PER ELLEN
|
|
REPLACE USERFILE2->DISCOUNT WITH 0
|
|
REPLACE USERFILE2->SYS_DISC WITH 0
|
|
REPLACE USERFILE2->DISC_S_AMT WITH 0
|
|
ENDIF
|
|
|
|
SELECT USERFILE2
|
|
REPLACE SALE_PRICE WITH MSALE_PRICE
|
|
|
|
IF USERFILE2->NEED_CALC <> 'N'
|
|
STOP_SHOW := .T.
|
|
O_CHGLIST := O_CHGLIST + STR( RECNO(), 3)
|
|
ENDIF
|
|
IF EMPTY(USERFILE2->ALT_SPRICE) //** P3N - 6/30/98
|
|
//** ALLOW AN ALT PRICE TO BE ENTERED - NO STOP_SHOW
|
|
ELSE
|
|
STOP_SHOW := .F. //** P3N - 6/30/98
|
|
ENDIF
|
|
|
|
REPLACE USERFILE2->NEED_CALC WITH 'N'
|
|
|
|
// BUILD PRINT DESCRIPTION
|
|
PRNT_DESARR := BLD_DESC(GET_ARR, 'USERFILE2')
|
|
|
|
REPLACE USERFILE2->ITEM_DESC WITH PRNT_DESARR[1]
|
|
REPLACE USERFILE2->LINE_DESC WITH PRNT_DESARR[4]
|
|
IF USERFILE2->(FIELDPOS('LDESC_COPY')) > 0
|
|
REPLACE USERFILE2->LDESC_COPY WITH PRNT_DESARR[5]
|
|
ENDIF
|
|
IF USERFILE2->(FIELDPOS('GLINE_DESC')) > 0
|
|
REPLACE USERFILE2->GLINE_DESC WITH PRNT_DESARR[6]
|
|
ENDIF
|
|
REPLACE USERFILE2->LINE_DESC WITH PRNT_DESARR[4]
|
|
REPLACE USERFILE2->LOC_CODE WITH PRNT_DESARR[2]
|
|
REPLACE USERFILE2->GLASSORDER WITH IF(PRNT_DESARR[3], 'Y', 'N')
|
|
|
|
RETURN { STOP_SHOW, O_CHGLIST, P_CHGLIST }
|
|
|
|
***************************************************
|
|
|
|
FUNCTION DISP_CHANGES(P_CHGLIST, O_CHGLIST)
|
|
|
|
LOCAL M1:= '' , M2 := ''
|
|
IF LEN(P_CHGLIST) > 0
|
|
M1 = ' PRICE CHANGES on Lines ' + P_CHGLIST
|
|
ENDIF
|
|
IF LEN(O_CHGLIST) > 0
|
|
M2 = ' OPTION CHANGES on Lines ' + O_CHGLIST
|
|
ENDIF
|
|
ERR_BOX( M1, ;
|
|
M2, ;
|
|
' PLEASE REVIEW Each Line ')
|
|
RETURN .T.
|
|
|
|
***************************************************
|
|
FUNCTION CK_STOCK_SIZE(MPROD_CODE, GET_ARR)
|
|
// STOCK ITEM edit (proper stock rule and std_size)
|
|
LOCAL RESULT, SAVESEL := SELECT(), RETVAL := .T.
|
|
|
|
// ONLY ITEMS WITH IN_STOCK$'X' GOT TO HERE.
|
|
// FIRST CHECK IF THERE IS A RULE AT THE SS FILE LEVEL
|
|
// THEN CHECK IF THERE IS A RULE AT THE PRODUCT FILE LEVEL
|
|
// IF NO RULES, RETURN .T.
|
|
|
|
IF !EMPTY(STD_SIZES->RULE_PACK)
|
|
RESULT = CHK_RULE(STD_SIZES->RULE_PACK, GET_ARR, , _SELFILE)
|
|
IF RESULT
|
|
RETVAL := .T.
|
|
ELSE
|
|
RETVAL := .F.
|
|
ENDIF
|
|
ELSE
|
|
|
|
SELECT PRODUCT
|
|
SEEK MPROD_CODE
|
|
|
|
// stock item rule stored in the product file
|
|
IF !EMPTY(PRODUCT->RULE_PACK)
|
|
RESULT = CHK_RULE(PRODUCT->RULE_PACK, GET_ARR, , _SELFILE)
|
|
IF RESULT
|
|
RETVAL := .T.
|
|
ELSE
|
|
RETVAL := .F.
|
|
ENDIF
|
|
ENDIF
|
|
SELECT (SAVESEL)
|
|
ENDIF
|
|
RETURN RETVAL
|
|
|
|
******************************************************************
|
|
FUNCTION CK_STD_STOCK_SIZE(MPROD_CODE, GET_ARR, ACTION, ADDL_MODE)
|
|
LOCAL SAVESEL := SELECT(), RETVAL := .T.
|
|
LOCAL SAVEORD, ELEM1, ELEM2, PARENT_ARR
|
|
LOCAL POTENTIAL_STOCK:=.F., SEEKPROD
|
|
LOCAL OR_TOP := 0, OR_BOT := 0
|
|
LOCAL OR_RES := 'N'
|
|
LOCAL SS_RES := 'N', SIZE_ARR
|
|
LOCAL SK_RES := 'N', MWIDTH := 0, MHEIGHT := 0
|
|
LOCAL I, WK_TOP //P3N - 2/20/98
|
|
|
|
IF ACTION = NIL
|
|
ACTION = 'ALL'
|
|
ENDIF
|
|
|
|
FILE2USE := 'USERFILE2'
|
|
|
|
|
|
MWIDTH := DECVAL( (FILE2USE)->WIDTH )
|
|
MHEIGHT:= DECVAL( (FILE2USE)->HEIGHT)
|
|
|
|
|
|
|
|
SELECT STD_SIZES
|
|
DONSETORD(2)
|
|
|
|
ELEM1 = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'ORIEL TOP'})
|
|
ELEM2 = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'ORIEL BOTT'})
|
|
IF ELEM2 > 0
|
|
OR_BOT := DECVAL(GET_ARR[ELEM2, 4])
|
|
ENDIF
|
|
IF ELEM1 > 0
|
|
OR_TOP := DECVAL(GET_ARR[ELEM1, 4])
|
|
ENDIF
|
|
|
|
|
|
|
|
IF EMPTY(USERFILE2->PAR_PROD) // NOT ADDL MODE
|
|
**SEEK MPROD_CODE + STR( (FILE2USE)->ACT_WIDTH,10,6) + STR( (FILE2USE)->ACT_HEIGHT,10,6)
|
|
SIZE_ARR := CONV_SIZE( MPROD_CODE, MWIDTH,;
|
|
MHEIGHT, (FILE2USE)->HOW_MEAS, .T.)
|
|
SEEK MPROD_CODE + STR(SIZE_ARR[1],10,6) + STR(SIZE_ARR[2],10,6)
|
|
ELSE
|
|
* SIZE_ARR := CONV_SIZE(USERFILE2->PAR_PROD, DECVAL(USERFILE2->WIDTH),;
|
|
* DECVAL(USERFILE2->HEIGHT), USERFILE2->HOW_MEAS)
|
|
* SIZE_ARR := CONV_SIZE(USERFILE2->PAR_PROD, USERFILE2->ACT_WIDTH,;
|
|
* USERFILE2->ACT_HEIGHT, USERFILE2->HOW_MEAS)
|
|
SIZE_ARR := CONV_SIZE(USERFILE2->PAR_PROD, MWIDTH,;
|
|
MHEIGHT, USERFILE2->HOW_MEAS, .T.)
|
|
**SEEK USERFILE2->PAR_PROD + STR(SIZE_ARR[1],10,6) + STR(SIZE_ARR[2],10,6)
|
|
SEEK MPROD_CODE + STR(SIZE_ARR[1],10,6) + STR(SIZE_ARR[2],10,6)
|
|
ENDIF
|
|
IF ADDL_MODE
|
|
PARENT_ARR := SET_PARENT(USERFILE2->ORDER_NUM+STR(USERFILE2->LINE_NUM) )
|
|
SS_RES := PARENT_ARR[1] //STD_SIZE
|
|
SK_RES := PARENT_ARR[2] //IN_STOCK
|
|
OR_RES := PARENT_ARR[3] //ORIEL_SIZE
|
|
** SS_RES = PARENT SS
|
|
** SK_RES = PARENT SK
|
|
** OR_RES = PARENT OR
|
|
ELSE
|
|
IF FOUND() // POTENTIAL STD/STOCK/STOCK_ORIEL
|
|
SS_RES := 'Y'
|
|
IF STD_SIZES->ORIEL_SIZE$'X' .OR. OR_TOP <> OR_BOT
|
|
OR_RES := 'Y'
|
|
ELSE //** P3N - 2/20/98 -( KC ONLY SITE W\"IS ORIEL")
|
|
//** NON STANDARD ORIEL
|
|
I := ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'IS ORIEL'})
|
|
IF EMPTY(I)
|
|
// NO IS ORIEL OPTION
|
|
ELSEIF ALLTRIM(GET_ARR[I,4]) == 'ORIEL' //USER OPT RESPONSE
|
|
OR_RES := 'Y' //SET AS AN ORIEL
|
|
I := ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'ORIEL TOP'})
|
|
IF EMPTY(I)
|
|
// NO ORIEL TOP
|
|
ELSEIF EMPTY(GET_ARR[I,4]) //NO USER OPT RESPONSE FOR ORIEL TOP
|
|
//DEFAULT TO STD SIZE ORIEL TOP
|
|
IF EMPTY(STD_SIZES->ORIEL_TOP)
|
|
ELSE
|
|
WK_TOP := STR(STD_SIZES->ORIEL_TOP,7,4)
|
|
GET_ARR[I,4] := PADR(WK_TOP, 20, ' ')
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// NO ATTACHMENTS TO BE CONSIDERED IN STOCK
|
|
// 4-2-97 CHECK ATTACHMENTS FOR STOCK / PRODUCE ITEMS
|
|
**IF STD_SIZES->STOCK_SIZE$'X' .AND. EMPTY( (FILE2USE)->PAR_PROD )
|
|
IF STD_SIZES->STOCK_SIZE$'X'
|
|
POTENTIAL_STOCK := CK_STOCK_SIZE(MPROD_CODE, GET_ARR)
|
|
ENDIF
|
|
|
|
IF POTENTIAL_STOCK .AND. (FILE2USE)->STD_OPTS$'Y'
|
|
// NO ORIEL ATTRIBUTES FOUND .OR. SPECIFIED
|
|
IF (FILE2USE)->STD_OPTS$'Y'
|
|
IF OR_TOP = 0 .AND. OR_BOT = 0
|
|
SK_RES := 'Y'
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF OR_TOP <> OR_BOT
|
|
OR_RES := 'Y'
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
REPLACE (FILE2USE)->STD_SIZE WITH SS_RES
|
|
REPLACE (FILE2USE)->IN_STOCK WITH SK_RES
|
|
REPLACE (FILE2USE)->ORIEL_SIZE WITH OR_RES
|
|
|
|
DONSETORD(SAVEORD)
|
|
|
|
SELECT (SAVESEL)
|
|
RETURN RETVAL
|
|
|
|
******************************************************************
|
|
* GET THE PARENT STOCK, STD_SIZE, ORIEL_SIZE *
|
|
******************************************************************
|
|
FUNCTION SET_PARENT(KEY)
|
|
LOCAL RET_ARR := {'N', 'N', 'N'}
|
|
IF (CUR_OL)->(DBSEEK(KEY))
|
|
RET_ARR[1] := (CUR_OL)->STD_SIZE
|
|
RET_ARR[2] := (CUR_OL)->IN_STOCK
|
|
RET_ARR[3] := (CUR_OL)->ORIEL_SIZE
|
|
ENDIF
|
|
RETURN RET_ARR
|
|
******************************************************************
|
|
FUNCTION CONV_SIZE(PROD, MWIDTH, MHEIGHT, HM, USE_SAW)
|
|
// CONVERTS WIDTH,HEIGHT TO TIP TO TIP MEASUREMENT FOR PROD_CODE
|
|
|
|
LOCAL SAVESEL := SELECT(), SAVEREC, ES_WD := 0, ES_HT := 0
|
|
SELECT PRODUCT
|
|
SAVEREC := RECNO()
|
|
SEEK PROD
|
|
|
|
IF USE_SAW = NIL
|
|
USE_SAW := .F.
|
|
ENDIF
|
|
|
|
DO CASE
|
|
// THE FINAL SIZE IS THE CONVERTED ENTRY SIZE + CATEGORY ADJS
|
|
// AND ADJUSTMENTS BASED ON HOW MEASURED
|
|
|
|
// THIS IS THE CONVERTED ENTRY SIZE OF EITHER STAND-ALONE PRODUCT
|
|
// OR THE PRODUCT IT IS TO BE ATTACHED TO.
|
|
CASE UPPER( HM ) == 'OS' //* OPENING SIZE
|
|
ES_WD := PRODUCT->OS_WIDTH + MWIDTH
|
|
ES_HT := PRODUCT->OS_HEIGHT + MHEIGHT
|
|
|
|
CASE UPPER( HM ) == 'TO' //* TT WIDTH OS HEIGHT
|
|
ES_WD := PRODUCT->TT_WIDTH + MWIDTH
|
|
ES_HT := PRODUCT->OS_HEIGHT + MHEIGHT
|
|
|
|
CASE UPPER( HM ) == 'OT' //* OS WIDTH TT HEIGHT
|
|
ES_WD := PRODUCT->OS_WIDTH + MWIDTH
|
|
ES_HT := PRODUCT->TT_HEIGHT + MHEIGHT
|
|
|
|
CASE UPPER( HM ) == 'WO' //* WIDTH ONLY
|
|
ES_WD := PRODUCT->NS_WIDTH + MWIDTH
|
|
ES_HT := 0
|
|
|
|
CASE UPPER( HM ) == 'BW' //* BASEMENT WINDOW
|
|
ES_WD := PRODUCT->TT_WIDTH + MWIDTH
|
|
ES_HT := 0
|
|
|
|
CASE UPPER( HM ) == 'TT' //* TIP-TIP
|
|
ES_WD := PRODUCT->TT_WIDTH + MWIDTH
|
|
ES_HT := PRODUCT->TT_HEIGHT + MHEIGHT
|
|
|
|
CASE UPPER( HM ) == 'NS' //* NOMINAL SIZE
|
|
ES_WD := PRODUCT->NS_WIDTH + MWIDTH
|
|
ES_HT := PRODUCT->NS_HEIGHT + MHEIGHT
|
|
|
|
ENDCASE
|
|
|
|
IF USE_SAW
|
|
ES_WD := ES_WD + PRODUCT->SAW_WIDTH
|
|
ES_HT := ES_HT + PRODUCT->SAW_HEIGHT
|
|
ENDIF
|
|
|
|
|
|
GOTO SAVEREC
|
|
SELECT (SAVESEL)
|
|
|
|
RETURN {ES_WD, ES_HT}
|
|
|
|
******************************************************************
|
|
FUNCTION STD_SIZE_EDIT(MPROD_CODE)
|
|
LOCAL LEFTPART, RITEPART, TT_ARR := {}
|
|
LOCAL MIDDLE := AT(' X ', OPT_VALUE)
|
|
LOCAL NOM_SIZE := .F., MENTRY_SIZE := ALLTRIM(OPT_VALUE)
|
|
LOCAL REG_SIZE := .T.
|
|
LOCAL WDFEET, WDINCH, HTFEET, HTINCH
|
|
LOCAL LEFTVAL, RITEVAL, WONLY_OK := .F.
|
|
*
|
|
// CHECK FOR VALID 99 X 99 SIZE
|
|
|
|
PRODUCT->(DBSEEK(MPROD_CODE))
|
|
IF EMPTY(PRODUCT->ALLOW_SIZE) .OR. 'W'$PRODUCT->ALLOW_SIZE
|
|
WONLY_OK := .T.
|
|
ENDIF
|
|
|
|
IF MIDDLE = 0
|
|
REG_SIZE := .F.
|
|
ELSE
|
|
// GOT ?? X ??, NOW CHECK FOR VALID ITEMS BOTH SIDES OF "X"
|
|
LEFTPART = ALLTRIM(LEFT(OPT_VALUE, MIDDLE-1))
|
|
RITEPART = ALLTRIM(SUBS(OPT_VALUE, MIDDLE+3))
|
|
LEFTVAL := DECVAL(LEFTPART)
|
|
RITEVAL := DECVAL(RITEPART)
|
|
|
|
IF !CHK_FRACTION(LEFTPART, 'EDIT') .OR. !CHK_FRACTION(RITEPART,'EDIT')
|
|
REG_SIZE := .F.
|
|
ELSEIF DECVAL(LEFTPART) = 0
|
|
REG_SIZE := .F.
|
|
ELSEIF DECVAL(RITEPART) = 0 .AND. !WONLY_OK
|
|
REG_SIZE := .F.
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF !REG_SIZE .AND. !NOM_SIZE
|
|
IF EMPTY(OPT_VALUE) //** P3N - 4/2/98
|
|
RETURN .T. //** ALLOW THE DELETION OF STD SIZES
|
|
ELSE
|
|
SS_ERROR()
|
|
RETURN .F.
|
|
ENDIF
|
|
ELSE
|
|
REPLACE OS_WIDTH WITH LEFTVAL
|
|
REPLACE OS_HEIGHT WITH RITEVAL
|
|
REPLACE OPT_VALUE WITH LEFTPART + ' X ' + RITEPART
|
|
TT_ARR := SIZE_CONVERT(MPROD_CODE, 'OS', 'TT', OS_WIDTH, OS_HEIGHT)
|
|
REPLACE TT_WIDTH WITH TT_ARR[1]
|
|
REPLACE TT_HEIGHT WITH TT_ARR[2]
|
|
|
|
ENDIF
|
|
|
|
RETURN .T.
|
|
|
|
***********************************
|
|
|
|
FUNCTION SS_ERROR()
|
|
ERR_BOX( ' Standard Opening Sizes MUST Be in Format ', ;
|
|
' 99 X 99 (With Fractions) ', ;
|
|
' PLEASE RE-ENTER ')
|
|
RETURN .T.
|
|
|
|
|
|
* * * * * * * * * * * * *
|
|
STATIC PROCEDURE SAY_GET(CMD, GET_COL, LAST_GETVAR, NUM2GET, GET_ARR, MSTD_OPTS, ADDL_MODE, ROW)
|
|
LOCAL I, STRT_INLIST, L2, NUMGET := 0
|
|
**LOCAL ROW
|
|
|
|
SETCOLOR(HNOR)
|
|
**ROW = 4
|
|
|
|
STRT_INLIST = LAST_GETVAR - NUM2GET + 1
|
|
FOR I := STRT_INLIST TO LAST_GETVAR
|
|
|
|
IF GET_ARR[I,7] // PROCESS THIS ONE?
|
|
ROW++
|
|
*** NUMGET++
|
|
NUMGET := NUMGET + 1
|
|
IF CMD = 'SAY'
|
|
@ ROW,GET_COL SAY ':'
|
|
@ ROW,GET_COL+1 SAY GET_ARR[I,4]
|
|
@ROW(), COL() SAY ':'
|
|
ELSE // GETLOOP
|
|
@ ROW,GET_COL+1 GET GET_ARR[I,4] WHEN WHEN_GET(GET_ARR, ADDL_MODE) ;
|
|
VALID VALID_GET(GET_ARR, ADDL_MODE)
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
IF CMD = 'GET' .AND. NUMGET > 0
|
|
READ()
|
|
ENDIF
|
|
SETCOLOR(LNOR)
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * * * * * * * *
|
|
FUNCTION VALID_GET(GET_ARR, ADDL_MODE)
|
|
// THIS IS THE VALID CONDITION ON THE GETS IN SAY_GET
|
|
// NEED TO VALIDATE THE PICK LIST INPUT
|
|
|
|
LOCAL X, ELEM, NEW_VAL, MTYPE, ELEM2, RESULT
|
|
LOCAL DEF_VALU, OPT_ARR, CUROPT
|
|
|
|
// IF IT'S A CURSOR MOVEMENT, DON'T DO THE VALID
|
|
IF LASTKEY() = K_UP .OR. LASTKEY() = K_DOWN .OR. LASTKEY() = K_PGUP ;
|
|
.OR. LASTKEY() = K_PGDN
|
|
@ 0,0 SAY SPACE(12)
|
|
SETKEY(-4,{|| ''})
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
X = GETACTIVE()
|
|
ELEM = X[2,1]
|
|
*****NEW_VAL = X[12]
|
|
NEW_VAL = X:BUFFER
|
|
MTYPE = GET_ARR[ELEM,2]
|
|
//** P3N - 10/13/06 - PER ELLEN IF ADDL OPT USE PARENT FRAME COLOR
|
|
CUROPT := GET_ARR[ELEM,1] //** P3N - 10/13/06
|
|
|
|
DO CASE
|
|
CASE MTYPE$'PT' // PICK LIST OR TABLE LIST???
|
|
IF ADDL_MODE //** P3N - 10/13/06
|
|
IF CUROPT = 'FR COLOR' //** P3N - 10/13/06
|
|
IF EMPTY(NEW_VAL) //** P3N - 10/13/06
|
|
NEW_VAL := USERFILE2->PAR_COLOR //** P3N - 10/13/06
|
|
ENDIF //** P3N - 10/13/06
|
|
ENDIF //** P3N - 10/13/06
|
|
ENDIF //** P3N - 10/13/06
|
|
ELEM2 = ASCAN(GET_ARR[ELEM,3], {|XX| ALLTRIM(XX[1]) == ALLTRIM(NEW_VAL)})
|
|
//**IF ELEM2 = 0 //** P3N - 10/13/06
|
|
IF ELEM2 = 0 .OR. ADDL_MODE //** P3N - 10/13/06
|
|
IF ADDL_MODE .AND. NEW_VAL = 'N/A' //** P3N - 10/13/06
|
|
RESULT := .T.
|
|
ELSE
|
|
RESULT = SET_PICK(GET_ARR, NEW_VAL) // GET INPUT FROM PICKLIST
|
|
ENDIF
|
|
//** RESULT = SET_PICK(GET_ARR) // GET INPUT FROM PICKLIST
|
|
IF !RESULT
|
|
RETURN .F.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ELEM2 > 0
|
|
OPT_ARR := GET_ARR[ELEM,3]
|
|
GET_ARR[ELEM,11] := OPT_ARR[ELEM2,11] // UPDATE CURRENT PAR_PROD
|
|
ENDIF
|
|
|
|
IF X:CHANGED
|
|
X:KILLFOCUS() // TERMINATE THE GET
|
|
// CHECK TO SEE IF THE "NEW" VALUE IS THE DEFAULT OR NOT.
|
|
DEF_VALU := GET_DEFAULT(ELEM, GET_ARR, ADDL_MODE)
|
|
IF GET_ARR[ELEM,4] == DEF_VALU
|
|
GET_ARR[ELEM,9] := '*'
|
|
ELSE
|
|
GET_ARR[ELEM,9] := ' '
|
|
ENDIF
|
|
ELSE
|
|
X:KILLFOCUS() // TERMINATE THE GET
|
|
ENDIF
|
|
|
|
|
|
CASE MTYPE$'U'
|
|
IF X:CHANGED
|
|
IF GET_ARR[ELEM,1] = 'ORIEL TOP' .OR. GET_ARR[ELEM,1] = 'ORIEL BOTT'
|
|
CK_STD_STOCK_SIZE(USERFILE2->PROD_CODE, GET_ARR, 'ALL', ADDL_MODE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
ENDCASE
|
|
@ 0,0 SAY SPACE(12)
|
|
SETKEY(-4,{|| ''})
|
|
RETURN .T.
|
|
|
|
|
|
|
|
|
|
* * * * * * * * * * * * *
|
|
FUNCTION WHEN_GET(GET_ARR, ADDL_MODE)
|
|
// THIS IS THE WHEN CONDITION ON THE GETS IN SAY_GET
|
|
|
|
LOCAL X, ELEM, ELEM2, MTYPE, ARR := {}, NCHOICE
|
|
LOCAL CUR_VAL, NTOP, NLEFT, NRIGHT, NBOTTOM, SAVEBOX
|
|
LOCAL L, BCENTER, OFFSET, HEADER, RESULT, NCOLOR, NPOS
|
|
LOCAL RULE_ARR := {}, MELEM, SAVESEL := SELECT(), DEF_VALU, GET_LEN
|
|
LOCAL CHG_2_DEF := .F., MRULE, ADDIT
|
|
|
|
@ 0,0 SAY SPACE(12)
|
|
|
|
X = GETACTIVE()
|
|
ELEM = X[2,1]
|
|
MTYPE = GET_ARR[ELEM,2]
|
|
|
|
// CHECK INCLUDE RULE AT THE ATTRIBUTE LEVEL
|
|
RESULT = CHK_RULE(GET_ARR[ELEM,6], GET_ARR, , _SELFILE)
|
|
IF !RESULT
|
|
// SEE IF THERE IS AN OPTION RECORD OUT THERE & DELETE IT!
|
|
SELECT USERFILE8
|
|
IF ADDL_MODE
|
|
SEEKKEY = USERFILE2->ORDER_NUM + USERFILE2->PROD_CODE + STR(USERFILE2->LINE_NUM,3) + GET_ARR[ELEM,1] // ATT_CODE
|
|
ELSE
|
|
SEEKKEY = USERFILE2->ORDER_NUM + STR(USERFILE2->LINE_NUM,3) + GET_ARR[ELEM,1] // ATT_CODE
|
|
ENDIF
|
|
|
|
SEEK SEEKKEY
|
|
IF FOUND()
|
|
REC_LOCK(3)
|
|
REPLACE ORDER_NUM WITH ''
|
|
REPLACE LINE_NUM WITH 0
|
|
REPLACE ATT_CODE WITH ''
|
|
REPLACE USER_RESP WITH ''
|
|
IF ADDL_MODE
|
|
REPLACE PROD_CODE WITH ''
|
|
ENDIF
|
|
DELETE
|
|
UNLOCK
|
|
ENDIF
|
|
SELECT(SAVESEL)
|
|
|
|
// MAKE VALUE = "N/A" AND REDISPLAY IT
|
|
IF MTYPE$'U'
|
|
GET_ARR[ELEM,4] = ' ' + SPACE( LEN(GET_ARR[ELEM,4]) -3 )
|
|
ELSE
|
|
GET_ARR[ELEM,4] = 'N/A' + SPACE( LEN(GET_ARR[ELEM,4]) -3 )
|
|
ENDIF
|
|
X:DISPLAY(GET_ARR[ELEM,4]) // PUT VALUE ON THE SCREEN
|
|
RETURN .F. // RULES DIDN'T PASS!
|
|
ENDIF
|
|
|
|
// IF NO DEFAULT OPTIONS OR (STD_OPTS AND PICKED DEFAULT)
|
|
// REEVALUATE THE DEFAULT JUST IN CASE OTHER CHANGES RESULT
|
|
// IN A NEW DEFAULT
|
|
GET_LEN := LEN(GET_ARR[ELEM,4])
|
|
IF GET_ARR[ELEM,2]$'PT'
|
|
// LOOK FOR THE DEFAULT VALUE
|
|
DEF_VALU := GET_DEFAULT(ELEM, GET_ARR, ADDL_MODE)
|
|
IF !EMPTY(DEF_VALU)
|
|
IF GET_ARR[ELEM,9] = '*' ;
|
|
.AND. GET_ARR[ELEM,4] <> DEF_VALU
|
|
CHG_2_DEF := .T.
|
|
ELSE
|
|
IF USERFILE2->STD_OPTS$'Y' ;
|
|
.AND. GET_ARR[ELEM,4] <> DEF_VALU
|
|
CHG_2_DEF := .T.
|
|
ELSE
|
|
IF !USERFILE2->STD_OPTS$'Y' ; // NON STANDARD OPTIONS-INVALID OPTION
|
|
.AND. !VALID_OPTION(GET_ARR[ELEM])
|
|
CHG_2_DEF := .T.
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CHG_2_DEF .AND. GET_ARR[ELEM,4] <> DEF_VALU
|
|
GET_ARR[ELEM,4] = DEF_VALU
|
|
GET_ARR[ELEM,9] := '*'
|
|
// IF THE CALCULATED DEFAULT DON'T GET IT!
|
|
X:DISPLAY(GET_ARR[ELEM,4]) // PUT VALUE ON THE SCREEN
|
|
RETURN .F.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// HILITE THE CURRENT GET
|
|
CUR_VAL = GET_ARR[X[2,1], X[2,2] ]
|
|
X:SETFOCUS() // MUST SET FOCUS TO DO THE FOLLOWING
|
|
NCOLOR = X:COLORSPEC() // GET THE CURRENT COLORS
|
|
NPOS = AT(',', NCOLOR)
|
|
NCOLOR = LEFT(NCOLOR,NPOS) + 'W+/R'
|
|
X:COLORDISP(NCOLOR) // SET THE SELECTED COLOR
|
|
X:DISPLAY(CUR_VAL) // PUT VALUE ON THE SCREEN
|
|
X:KILLFOCUS() // TERMINATE THE GET
|
|
|
|
DO CASE
|
|
CASE MTYPE = 'U' // USER INPUT
|
|
@ 0,0 SAY SPACE(12)
|
|
SETKEY(-4,{|| ''})
|
|
RETURN .T.
|
|
CASE MTYPE = 'C' // CALCULATION TYPE - SHOULD NEVER GET HERE!
|
|
@ 0,0 SAY SPACE(12)
|
|
SETKEY(-4,{|| ''}) // MAKE SURE HOT KEY IS OFF
|
|
RETURN .F. // DONT DO A GET!
|
|
|
|
CASE MTYPE$'P' // PICK LIST
|
|
|
|
FOR L = 1 TO LEN(GET_ARR[ELEM,3]) // LOAD UP THE AVAILABLE OPTIONS!!
|
|
******AADD(ARR, GET_ARR[ELEM,3,L,1])
|
|
******MRULE := GET_ARR[ELEM,3,L,3]
|
|
MRULE := GET_ARR[ELEM,3,L,18]
|
|
ADDIT := .T.
|
|
IF !EMPTY(MRULE) // DON'T INCLUDE IF RULE ISN'T TRUE
|
|
ADDIT := CHK_RULE(MRULE, GET_ARR, , _SELFILE) // SINCE NOT A DEFAULT SITUATION
|
|
ENDIF
|
|
IF ADDIT
|
|
AADD(ARR, GET_ARR[ELEM,3,L,1])
|
|
ENDIF
|
|
NEXT
|
|
IF LEN(ARR) > 1
|
|
// SET UP HOT KEY
|
|
SETKEY(-4, {|| SET_PICK(GET_ARR)})
|
|
SETCOLOR(HREV)
|
|
@ 0,0 SAY 'F5 for List'
|
|
SETCOLOR(LNOR)
|
|
// CHECK IF CURRENT VALUE IS IN VALID LIST
|
|
IF ASCAN(ARR, {|X| X == GET_ARR[ELEM,4] }) = 0
|
|
GET_ARR[ELEM,4] := SPACE(LEN(GET_ARR[ELEM,4]))
|
|
KEYBOARD CHR(13) // FORCE IT INTO THE PICKLIST!!!
|
|
ENDIF
|
|
ELSE
|
|
// IF 1 ELEMENT AND GOING DOWN THRU LIST, STUFF IT INTO KEYBOARD
|
|
IF LEN(ARR) = 1 .AND. ;
|
|
!(LASTKEY() = K_UP .OR. LASTKEY() = K_PGUP )
|
|
KEYBOARD ARR[1]
|
|
ENDIF
|
|
ENDIF
|
|
IF GET_ARR[ELEM,4] = 'No DEFAULT Options!!' ;
|
|
.OR. ALLTRIM(GET_ARR[ELEM,4]) = 'N/A'
|
|
KEYBOARD CHR(13) // FORCE IT INTO THE PICKLIST!!!
|
|
ENDIF
|
|
|
|
RETURN .T.
|
|
|
|
|
|
|
|
ENDCASE
|
|
|
|
|
|
@ 0,0 SAY SPACE(12)
|
|
SETKEY(-4,{|| ''})
|
|
RETURN .T.
|
|
|
|
|
|
***************************************************************
|
|
|
|
FUNCTION VALID_OPTION(VAL_ARR)
|
|
LOCAL OPTARR := VAL_ARR[3]
|
|
LOCAL ELEM := ASCAN(OPTARR, {|X| X[1] == VAL_ARR[4]})
|
|
IF ELEM > 0
|
|
RETURN .T.
|
|
ELSE
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
***************************************************************
|
|
* * * * * * * * * * * * *
|
|
FUNCTION SET_ORDKEY
|
|
// SET A HOT KEY TO UPDATE THE ORDER OPTIONS FROM THE ORDER LINE SCREEN
|
|
|
|
LOCAL SAVECOLOR := SETCOLOR(HREV)
|
|
|
|
SET KEY -3 TO GET_LINEOPTS(USERFILE2->PROD_CODE)
|
|
@ 0,0 SAY 'F4 to Update Options'
|
|
SETCOLOR(SAVECOLOR)
|
|
RETURN NIL
|
|
|
|
* * * * * * * * * * * * *
|
|
FUNCTION RESET_ORDKEY
|
|
// RESET A HOT KEY TO UPDATE THE ORDER OPTIONS FROM THE ORDER LINE SCREEN
|
|
|
|
SET KEY -3
|
|
RETURN NIL
|
|
* * * * * * * * * * * * *
|
|
* * * * * * * * * * * * *
|
|
//** P3N - 4/16/98 (YES I survived tax day!) - BARELY
|
|
**FUNCTION GET_TOTQTY()
|
|
**LOCAL WKFLD := ALLTRIM(STR(LINE_NUM, 3)) + '/' + ALLTRIM(PROD_CODE)
|
|
**LOCAL SHIPQTY := CHK_SHIPQTY('SHIPQTY')
|
|
**ERR_BOX ('** Order Quantity for '+WKFLD+' is - ' + ALLTRIM(STR(QUANTITY,3)) + ' **', ;
|
|
** '** Quantity Shipped '+SPACE(LEN(WKFLD))+' is - ' + ALLTRIM(STR(SHIPQTY,3)) + ' **' )
|
|
**RETURN .T.
|
|
* * * * * * * * * * * * *
|
|
* * * * * * * * * * * * *
|
|
//HOTKEY CTRL+T RETURNS THE CURRENT DATE FOR THE ORDER CONTROL SCREEN
|
|
//** P3N - 4/16/98 (YES I survived tax day!) - BARELY
|
|
* * * * * * * * * * * * *
|
|
//** NOTE: IF THE IMPORTCUST DEFINITION FOR THE ORD_SHIP (CGW0OSW/CGW0OST)
|
|
//** NOTE: OR THE IMPORTCUST DEFINITION FOR THE ORD_PROD (CGW0OPW/CGW0OPT)
|
|
//** NOTE: CHANGES FOR THE FIELDS COMPL_DATE, SHIP_DATE, OR CONFIRM_DATE
|
|
//** NOTE: THIS LOGIC IS SUBJECT TO CHANGE ACCORDING TO THE ORDER OF THE
|
|
//** NOTE: THE FIELDS IN THE IMPORT CUST AND THE COLUMN HEADINGS.
|
|
* * * * * * * * * * * * *
|
|
**FUNCTION GET_CURDATE(REMOVEDT)
|
|
**LOCAL OCURR_COL := OBROW:GETCOLUMN(OBROW:COLPOS)
|
|
**LOCAL FLD, COL_HEADING := UPPER( OCURR_COL:HEADING )
|
|
**LOCAL RETVAL := .T., REPLVAL
|
|
**IF EMPTY(REMOVEDT)
|
|
** REPLVAL := CURDATE
|
|
**ELSEIF REMOVEDT == 'REMOVEDT'
|
|
** REPLVAL := CTOD(' / / ')
|
|
**ENDIF
|
|
**REC_LOCK(3)
|
|
**IF COL_HEADING = 'PROD DATE'
|
|
** FLD := COLARR[3,2] //** COMPL_DATE-ORD_PROD
|
|
** REPLACE &FLD WITH REPLVAL //** COMPL_DATE-ORD_PROD
|
|
**ELSEIF COL_HEADING = 'SHIP '
|
|
** FLD := COLARR[5,2] //** SHIP_DATE-ORD_SHIP
|
|
** IF EMPTY(&FLD) //** SHIP_DATE-ORD_SHIP
|
|
** REPLACE &FLD WITH REPLVAL //** SHIP_DATE-ORD_SHIP
|
|
** ENDIF
|
|
****ELSEIF COL_HEADING = 'DELIV'
|
|
**** FLD := COLARR[6,2] //** CONFIRM_DT-ORD_SHIP
|
|
**** REPLACE &FLD WITH REPLVAL //** CONFIRM_DT-ORD_SHIP
|
|
**ENDIF
|
|
**IF DUPL_CTRLDT()
|
|
** REPLACE &FLD WITH CTOD(' / / ') //** DUPL DATE RESET TO EMPTY
|
|
**ENDIF
|
|
**UNLOCK
|
|
**RETURN RETVAL
|
|
**
|
|
* * * * * * * * * * * * *
|
|
***********************************
|
|
|
|
//**FUNCTION SET_PICK(GET_ARR) //** P3N 10/13/06
|
|
FUNCTION SET_PICK(GET_ARR, NEW_VAL) //** P3N - 10/13/06
|
|
// USE PICKLIST FOR CURRENT GET - CONTAINS LIST OF OPTIONS AVAILABLE
|
|
|
|
LOCAL X, ELEM, L, ARR := {}, ELEM2, CUR_VAL, MIRULE
|
|
LOCAL NTOP, NLEFT, NRIGHT, NBOTTOM, SAVEBOX
|
|
LOCAL BCENTER, OFFSET, HEADER, RESULT, MRULE, MDEF, ADDIT := .F.
|
|
LOCAL SVSCRN := SAVESCREEN()
|
|
SET KEY -4 TO // TURN OFF HOT KEY
|
|
|
|
X = GETACTIVE()
|
|
ELEM = X[2,1]
|
|
|
|
|
|
// DON'T ADD TO ARRAY IF THE RULE IF FALSE AND NO DEFAULT FLAG
|
|
FOR L = 1 TO LEN(GET_ARR[ELEM,3])
|
|
// IF NO ASTERICK AND A RULE IS PRESENT
|
|
// THEN ONLY AN OPTION IF THE RULE IS TRUE.
|
|
MRULE := GET_ARR[ELEM,3,L,3]
|
|
MIRULE := GET_ARR[ELEM,3,L,18]
|
|
MDEF := GET_ARR[ELEM,3,L,2]
|
|
ADDIT := .T.
|
|
|
|
IF !EMPTY(MIRULE) // DON'T INCLUDE IF RULE ISN'T TRUE
|
|
ADDIT := CHK_RULE(MIRULE, GET_ARR, , _SELFILE)
|
|
ELSE
|
|
IF MDEF = ' ' .AND. !EMPTY(MRULE) // DON'T INCLUDE IF RULE ISN'T TRUE
|
|
ADDIT := CHK_RULE(MRULE, GET_ARR, , _SELFILE) // SINCE NOT A DEFAULT SITUATION
|
|
ENDIF
|
|
ENDIF
|
|
IF EMPTY(NEW_VAL) //** P3N - 10/13/06
|
|
//** USE CUR_VAL //** P3N - 10/13/06
|
|
ELSE //** P3N - 10/13/06
|
|
//** P3N - 10/13/06 - PER ELLEN IF ADDL OPT USE PARENT FRAME COLOR
|
|
ADDIT := .F. //** P3N - 10/13/06
|
|
IF GET_ARR[ELEM,3,L,1] = NEW_VAL //** P3N - 10/13/06
|
|
ADDIT := .T. //** P3N - 10/13/06
|
|
ENDIF //** P3N - 10/13/06
|
|
ENDIF //** P3N - 10/13/06
|
|
IF ADDIT
|
|
AADD(ARR, GET_ARR[ELEM,3,L,1])
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF LEN(ARR) > 1
|
|
CUR_VAL = GET_ARR[X[2,1], X[2,2] ]
|
|
HEADER = GET_ARR[ELEM,1]
|
|
ELEM2 = ASCAN(ARR, {|X| X == CUR_VAL})
|
|
|
|
NTOP = X:ROW - 1
|
|
NLEFT = X:COL + LEN(CUR_VAL)
|
|
NRIGHT = NLEFT + LEN(CUR_VAL)
|
|
NBOTTOM = NTOP + LEN(ARR) + 1
|
|
IF NBOTTOM > MAXROW() -2
|
|
NBOTTOM = MAXROW() -2
|
|
ENDIF
|
|
|
|
|
|
SAVEBOX = SAVESCREEN(NTOP,NLEFT,NBOTTOM+1,NRIGHT+1)
|
|
*
|
|
SETCOLOR(BLACK)
|
|
@ NTOP+1,NLEFT+1 CLEAR TO NBOTTOM+1,NRIGHT+1 // DRAW SHADOW BOX
|
|
SETCOLOR(HNOR)
|
|
@ NTOP,NLEFT CLEAR TO NBOTTOM,NRIGHT // DRAW BACKROUND COLOR
|
|
@ NTOP,NLEFT TO NBOTTOM,NRIGHT // DRAW DOUBLE LINE
|
|
// FIND THE CENTER OF THE BOX
|
|
BCENTER = INT( (NRIGHT - NLEFT) / 2)
|
|
OFFSET = INT(LEN(HEADER) / 2)
|
|
SETCOLOR(HREV)
|
|
@ NTOP,NLEFT+(BCENTER-OFFSET) SAY HEADER
|
|
|
|
SETCOLOR(LNOR)
|
|
DO WHILE .T.
|
|
NCHOICE := ACHOICE(NTOP+1,NLEFT+1,NBOTTOM-1,NRIGHT-1,ARR,,,ELEM2)
|
|
// DON'T LEAVE UNLESS VALID INPUT OR ESCAPE KEY IS PRESSED!!!
|
|
IF NCHOICE <> 0
|
|
EXIT
|
|
ELSE
|
|
IF LASTKEY() = 27
|
|
RESTSCREEN(NTOP,NLEFT,NBOTTOM+1,NRIGHT+1,SAVEBOX)
|
|
SETKEY(-4, {|| SET_PICK(GET_ARR)}) // TURN HOT KEY BACK ON
|
|
RETURN .F.
|
|
ENDIF
|
|
ENDIF
|
|
ENDDO
|
|
ELSE
|
|
NCHOICE = 1
|
|
ENDIF
|
|
|
|
IF EMPTY(NCHOICE) .OR. NCHOICE > LEN(ARR)
|
|
RESTSCREEN(,,,,SVSCRN)
|
|
SETKEY(-4, {|| SET_PICK(GET_ARR)}) // TURN HOT KEY BACK ON
|
|
RETURN .F.
|
|
ELSE
|
|
X:BUFFER = ARR[NCHOICE] // STUFF THE BUFFER
|
|
X:ASSIGN() // UPDATE THE GET VAR
|
|
IF LEN(ARR) > 1
|
|
RESTSCREEN(NTOP,NLEFT,NBOTTOM+1,NRIGHT+1,SAVEBOX)
|
|
ENDIF
|
|
IF PROCNAME(1) = '(b)WHEN_GET'
|
|
KEYBOARD ARR[NCHOICE]
|
|
ENDIF
|
|
SETKEY(-4, {|| SET_PICK(GET_ARR)}) // TURN HOT KEY BACK ON!
|
|
RETURN .T.
|
|
ENDIF
|
|
*************************************************
|
|
FUNCTION CHK_RULE(MRULE, GET_ARR, MTYPE, SELFILE, GETELM)
|
|
// CHECK THE RULE FOR MRULE
|
|
// MTYPE = 'M' FOR MATH PACKS
|
|
|
|
LOCAL MELEM, L, RULE_ARR := {}, RESULT := .T.
|
|
STATIC ALL_RULES
|
|
|
|
IF ALL_RULES = NIL
|
|
ALL_RULES := {}
|
|
ENDIF
|
|
|
|
IF !EMPTY(MRULE) // RULE PACK NAME
|
|
MELEM = 0
|
|
FOR L = 1 TO LEN(ALL_RULES)
|
|
IF ALLTRIM(ALL_RULES[L,1]) == ALLTRIM(MRULE)
|
|
MELEM = L
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF MELEM = 0
|
|
RULE_ARR = GETRULES(MRULE, SELFILE, GET_ARR, GETELM) // RULE PACK NAME
|
|
IF !EMPTY(RULE_ARR)
|
|
AADD(ALL_RULES, {MRULE , RULE_ARR})
|
|
MELEM = LEN(ALL_RULES)
|
|
ELSE
|
|
////////////////////////////////////////////////////////////
|
|
// A RULE NAME WAS PASSED BUT NO RULE PACKET INFO WAS FOUND!!!!
|
|
////////////////////////////////////////////////////////////
|
|
IF MTYPE = 'M'
|
|
RETURN RULE_ARR
|
|
ELSE
|
|
RETURN .T.
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
RULE_ARR = ALL_RULES[MELEM,2]
|
|
ENDIF
|
|
IF MTYPE = 'M'
|
|
RETURN RULE_ARR
|
|
ELSE
|
|
RESULT = EVALCLRULES({RULE_ARR},,GET_ARR, SELFILE) // RULE ARRAY
|
|
ENDIF
|
|
ENDIF
|
|
RETURN RESULT
|
|
|
|
|
|
********************************************************************
|
|
FUNCTION GET_DEFAULT(ELEM, GET_ARR, ADDL_MODE)
|
|
// GET DEFAULT VALUE OPTION
|
|
|
|
LOCAL RETVAL := '', L2, RESULT, I, GOODNUM
|
|
LOCAL RETVALLEN, NUM_AVAIL, CK_ARR:= {}
|
|
|
|
IF !EMPTY(GET_ARR[ELEM,3]) // HAS OPTIONS
|
|
** CHECK TO SEE IF THE ATTRIBUTE IS RULE DEPENDENT.
|
|
IF !CHK_RULE(GET_ARR[ELEM,6], GET_ARR, , _SELFILE) // THE RULE NAME AT ATTRIBUTE LEVEL
|
|
RETURN RETVAL
|
|
ENDIF
|
|
|
|
FOR L2 = 1 TO LEN(GET_ARR[ELEM,3])
|
|
IF EMPTY(GET_ARR[ELEM,3,L2,18]) ; // IF OPTION HAS AN INCLUDE RULE
|
|
.OR. CHK_RULE(GET_ARR[ELEM,3,L2,18], GET_ARR, , _SELFILE) // THE RULE NAME
|
|
AADD(CK_ARR, GET_ARR[ELEM,3,L2])
|
|
ENDIF
|
|
NEXT
|
|
|
|
**FOR L2 = 1 TO LEN(GET_ARR[ELEM,3])
|
|
FOR L2 = 1 TO LEN(CK_ARR)
|
|
** IF GET_ARR[ELEM,3,L2,2] = '*' .OR. LEN(GET_ARR[ELEM,3]) = 1
|
|
IF CK_ARR[L2,2] = '*' .OR. LEN(CK_ARR) = 1
|
|
** CHECK TO SEE IF THE DEFAULT OPTION IS RULE DEPENDENT.
|
|
RESULT = .T.
|
|
// CHECK FOR OPTION RULE!
|
|
**** IF !EMPTY(GET_ARR[ELEM,3,L2,3]) // IF OPTION HAS A DEFAULT RULE
|
|
IF !EMPTY(CK_ARR[L2,3]) // IF OPTION HAS A DEFAULT RULE
|
|
***** RESULT = CHK_RULE(GET_ARR[ELEM,3,L2,3], GET_ARR, , _SELFILE) // THE RULE NAME
|
|
RESULT = CHK_RULE(CK_ARR[L2,3], GET_ARR, , _SELFILE) // THE RULE NAME
|
|
ENDIF
|
|
IF RESULT // GOOD RESULT
|
|
****** RETVAL = GET_ARR[ELEM,3,L2,1] // DEFAULT VALUE
|
|
RETVAL = CK_ARR[L2,1] // DEFAULT VALUE
|
|
RETVALLEN := LEN(RETVAL)
|
|
IF GET_ARR[ELEM,2] = 'T' // IF TABLE TYPE
|
|
IF ISDIGIT(LEFT(LTRIM(RETVAL),1))
|
|
RETVAL = 'V' + LTRIM(RETVAL)
|
|
ELSE
|
|
RETVAL = SUBS(LTRIM(RETVAL)+SPACE(RETVALLEN), 1, RETVALLEN)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
EXIT // NO NEED TO DO ANYMORE!
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
RETURN RETVAL
|
|
|
|
|
|
******************************************************************
|
|
FUNCTION PAR_ATT_VALU(ADDL_MODE, REALFILE)
|
|
// DISPLAY THE COLOR OF PRODUCT ON THE LINE ITEM SCREEN FOR EACH MODEL
|
|
|
|
LOCAL RETVAL, SEEKKEY
|
|
LOCAL SAVESEL := SELECT()
|
|
|
|
IF REALFILE = NIL
|
|
REALFILE := 'USERFILE8' // USER ORDER_OPTS / ADDL_OPTS , NOT USERFILE8
|
|
ENDIF
|
|
|
|
|
|
IF ADDL_MODE = NIL
|
|
ADDL_MODE := .F.
|
|
ENDIF
|
|
|
|
IF ADDL_MODE
|
|
SEEKKEY := &CUR_MAST->ORDER_NUM + PROD_CODE + STR(USERFILE2->LINE_NUM,3) + 'FR COLOR'
|
|
ELSE
|
|
SEEKKEY := &CUR_MAST->ORDER_NUM + STR(USERFILE2->LINE_NUM,3) + 'FR COLOR'
|
|
ENDIF
|
|
|
|
SELECT (REALFILE)
|
|
SEEK SEEKKEY
|
|
IF FOUND()
|
|
RETVAL := TRIM( (REALFILE)->USER_RESP)
|
|
ELSE
|
|
RETVAL := 'N/A'
|
|
ENDIF
|
|
SELECT (SAVESEL)
|
|
|
|
RETURN RETVAL
|
|
|
|
|
|
********************************************************************
|
|
FUNCTION UPDATE_MATH(ELEM, GET_ARR)
|
|
// UPDATE THE CALCULATION FIELDS
|
|
|
|
LOCAL RESULT, MATH_ARR := {}, MCAT_CODE, MATT_CODE, SAVESEL := SELECT()
|
|
|
|
MCAT_CODE = GET_CATCODE(USERFILE2->PROD_CODE)
|
|
MATT_CODE = GET_ARR[ELEM,1]
|
|
SEEKKEY = MCAT_CODE + MATT_CODE
|
|
SELECT MATHPACK
|
|
SEEK SEEKKEY
|
|
DO WHILE CAT_CODE + ATT_CODE == SEEKKEY .AND. !EOF()
|
|
IF MATHPACK->TYPE$' '
|
|
AADD(MATH_ARR, {FIELD1, OPERATOR, FIELD2})
|
|
ENDIF
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
IF !EMPTY(MATH_ARR)
|
|
RESULT = EVAL_MATH(MATH_ARR, GET_ARR, MCAT_CODE, MATT_CODE, _SELFILE )
|
|
|
|
DO CASE
|
|
CASE VALTYPE(RESULT) = 'C'
|
|
GET_ARR[ELEM,4] = RESULT
|
|
CASE VALTYPE(RESULT) = 'N'
|
|
GET_ARR[ELEM,4] = STR(RESULT)
|
|
END CASE
|
|
ENDIF
|
|
SELECT (SAVESEL)
|
|
RETURN NIL
|
|
|
|
********************************************************************
|
|
FUNCTION SIZE_NEEDED( SELFILE )
|
|
|
|
LOCAL RESULT, MATH_ARR := {}, MCAT_CODE, MATT_CODE
|
|
LOCAL SAVESEL := SELECT(), SEEKKEY
|
|
|
|
MCAT_CODE = (SELFILE)->UOM
|
|
MATT_CODE = '_MISCITEM '
|
|
SEEKKEY = MCAT_CODE + MATT_CODE
|
|
SELECT MATHPACK
|
|
SEEK SEEKKEY
|
|
DO WHILE CAT_CODE + ATT_CODE == SEEKKEY .AND. !EOF()
|
|
IF MATHPACK->TYPE$'M' // MISC ITEM
|
|
AADD(MATH_ARR, {FIELD1, OPERATOR, FIELD2})
|
|
ENDIF
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
SELECT (SAVESEL)
|
|
|
|
IF EMPTY(MATH_ARR)
|
|
REPLACE ENTRY_SIZE WITH ''
|
|
RETURN .F.
|
|
ELSE
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
********************************************************************
|
|
FUNCTION MISC_PRICE( SELFILE )
|
|
|
|
LOCAL RESULT, MATH_ARR := {}, MCAT_CODE, MATT_CODE
|
|
LOCAL SAVESEL := SELECT(), UOMVAR := 1, SEEKKEY
|
|
LOCAL PRICEUOM:=0, PRICECOL:=0
|
|
|
|
MCAT_CODE = (SELFILE)->UOM
|
|
MATT_CODE = '_MISCITEM '
|
|
SEEKKEY = MCAT_CODE + MATT_CODE
|
|
SELECT MATHPACK
|
|
SEEK SEEKKEY
|
|
DO WHILE CAT_CODE + ATT_CODE == SEEKKEY .AND. !EOF()
|
|
IF MATHPACK->TYPE$'M' // MISC ITEM
|
|
AADD(MATH_ARR, {FIELD1, OPERATOR, FIELD2})
|
|
ENDIF
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
SELECT (SAVESEL)
|
|
|
|
IF !EMPTY(MATH_ARR) .AND. EMPTY( (SELFILE)->ENTRY_SIZE )
|
|
IF LASTKEY() = K_F10
|
|
ERR_BOX( '*** Size Information is REQUIRED ')
|
|
RETURN .F.
|
|
ELSE
|
|
UOMVAR := 0
|
|
ENDIF
|
|
ELSE
|
|
IF !EMPTY(MATH_ARR)
|
|
UOMVAR = EVAL_MATH(MATH_ARR, {}, MCAT_CODE, MATT_CODE, SELFILE, 'MISC' )
|
|
IF VALTYPE(RESULT) = 'C'
|
|
UOMVAR = VAL(RESULT)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
SEEKKEY := (SELFILE)->PARTNUM + (SELFILE)->UOM
|
|
MISC_PUOM->(DBSEEK ( SEEKKEY ))
|
|
DO CASE
|
|
CASE (SELFILE)->PRICE_SHT$'D'
|
|
PRICEUOM := MISC_PUOM->DLR_AMT
|
|
CASE (SELFILE)->PRICE_SHT$'S'
|
|
PRICEUOM := MISC_PUOM->SD_AMT
|
|
CASE (SELFILE)->PRICE_SHT$'B'
|
|
PRICEUOM := MISC_PUOM->BU_AMT
|
|
CASE (SELFILE)->PRICE_SHT$'J'
|
|
PRICEUOM := MISC_PUOM->DIST_AMT
|
|
CASE (SELFILE)->PRICE_SHT$'L'
|
|
PRICEUOM := MISC_PUOM->LUMB_AMT
|
|
CASE (SELFILE)->PRICE_SHT$'I'
|
|
PRICEUOM := MISC_PUOM->IC_AMT
|
|
OTHERWISE
|
|
PRICEUOM := 0
|
|
ENDCASE
|
|
|
|
ENDIF
|
|
|
|
IF PRICEUOM * UOMVAR > 9999.99 //** P3N - 2/23/99
|
|
ERR_BOX('** ERROR in SALE PRICE calculation! **', ' ', ;
|
|
' SALE PRICE should be less than 9999.99 / calc. = ' + ;
|
|
STR(PRICEUOM * UOMVAR , 12,4) )
|
|
ELSE
|
|
REPLACE (SELFILE)->SALE_PRICE WITH (PRICEUOM * UOMVAR)
|
|
ENDIF //** P3N - 2/23/99
|
|
|
|
RETURN .T.
|
|
|
|
|
|
|
|
********************************************************************
|
|
FUNCTION GET_CATCODE(MPROD_CODE)
|
|
// RETURN THE ASSOCIATED CATEGORY CODE FOR MPROD_CODE
|
|
|
|
LOCAL SAVESEL := SELECT(), RETVAL, SAVEREC
|
|
|
|
SELECT PRODUCT
|
|
SAVEREC := RECNO()
|
|
SEEK MPROD_CODE
|
|
RETVAL = CAT_CODE
|
|
GOTO SAVEREC
|
|
SELECT(SAVESEL)
|
|
RETURN RETVAL
|
|
|
|
********************************************************************
|
|
FUNCTION CHK_SIZE( PUFILENAME, ALLOW_EMPTY )
|
|
// VALIDATE THE VALUE IN THE ENTRY_SIZE FIELD FOR LINE ITEMS
|
|
// MUST BE FOUR DIGITS IF HOW MEASURED = 'NS'
|
|
// MUST BE DELIMITED WITH AN 'X' IF NOT!
|
|
// IF ANY ENTRY SIZE ADJUSTMENTS REQUIRED THEN MAKE THEM HERE
|
|
|
|
LOCAL DO_ERR := .F., MLEN, MHOW_MEAS, SEEKKEY, I
|
|
LOCAL LEFTNUM, RITENUM, MIDDLE, RESULT1, RESULT2, SAVEORD
|
|
LOCAL SAVESEL := SELECT()
|
|
LOCAL M1:= ' ', ERRFLAG, LEFTPART, RITEPART
|
|
LOCAL M2:= ' ', WORKVAR
|
|
LOCAL M3:= ' ', UFILENAME
|
|
LOCAL XWIDTH, XHEIGHT, ISNOMINAL := .F.
|
|
LOCAL GPOS, WOPOS, ADD_QUOTE2 := .F., ADD_QUOTE1 := .F.
|
|
LOCAL MHEIGHT, MWIDTH, WWIDTH, WHEIGHT, WHOWMEAS, RETVAL := .F.
|
|
|
|
/*
|
|
IF NOMINAL SIZE --> OK
|
|
IF 99 X 99 SIZE --> OK
|
|
|
|
IF 4/5/6 DIGIT SIZE --> REPLACE HOW_MEAS WITH 'NS'
|
|
IF 99 X 99 SIZE --> AND HOW_MEAS <> 'TT' .OR. 'OS' - REPLACE HOW_MEAS WITH ' '
|
|
*/
|
|
|
|
IF PUFILENAME = NIL
|
|
UFILENAME := 'USERFILE2'
|
|
ELSE
|
|
UFILENAME := PUFILENAME
|
|
ENDIF
|
|
|
|
IF ALLOW_EMPTY = NIL
|
|
ALLOW_EMPTY := .F.
|
|
ENDIF
|
|
|
|
IF EMPTY((UFILENAME)->ENTRY_SIZE) .AND. !ALLOW_EMPTY
|
|
SIZE_ERR()
|
|
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
IF PROCNAME(1) = 'EDITGBROW' // F10 - SIZE WAS VALIDATED AT DATA ENTRY TIME
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
MENTRY_SIZE = ALLTRIM((UFILENAME)->ENTRY_SIZE)
|
|
|
|
WORKVAR := NIL
|
|
// SOMETHING X SOMETHING
|
|
XPOS := AT('X', MENTRY_SIZE)
|
|
IF XPOS > 0
|
|
LEFTNUM := ALLTRIM(SUBS(MENTRY_SIZE,1,XPOS -1))
|
|
IF RIGHT(LEFTNUM,1)$'"'
|
|
LEFTNUM := ALLTRIM( STRTRAN( LEFTNUM, '"', ' ' ))
|
|
ADD_QUOTE1 := .T.
|
|
ENDIF
|
|
WORKVAR := VAL_WD( UFILENAME, LEFTNUM )
|
|
|
|
IF !EMPTY(WORKVAR)
|
|
WWIDTH := LEFTNUM
|
|
WHOWMEASE := WORKVAR[2]
|
|
|
|
RITENUM := ALLTRIM(SUBS(MENTRY_SIZE,XPOS +1))
|
|
IF RIGHT(RITENUM,1)$'"'
|
|
RITENUM := ALLTRIM( STRTRAN( RITENUM, '"', ' ' ))
|
|
ADD_QUOTE2 := .T.
|
|
ENDIF
|
|
WORKVAR := VAL_WD( UFILENAME, RITENUM )
|
|
IF !EMPTY(WORKVAR)
|
|
WORKVAR[1] := WWIDTH
|
|
WORKVAR[2] := RITENUM // CURRENT ONE RETURNED
|
|
******WORKVAR[3] := ''
|
|
WORKVAR := { WORKVAR[1], WORKVAR[2], '' }
|
|
MENTRY_SIZE := ALLTRIM(WORKVAR[1]) + ' X ' + WORKVAR[2]
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
// BASEMENT WINDOWS
|
|
IF AT('G', MENTRY_SIZE) > 0
|
|
WORKVAR := VAL_BW( UFILENAME, MENTRY_SIZE ) // BASEMENT WINDOW
|
|
ELSE
|
|
|
|
// NS ENTRY WWWHHH
|
|
WORKVAR := VAL_NS( UFILENAME, MENTRY_SIZE )
|
|
IF EMPTY(WORKVAR)
|
|
// SINGLE NUMBER PROCESSING
|
|
LEFTNUM := ALLTRIM(MENTRY_SIZE)
|
|
IF RIGHT(LEFTNUM,1)$'"'
|
|
LEFTNUM := ALLTRIM( STRTRAN( LEFTNUM, '"', ' ' ))
|
|
ADD_QUOTE2 := .T.
|
|
ENDIF
|
|
|
|
WORKVAR := VAL_WD( UFILENAME, LEFTNUM )
|
|
IF !EMPTY(WORKVAR)
|
|
WORKVAR := {LEFTNUM, '', 'WO'}
|
|
MENTRY_SIZE := ALLTRIM(LEFTNUM)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// GOOD SIZE / HOW MEAS COMBO, NOW TEST FOR REASONABLE ENTRY SIZES
|
|
|
|
IF EMPTY(WORKVAR)
|
|
SIZE_ERR()
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
MWIDTH := WORKVAR[1]
|
|
MHEIGHT := WORKVAR[2]
|
|
MHOW_MEAS := WORKVAR[3]
|
|
|
|
XWIDTH := DECVAL(MWIDTH)
|
|
XHEIGHT := DECVAL(MHEIGHT)
|
|
|
|
IF PUFILENAME = NIL // NOT MISC LINE ITEMS
|
|
|
|
SEEKKEY := (UFILENAME)->PROD_CODE
|
|
PRODUCT->(DBSEEK(SEEKKEY))
|
|
M1 := ' MAX WIDTH IS ' + STR(PRODUCT->MAXWIDTH)
|
|
M2 := ' MAX HEIGHT IS ' + STR(PRODUCT->MAXHEIGHT)
|
|
M3 := ' MAX SQFT IS ' + STR(PRODUCT->MAXSQFT)
|
|
M4 := ' Press Any Key to Continue . . .'
|
|
ERRFLAG := .F.
|
|
IF PRODUCT->MAXWIDTH > 0
|
|
IF XWIDTH > PRODUCT->MAXWIDTH
|
|
ERRFLAG := .T.
|
|
ENDIF
|
|
ENDIF
|
|
IF PRODUCT->MAXHEIGHT > 0
|
|
IF XHEIGHT > PRODUCT->MAXHEIGHT
|
|
ERRFLAG := .T.
|
|
ENDIF
|
|
ENDIF
|
|
IF PRODUCT->MAXSQFT > 0
|
|
IF (XWIDTH * XHEIGHT) / 144 > PRODUCT->MAXSQFT
|
|
ERRFLAG := .T.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ERRFLAG
|
|
ERR_BOX('*** WARNING - MAXIMUM SIZE WAS EXCEEDED!', M1, M2, M3, M4)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
// IT'S A GOOD ENTRY, SO UPDATE HEIGHT & WIDTH
|
|
SELECT (UFILENAME)
|
|
REPLACE WIDTH WITH MWIDTH
|
|
REPLACE HEIGHT WITH MHEIGHT
|
|
IF !EMPTY(MHOW_MEAS)
|
|
REPLACE HOW_MEAS WITH MHOW_MEAS
|
|
ENDIF
|
|
IF ADD_QUOTE1 .OR. ADD_QUOTE2
|
|
IF AT('X', MENTRY_SIZE)>0
|
|
WORKVAR := SUBS(MENTRY_SIZE,1, AT('X', MENTRY_SIZE) -1 )
|
|
IF ADD_QUOTE1
|
|
WORKVAR := WORKVAR + '"'
|
|
ENDIF
|
|
IF AT('X', MENTRY_SIZE ) > 0
|
|
WORKVAR := WORKVAR + ' X '
|
|
ENDIF
|
|
WORKVAR := WORKVAR + SUBS(MENTRY_SIZE, AT('X', MENTRY_SIZE)+1 )
|
|
IF ADD_QUOTE2
|
|
WORKVAR := WORKVAR + '"'
|
|
ENDIF
|
|
MENTRY_SIZE := ALLTRIM(WORKVAR)
|
|
ELSE
|
|
IF ADD_QUOTE2
|
|
MENTRY_SIZE := ALLTRIM(MENTRY_SIZE) + '"'
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
REPLACE (UFILENAME)->ENTRY_SIZE WITH MENTRY_SIZE
|
|
** REPLACE (UFILENAME)->ENTRY_SIZE WITH ALLTRIM(MENTRY_SIZE) + ' "'
|
|
**ENDIF
|
|
|
|
IF PUFILENAME = NIL // NOT MISC LINE ITEMS
|
|
|
|
// SET ADDL LINE ENTRY SIZES IF CHANGING PREVIOUS ORDER
|
|
SEEKKEY := ORDER_NUM + PROD_CODE + STR(LINE_NUM,3)
|
|
SELECT USERFILE6
|
|
SAVEORD := INDEXORD()
|
|
|
|
DONSETORD(2) // ORDER + PAR_PROD + LINE_NUM
|
|
SEEK SEEKKEY
|
|
IF FOUND() .AND. ENTRY_SIZE <> (UFILENAME)->ENTRY_SIZE
|
|
REPLACE ENTRY_SIZE WITH (UFILENAME)->ENTRY_SIZE
|
|
REPLACE WIDTH WITH (UFILENAME)->WIDTH
|
|
REPLACE HEIGHT WITH (UFILENAME)->HEIGHT
|
|
REPLACE HOW_MEAS WITH (UFILENAME)->HOW_MEAS
|
|
REPLACE PRICE_SHT WITH (UFILENAME)->PRICE_SHT
|
|
REPLACE NEED_CALC WITH 'Y'
|
|
ENDIF
|
|
DONSETORD(SAVEORD)
|
|
ENDIF
|
|
|
|
SELECT(SAVESEL)
|
|
|
|
IF MHOME_LOC_CODE == 'LINDS ' //** P3N - 5/02/00
|
|
//** LINDA DOES NOT LIKE THIS EDIT
|
|
RETVAL := .T. //** P3N - 5/02/00
|
|
ELSEIF CK_ENTRYSZ() //** P3N - 4/21/00
|
|
RETVAL := .T. //** P3N - 4/21/00
|
|
ELSE //** P3N - 4/21/00
|
|
RETVAL := .F. //** P3N - 4/21/00
|
|
ERR_BOX( ' You can NOT change the entry size!', ; //** P3N - 4/21/00
|
|
' ', ; //** P3N - 4/21/00
|
|
' DELETE line item(F3) and Re-Enter.') //** P3N - 4/21/00
|
|
ENDIF
|
|
RETURN RETVAL
|
|
//**RETURN .T.
|
|
|
|
***********************************************************
|
|
FUNCTION VAL_BW( UFILENAME, MENTRY_SIZE ) // BASEMENT WINDOW
|
|
|
|
// TEST FOR BASEMENT WINDOW 12G, ETC
|
|
LOCAL GPOS := AT( 'G', MENTRY_SIZE )
|
|
LOCAL LEFT_NUM, RIGHT_NUM, MWIDTH, MHEIGHT
|
|
|
|
IF GPOS > 0
|
|
IF LEN(MENTRY_SIZE) = 3 .AND. ;
|
|
ISDIGIT( SUBS(MENTRY_SIZE,1,1) ) .AND. ;
|
|
ISDIGIT( SUBS(MENTRY_SIZE,2,1) ) .AND. ;
|
|
GPOS = 3
|
|
// GOOD BASEMENT WINDOW
|
|
// ONLY GOOD SIZES GOT THIS FAR
|
|
// GET HEIGHT & WIDTH
|
|
LEFT_NUM = LEFT(MENTRY_SIZE,2)
|
|
|
|
// NOW GET THE STRING OF IT
|
|
MWIDTH = VAL(LEFT_NUM)
|
|
MWIDTH = LTRIM(STR( MWIDTH ))
|
|
MHEIGHT = '0'
|
|
** REPLACE (UFILENAME)->HOW_MEAS WITH 'BW'
|
|
RETURN {MWIDTH, MHEIGHT, 'BW'}
|
|
ENDIF
|
|
ENDIF
|
|
RETURN NIL
|
|
|
|
|
|
|
|
|
|
* ELSE
|
|
* RETURN NIL
|
|
* ERR_BOX( ' BASEMENT WINDOWS Must be ', ;
|
|
* ' WINDOW SIZE "G" ', ;
|
|
* ' ie: "20G" ' , ;
|
|
* ' PLEASE RE-ENTER ')
|
|
*
|
|
* RETURN .F.
|
|
* ENDIF
|
|
* RETURN .T.
|
|
*ELSE
|
|
* RETURN .F.
|
|
*ENDIF
|
|
|
|
|
|
***********************************************************
|
|
|
|
FUNCTION VAL_FI( UFILENAME, MENTRY_SIZE , DOMSG) // FEET'INCHES
|
|
|
|
// CHECK FOR WIDTH ONLY MEASUREMENT IE 3'6 FI - FEET'INCHES
|
|
LOCAL WOPOS := AT( "'", MENTRY_SIZE)
|
|
LOCAL LEFTPART, RITEPART, WORKVAR, I
|
|
LOCAL LEFT_NUM, RIGHT_NUM, DO_ERR := .F.
|
|
LOCAL STARTFRAC := 0
|
|
|
|
IF DOMSG = NIL
|
|
DOMSG := .T.
|
|
ENDIF
|
|
|
|
IF WOPOS > 1 // AT LEAST IN SECOND POSTION
|
|
LEFTPART = SUBS(MENTRY_SIZE,1, WOPOS-1)
|
|
// COULD HAVE FRACTIONS OR NOT?
|
|
RITEPART = ALLTRIM(SUBS(MENTRY_SIZE,WOPOS+1))
|
|
STARTFRAC := AT( " ", RITEPART)
|
|
IF STARTFRAC = 0
|
|
STARTFRAC := LEN(RITEPART)
|
|
ENDIF
|
|
IF VAL(LEFTPART ) > 0
|
|
WORKVAR := ''
|
|
FOR I := 1 TO LEN(RITEPART)
|
|
IF !ISDIGIT(SUBS(RITEPART,I,1))
|
|
DO_ERR := .T.
|
|
EXIT
|
|
ELSE
|
|
WORKVAR := WORKVAR + SUBS(RITEPART,I,1)
|
|
ENDIF
|
|
NEXT
|
|
IF LEN(WORKVAR) = 0
|
|
DO_ERR := .T.
|
|
ENDIF
|
|
ELSE
|
|
DO_ERR := .T.
|
|
ENDIF
|
|
IF DO_ERR
|
|
IF DO_MSG
|
|
ERR_BOX( ' WIDTH ONLY WINDOWS Must be', ;
|
|
' Width in FEET and INCHES ', ;
|
|
[ ie: "3'6" ] , ;
|
|
' PLEASE RE-ENTER ')
|
|
|
|
ENDIF
|
|
RETURN .F.
|
|
ELSE
|
|
// GOOD WIDTH ONLY WINDOW
|
|
// ONLY GOOD SIZES GOT THIS FAR
|
|
// GET HEIGHT & WIDTH
|
|
LEFT_NUM = LEFTPART
|
|
RIGHT_NUM = RITEPART
|
|
|
|
// NOW GET THE STRING OF IT
|
|
MWIDTH = ( VAL(LEFT_NUM) * 12 ) + VAL(RIGHT_NUM)
|
|
MWIDTH = LTRIM(STR( MWIDTH ))
|
|
MHEIGHT = '0'
|
|
REPLACE (UFILENAME)->HOW_MEAS WITH 'WO'
|
|
ENDIF
|
|
RETURN .T.
|
|
ELSE
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
|
|
***********************************************************
|
|
|
|
FUNCTION VAL_WD( UFILENAME, MENTRY_SIZE , DOMSG) // FEET'INCHES
|
|
|
|
// CHECK FOR WIDTH ONLY MEASUREMENT IE 3'6 1/4 FI - FEET'INCHES
|
|
LOCAL WOPOS := AT( "'", MENTRY_SIZE)
|
|
LOCAL FRPOS := AT( "/", MENTRY_SIZE)
|
|
LOCAL PEPOS := AT( ".", MENTRY_SIZE)
|
|
LOCAL LEFTPART, RITEPART, WORKVAR, I
|
|
LOCAL FT_NUM:='', IN_NUM:='', DO_ERR := .F.
|
|
LOCAL FTPART:=0, INPART:=0, FRPART:=0
|
|
LOCAL STARTFRAC := 0
|
|
|
|
IF DOMSG = NIL
|
|
DOMSG := .T.
|
|
ENDIF
|
|
|
|
IF WOPOS > 1 // HAVE THE FEET PART
|
|
FT_NUM = SUBS(MENTRY_SIZE,1, WOPOS-1)
|
|
ENDIF
|
|
RITEPART := ALLTRIM(SUBS(MENTRY_SIZE,WOPOS+1))
|
|
IF FRPOS = 0 ; // NO "/" FRACTION
|
|
.OR. PEPOS > 0 .AND. FRPOS = 0 // DECIMAL IE 10' 6.5
|
|
IN_NUM := RITEPART
|
|
ELSE
|
|
IF FRPOS > 0
|
|
IN_NUM := CHK_FRACTION(RITEPART, 'VALUE')
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF EMPTY(IN_NUM) .AND. EMPTY(FT_NUM)
|
|
RETURN NIL
|
|
ELSE
|
|
// GOOD WIDTH ONLY WINDOW
|
|
// ONLY GOOD SIZES GOT THIS FAR
|
|
// GET HEIGHT & WIDTH
|
|
// NOW GET THE STRING OF IT
|
|
MWIDTH = ( VAL(FT_NUM) * 12 ) + DECVAL(IN_NUM)
|
|
MWIDTH = LTRIM(STR( MWIDTH,10,4 ))
|
|
**MHEIGHT = '0'
|
|
**REPLACE (UFILENAME)->HOW_MEAS WITH 'WO'
|
|
**RETURN { MWIDTH, MHEIGHT, 'WO' }
|
|
RETURN { MWIDTH, 'WO' }
|
|
ENDIF
|
|
|
|
|
|
***********************************************************
|
|
|
|
FUNCTION VAL_NS( UFILENAME, MENTRY_SIZE ) // NOMINAL SIZE
|
|
|
|
LOCAL MLEN := LEN(ALLTRIM(MENTRY_SIZE))
|
|
LOCAL DO_ERR:=.F., L, LEFT_NUM, RIGHT_NUM
|
|
LOCAL MWIDTH, MHEIGHT
|
|
|
|
MENTRY_SIZE := ALLTRIM(MENTRY_SIZE)
|
|
// SEE IF A NOMINAL VALID SIZE
|
|
IF MLEN < 4 .OR. MLEN > 6
|
|
RETURN NIL
|
|
**DO_ERR := .T.
|
|
ELSE
|
|
FOR L = 1 TO LEN(MENTRY_SIZE)
|
|
IF !ISDIGIT(SUBSTR(MENTRY_SIZE,L,1))
|
|
RETURN NIL
|
|
******EXIT
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
|
|
* IF DO_ERR
|
|
* RETURN .F.
|
|
* ELSE
|
|
// ONLY GOOD SIZES GOT THIS FAR
|
|
// GET HEIGHT & WIDTH
|
|
DO CASE
|
|
CASE MLEN = 4
|
|
LEFT_NUM = '0' + LEFT(MENTRY_SIZE,2)
|
|
RIGHT_NUM = '0' + RIGHT(MENTRY_SIZE,2)
|
|
CASE MLEN = 5
|
|
LEFT_NUM = LEFT(MENTRY_SIZE,3)
|
|
RIGHT_NUM = '0' + RIGHT(MENTRY_SIZE,2)
|
|
CASE MLEN = 6
|
|
LEFT_NUM = LEFT(MENTRY_SIZE,3)
|
|
RIGHT_NUM = RIGHT(MENTRY_SIZE,3)
|
|
ENDCASE
|
|
|
|
// NOW GET THE STRING OF IT
|
|
MWIDTH = (VAL(LEFT(LEFT_NUM,2)) * 12) + VAL(RIGHT(LEFT_NUM,1))
|
|
MWIDTH = LTRIM(STR( MWIDTH ))
|
|
MHEIGHT = (VAL(LEFT(RIGHT_NUM,2)) * 12) + VAL(RIGHT(RIGHT_NUM,1))
|
|
MHEIGHT = LTRIM(STR( MHEIGHT))
|
|
// UPDATE NS HOW MEAS FOR NOMINAL SIZES
|
|
// OR REMOVE NS IF 'X' TYPE ENTRY SIZE
|
|
**REPLACE (UFILENAME)->HOW_MEAS WITH 'NS'
|
|
RETURN { MWIDTH, MHEIGHT, 'NS' }
|
|
|
|
** ENDIF
|
|
|
|
RETURN .T.
|
|
|
|
****************************************************************
|
|
// ROUND THE WIDTH / HEIGHT IF ADJUST ENTRY SIZE INFO FOUND
|
|
|
|
FUNCTION RND_WID_HT(MPROD_CODE, GET_ARR)
|
|
|
|
//* SPIN THRU GET_ARR FOR ALL WIDTH/HT ADJUSTMENTS AND KEEP RUNNING TOTAL
|
|
LOCAL WK_WIDTH := DECVAL(USERFILE2->WIDTH)
|
|
LOCAL WORKVAL, WK_HEIGHT := DECVAL(USERFILE2->HEIGHT)
|
|
|
|
LOCAL ADJ_ARR, STRARR
|
|
|
|
IF EMPTY(GET_ARR)
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
ADJ_ARR := FIND_OPTS(GET_ARR)
|
|
|
|
// UPDATE PRD SIZE FIRST
|
|
IF ADJ_ARR[5] <> 0 // ROUND WIDTH TO
|
|
WORKVAL := ROUNDUP(WK_WIDTH, ADJ_ARR[5])
|
|
STR_ARR := PRNT_SIZE( WORKVAL, , , , .T. )
|
|
REPLACE USERFILE2->WIDTH WITH ALLTRIM( STR_ARR[1] )
|
|
ENDIF
|
|
IF ADJ_ARR[6] <> 0 // ROUND HEIGHT TO
|
|
WORKVAL := ROUNDUP(WK_HEIGHT, ADJ_ARR[6])
|
|
STR_ARR := PRNT_SIZE( WORKVAL, , , , .T. )
|
|
REPLACE USERFILE2->HEIGHT WITH ALLTRIM( STR_ARR[1] )
|
|
ENDIF
|
|
|
|
RETURN .T.
|
|
|
|
|
|
****************************************************************
|
|
//* CALCULATE THE BILLING HEIGHT/WIDTH
|
|
****************************************************************
|
|
|
|
FUNCTION BILL_SIZE(MPROD_CODE, ADDL_MODE, GET_ARR)
|
|
|
|
// ENTRY SIZE IS THE SIZE USER ENTERED
|
|
// BIL_SIZE IS THE SIZE TO BILL ON BASED ON CONVERSION
|
|
// FROM HOW_MEASURED AND CUTTING ADJUSTMENTS
|
|
**// ACT_SIZE IS THE ACTUAL TIP TO TIP MEASURMENT OF WINDOW / PARENT PRODUCT
|
|
|
|
LOCAL MWIDTH, SEEKKEY
|
|
LOCAL MHEIGHT, ADDL_CATCODE, SIZE_ARR
|
|
LOCAL ACT_PAR_WD
|
|
LOCAL ACT_PAR_HT
|
|
LOCAL SEEKPROD
|
|
LOCAL ES_WD:=0, ES_HT:=0
|
|
LOCAL ADJ_ARR
|
|
|
|
IF EMPTY(GET_ARR)
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
ADJ_ARR := FIND_OPTS(GET_ARR)
|
|
// RETURNS {WIDTH, HEIGHT, BWIDTH, BHEIGHT, WID_RND, HT_RND, WID_BRND, HT_BRND }
|
|
|
|
MWIDTH := DECVAL(USERFILE2->WIDTH)
|
|
MHEIGHT := DECVAL(USERFILE2->HEIGHT)
|
|
|
|
IF EMPTY( USERFILE2->PAR_PROD )
|
|
SEEKPROD := USERFILE2->PROD_CODE
|
|
ELSE
|
|
SEEKPROD := USERFILE2->PAR_PROD
|
|
ENDIF
|
|
IF PRODUCT->(DBSEEK(SEEKPROD))
|
|
ELSE
|
|
? 'ERROR IN SEEK ON PRODUCT IN BILL_SIZE IN CGWPRPO! '
|
|
WAIT
|
|
ENDIF
|
|
|
|
SIZE_ARR := CONV_SIZE(SEEKPROD, MWIDTH, MHEIGHT, USERFILE2->HOW_MEAS)
|
|
IF EMPTY(SIZE_ARR[1]) .AND. EMPTY(ADJ_ARR[3])
|
|
ES_WD := 0
|
|
ELSEIF EMPTY(ADJ_ARR[3])
|
|
ES_WD := SIZE_ARR[1]
|
|
ELSEIF EMPTY(SIZE_ARR[1])
|
|
ES_WD := ADJ_ARR[3]
|
|
ELSE
|
|
ES_WD := SIZE_ARR[1] + ADJ_ARR[3]
|
|
ENDIF
|
|
IF EMPTY(SIZE_ARR[2]) .AND. EMPTY(ADJ_ARR[4])
|
|
ES_HT := 0
|
|
ELSEIF EMPTY(ADJ_ARR[4])
|
|
ES_HT := SIZE_ARR[2]
|
|
ELSEIF EMPTY(SIZE_ARR[2])
|
|
ES_HT := ADJ_ARR[4]
|
|
ELSE
|
|
ES_HT := SIZE_ARR[2] + ADJ_ARR[4]
|
|
ENDIF
|
|
|
|
// NOW, ES_HT AND ES_WIDTH ARE THE TIP TO TIP MEASURMENTS OF
|
|
// PRODUCT OR ATTACH TO PARENT PRODUCT
|
|
|
|
// ADDITIONAL MODE OR PARENT PRODUCT- GET SIZE SPECS FROM PARENT DEFINITION
|
|
// WHICH WILL FURTHER ADJUST THE "ATTACH ON" PRODUCT
|
|
IF !EMPTY( USERFILE2->PAR_PROD )
|
|
ADDL_CATCODE := GET_CATCODE(USERFILE2->PROD_CODE)
|
|
|
|
// GET THE TIP TO TIP MEASUREMENT OF PARENT WINDOW
|
|
|
|
SELECT USERFILE2
|
|
DO CASE
|
|
CASE TRIM(ADDL_CATCODE) == 'SCREENS'
|
|
|
|
CASE TRIM(ADDL_CATCODE) == 'STORMS'
|
|
ES_WD := PRODUCT->STR_WIDTH + ES_WD
|
|
ES_HT := PRODUCT->STR_HEIGHT + ES_HT
|
|
|
|
OTHERWISE
|
|
? 'NEW/UNDEFINED ADDITIONAL PRODUCT APPEARED IN BILL_SIZE-CGWPRPO'
|
|
WAIT
|
|
ENDCASE
|
|
ENDIF
|
|
|
|
IF ES_WD > 999.9999
|
|
ERR_BOX('** ERROR in Billing Width calculation! **', ' ', ;
|
|
' Billing Width should be less than 999.9999 / calc. = ' + ;
|
|
STR(ES_WD, 12,4) )
|
|
ELSE
|
|
REPLACE USERFILE2->BIL_WIDTH WITH ES_WD
|
|
ENDIF
|
|
IF ES_HT > 999.9999
|
|
ERR_BOX('** ERROR in Billing Height calculation! **', ' ', ;
|
|
' Billing Height should be less than 999.9999 / calc. = ' + ;
|
|
STR(ES_HT, 12,4) )
|
|
ELSE
|
|
REPLACE USERFILE2->BIL_HEIGHT WITH ES_HT
|
|
ENDIF
|
|
|
|
// UI SIZE USED FOR BILLING ONLY WHEN PRICED BY THE UNITED INCH
|
|
IF (USERFILE2->BIL_WIDTH+USERFILE2->BIL_HEIGHT) > 999.99
|
|
ERR_BOX('** ERROR in UI SIZE calculation! **', ' ', ;
|
|
' UI SIZE should be less than 999.99 / calc. = ' + ;
|
|
STR(USERFILE2->BIL_WIDTH+USERFILE2->BIL_HEIGHT, 8,2) )
|
|
ELSE
|
|
REPLACE USERFILE2->UI_SIZE WITH ;
|
|
ROUNDUP(USERFILE2->BIL_WIDTH) + ROUNDUP(USERFILE2->BIL_HEIGHT)
|
|
ENDIF
|
|
// UPDATE ACTUAL SIZE FOR SAW HERE BASED ON SIZE BEFORE OPTIONS ADJUSTMENTS.
|
|
IF ADDL_MODE .OR. !EMPTY(USERFILE2->PAR_PROD)
|
|
SELECT PRODUCT
|
|
SEEK USERFILE2->PROD_CODE // GO BACK TO ADDL_PRODUCT DEFINITION
|
|
ENDIF
|
|
|
|
RETURN
|
|
|
|
****************************************************************
|
|
****************************************************************
|
|
//* CALCULATE THE PRODUCTION HEIGHT/WIDTH
|
|
****************************************************************
|
|
****************************************************************
|
|
FUNCTION CLR_SS_GLASS(GET_ARR, FILE2USE)
|
|
|
|
LOCAL SAVESEL := SELECT()
|
|
LOCAL ELEM1, ELEM2
|
|
|
|
//* SPIN THRU GET_ARR AND LOOK FOR GL TYPE = 'CLEAR' .AND. GL STRENG = 'SINGLE'
|
|
ELEM1 = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'GL STREN'})
|
|
IF ELEM1 > 0 .AND. ALLTRIM(GET_ARR[ELEM1, 4]) == 'SINGLE STRENGTH'
|
|
ELEM2 = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'GL TYPE'})
|
|
IF ELEM2 > 0 .AND. ALLTRIM(GET_ARR[ELEM2, 4]) == 'CLEAR'
|
|
REPLACE (FILE2USE)->CLEAR_SS WITH 'Y'
|
|
RETURN
|
|
ENDIF
|
|
ENDIF
|
|
|
|
REPLACE (FILE2USE)->CLEAR_SS WITH 'N'
|
|
RETURN
|
|
|
|
****************************************************************
|
|
FUNCTION PROD_SIZE(GET_ARR,SEEKPROD, ADDL_MODE)
|
|
|
|
//* SPIN THRU GET_ARR FOR ALL WIDTH/HT ADJUSTMENTS AND KEEP RUNNING TOTAL
|
|
|
|
// PRODUCTION SIZE USED TO PRINT ON ORDERS
|
|
// THE PRODUCTION SIZE IS THE (ENTRY SIZE + CATEGORY ADJUSTMENTS)
|
|
// -OR- THE BILLING SIZE ABOVE + THE OPTION SIZE ADJUSTMENTS
|
|
// ALSO WILL CALC THE ACTUAL FINISHED PRODUCTION SIZE
|
|
|
|
LOCAL ADJ_ARR, SIZE_ARR := {}
|
|
LOCAL MWIDTH := DECVAL(USERFILE2->WIDTH)
|
|
LOCAL MHEIGHT := DECVAL(USERFILE2->HEIGHT)
|
|
LOCAL ES_WD := 0, EW_HT := 0, WK := 0
|
|
LOCAL AES_WD := 0, AEW_HT := 0
|
|
|
|
IF EMPTY(GET_ARR)
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
ADJ_ARR := FIND_OPTS(GET_ARR)
|
|
// ADJ ADJ ADJ BILL SIZE? RND_TT_WD RND_TT_H RND_BI_WD RND_BI_HT ADJ_TTSZ?
|
|
// RETURNS {WIDTH, HEIGHT, BWIDTH, BHEIGHT, WID_RND, HT_RND, WID_BRND, HT_BRND, ADJ_ACT_WD, ADJ_ACT_HT }
|
|
|
|
|
|
IF EMPTY( USERFILE2->PAR_PROD )
|
|
SEEKPROD := USERFILE2->PROD_CODE
|
|
ELSE
|
|
SEEKPROD := USERFILE2->PAR_PROD
|
|
ENDIF
|
|
PRODUCT->(DBSEEK(SEEKPROD))
|
|
|
|
SIZE_ARR := CONV_SIZE(SEEKPROD, MWIDTH, MHEIGHT, USERFILE2->HOW_MEAS)
|
|
|
|
ES_WD := SIZE_ARR[1] + ADJ_ARR[1]
|
|
ES_HT := SIZE_ARR[2] + ADJ_ARR[2]
|
|
AES_WD := ES_WD - ADJ_ARR[9]
|
|
AES_HT := ES_HT - ADJ_ARR[10]
|
|
**AES_WD := SIZE_ARR[1] + ADJ_ARR[9]
|
|
**AES_HT := SIZE_ARR[2] + ADJ_ARR[10]
|
|
|
|
// UPDATE PRD SIZE FIRST
|
|
**IF AES_WD > 999.9999 // PERRY - 2/18/98
|
|
IF AES_WD > 999.9999 // PERRY - 2/18/98
|
|
ERR_BOX('** ERROR in Production Width calculation! **', ' ', ;
|
|
' Production Width should be less than 999.9999 / calc. = ' + ;
|
|
STR(ES_WD, 12,4) )
|
|
ELSE
|
|
**REPLACE USERFILE2->PRD_WIDTH WITH ES_WD // AES??? PERRY - 2/18/98
|
|
REPLACE USERFILE2->PRD_WIDTH WITH AES_WD // PERRY - 2/18/98
|
|
ENDIF
|
|
**IF ES_HT > 999.9999 // PERRY - 2/18/98
|
|
IF AES_HT > 999.9999 // PERRY - 2/18/98
|
|
ERR_BOX('** ERROR in Production Height calculation! **', ' ', ;
|
|
' Production Height should be less than 999.9999 / calc. = ' + ;
|
|
STR(ES_HT, 12,4) )
|
|
ELSE
|
|
**REPLACE USERFILE2->PRD_HEIGHT WITH ES_HT
|
|
REPLACE USERFILE2->PRD_HEIGHT WITH AES_HT // PERRY - 2/18/98
|
|
ENDIF
|
|
|
|
**REPLACE USERFILE2->PRD_WIDTH WITH USERFILE2->BIL_WIDTH + ADJ_ARR[1]
|
|
**REPLACE USERFILE2->PRD_HEIGHT WITH USERFILE2->BIL_HEIGHT + ADJ_ARR[2]
|
|
* IF ADJ_ARR[5] <> 0 // ROUND WIDTH TO
|
|
* REPLACE USERFILE2->PRD_WIDTH WITH ROUNDUP(USERFILE2->PRD_WIDTH, ADJ_ARR[5])
|
|
* ENDIF
|
|
* IF ADJ_ARR[6] <> 0 // ROUND HEIGHT TO
|
|
* REPLACE USERFILE2->PRD_HEIGHT WITH ROUNDUP(USERFILE2->PRD_HEIGHT, ADJ_ARR[6])
|
|
* ENDIF
|
|
|
|
// UPDATE ACTUAL SIZE NEXT
|
|
// ALWAYS ADJUST FOR SAW CUTTING ??
|
|
IF AES_WD+PRODUCT->SAW_WIDTH > 999.9999 // PERRY - 4/8/98
|
|
ERR_BOX('** ERROR in ACTUAL Width calculation! **', ' ', ;
|
|
' Actual Width should be less than 999.9999 / calc. = ' + ;
|
|
STR(AES_WD + PRODUCT->SAW_WIDTH, 12,4) )
|
|
ELSE
|
|
REPLACE USERFILE2->ACT_WIDTH WITH AES_WD ;
|
|
+ PRODUCT->SAW_WIDTH
|
|
ENDIF
|
|
IF AES_HT+PRODUCT->SAW_HEIGHT > 999.9999 // PERRY - 4/8/98
|
|
ERR_BOX('** ERROR in ACTUAL Height calculation! **', ' ', ;
|
|
' Actual Height should be less than 999.9999 / calc. = ' + ;
|
|
STR(AES_HT + PRODUCT->SAW_HEIGHT, 12,4) )
|
|
ELSE
|
|
REPLACE USERFILE2->ACT_HEIGHT WITH AES_HT ;
|
|
+ PRODUCT->SAW_HEIGHT
|
|
ENDIF
|
|
|
|
**REPLACE USERFILE2->ACT_WIDTH WITH USERFILE2->PRD_WIDTH + PRODUCT->SAW_WIDTH
|
|
**REPLACE USERFILE2->ACT_HEIGHT WITH USERFILE2->PRD_HEIGHT + PRODUCT->SAW_HEIGHT
|
|
|
|
* REPLACE USERFILE2->ACT_WIDTH WITH USERFILE2->ACT_WIDTH + ADJ_ARR[3]
|
|
* REPLACE USERFILE2->ACT_HEIGHT WITH USERFILE2->ACT_HEIGHT + ADJ_ARR[4]
|
|
* IF ADJ_ARR[7] <> 0 // ROUND WIDTH TO ON TT SIZE
|
|
* REPLACE USERFILE2->ACT_WIDTH WITH ROUNDUP(USERFILE2->ACT_WIDTH, ADJ_ARR[7])
|
|
* ENDIF
|
|
* IF ADJ_ARR[8] <> 0 // ROUND HEIGHT TO ON TT SIZE
|
|
* REPLACE USERFILE2->ACT_HEIGHT WITH ROUNDUP(USERFILE2->ACT_HEIGHT, ADJ_ARR[8])
|
|
* ENDIF
|
|
|
|
// UPDATE ACTUAL NOMINAL WIDTH, HEIGHT
|
|
// ADJUSTED FOR TT ROUNDING ABOVE IN THE ACT_HEIGHT PART
|
|
WK := USERFILE2->ACT_WIDTH - PRODUCT->SAW_WIDTH - PRODUCT->NS_WIDTH
|
|
IF WK > 999.9999 .OR. WK < -999.9999 //** P3N - 4/8/98
|
|
ERR_BOX('** ERROR in ACTUAL NOM Width calculation! **', ' ', ;
|
|
' Actual NOM Width should be less than 999.9999 / calc. = ' + ;
|
|
STR(WK, 12,4) )
|
|
ELSE
|
|
REPLACE USERFILE2->NOM_WIDTH WITH USERFILE2->ACT_WIDTH ;
|
|
- PRODUCT->SAW_WIDTH - PRODUCT->NS_WIDTH
|
|
ENDIF
|
|
WK := USERFILE2->ACT_HEIGHT - PRODUCT->SAW_HEIGHT - PRODUCT->NS_HEIGHT
|
|
IF WK > 999.9999 .OR. WK < -999.9999 //** P3N - 4/8/98
|
|
ERR_BOX('** ERROR in ACTUAL NOM Height calculation! **', ' ', ;
|
|
' Actual NOM Height should be less than 999.9999 / calc. = ' + ;
|
|
STR(WK, 12,4) )
|
|
ELSE
|
|
REPLACE USERFILE2->NOM_HEIGHT WITH USERFILE2->ACT_HEIGHT ;
|
|
- PRODUCT->SAW_HEIGHT - PRODUCT->NS_HEIGHT
|
|
ENDIF
|
|
|
|
RETURN .T.
|
|
|
|
|
|
********************************************************************
|
|
* THIS FUNC ROUNDS NUMBERS UP IF NEEDED (THE OLD ROUND FUNC)
|
|
********************************************************************
|
|
FUNCTION ROUNDUP(VAL2ROUND, ROUND2)
|
|
LOCAL WORKVAL, DECVAL
|
|
|
|
IF ROUND2 = NIL
|
|
ROUND2 := 0
|
|
ENDIF
|
|
|
|
IF ROUND2 > 1 .OR. ROUND2 < 0
|
|
ERR_BOX('*** INVALID ROUND TO VALUE ' + STR(ROUND2,8,4) , ;
|
|
'*** Value NOT ROUNDED!' , ;
|
|
'*** CHECK THE MODEL SETUP')
|
|
RETURN VAL2ROUND
|
|
ENDIF
|
|
|
|
IF ROUND2 = 0 // ROUND TO INTEGER
|
|
IF VAL2ROUND - INT(VAL2ROUND) = 0
|
|
RETURN VAL2ROUND
|
|
ELSE
|
|
RETURN INT(VAL2ROUND) + 1
|
|
ENDIF
|
|
ELSE
|
|
DECVAL := VAL2ROUND - INT(VAL2ROUND) // DECIMAL PORTION
|
|
IF DECVAL = 0
|
|
RETURN VAL2ROUND
|
|
ELSE
|
|
WORKVAL := DECVAL
|
|
DO WHILE WORKVAL > ROUND2
|
|
WORKVAL := WORKVAL - ROUND2
|
|
ENDDO
|
|
RETURN VAL2ROUND + (ROUND2 - WORKVAL) // ORIG AMT + (DIFF BETWEEN DECVAL AND ROUND2)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
********************************************************************
|
|
* THIS FUNC FINDS ALL OPTIONS IN ORDER TO CALC THE HEIGHT/WIDTH ADJS.
|
|
* AT ALL LEVELS
|
|
********************************************************************
|
|
FUNCTION FIND_OPTS(GET_ARR)
|
|
LOCAL M_HEIGHT := 0, M_WIDTH := 0, MADJ_INVSZ
|
|
LOCAL BHEIGHT := 0, BWIDTH := 0
|
|
LOCAL OO_KEY, I, II, USER_CHOICE, MRULE, WID_RND := 0, HT_RND := 0
|
|
LOCAL WID_BADJ := 0
|
|
LOCAL HT_BADJ := 0, H_ADJAMT:= 0, W_ADJAMT:= 0
|
|
LOCAL WID_AADJ := 0
|
|
LOCAL HT_AADJ := 0
|
|
|
|
//* SEARCH ALL SELECTED OPTIONS IN THE GET_ARR, AND MAKE ADJUSTMENTS ON
|
|
//* ALL OPTIONS FOUND IN THE ORDER OPTIONS FILE SELECTED AT ORDER ENTRY TIME
|
|
FOR I := 1 TO LEN(GET_ARR)
|
|
USER_CHOICE := GET_ARR[I,4]
|
|
FOR II := 1 TO LEN(GET_ARR[I, 3]) // OPTION ARRAY
|
|
IF ALLTRIM(USER_CHOICE) == ALLTRIM(GET_ARR[I, 3, II, 1]) // OPT DESC
|
|
MRULE := GET_ARR[I,3,II,14] // ROUND WIDTH RULE
|
|
// ALWAYS ADJUST THE WIDTH - NO RULE
|
|
// CHECK IF THERE IS A WIDTH ROUND RULE
|
|
IF EMPTY(MRULE) .OR. CHK_RULE(MRULE, GET_ARR, , _SELFILE)
|
|
WID_RND := WID_RND + GET_ARR[I,3,II,13] // ROUND WIDTH AMOUNT
|
|
ENDIF
|
|
|
|
MRULE := GET_ARR[I,3,II,16] // ROUND HEIGHT RULE
|
|
// ALWAYS ADJUST THE HEIGHT - NO RULE
|
|
// CHECK IF THERE IS A HEIGHT ROUND RULE
|
|
IF EMPTY(MRULE) .OR. CHK_RULE(MRULE, GET_ARR, , _SELFILE)
|
|
HT_RND := HT_RND + GET_ARR[I,3,II,15] // ROUND HEIGHT AMOUNT
|
|
ENDIF
|
|
|
|
// AMT TO ADJUST PRODUCTION WIDTHS AND HEIGHTS (PRD AND ACTUAL)
|
|
W_ADJAMT := GET_ARR[I,3,II,8] // ADJ WD AMT
|
|
H_ADJAMT := GET_ARR[I,3,II,9] // ADJ HT AMT
|
|
IF W_ADJAMT <> 0 .OR. H_ADJAMT <> 0
|
|
//// IF MADJ_TTSZ$'Y'
|
|
M_WIDTH := M_WIDTH + W_ADJAMT // OPT WIDTH ADJ
|
|
M_HEIGHT := M_HEIGHT + H_ADJAMT // OPT HEIGHT ADJ
|
|
* M_WIDTH := M_WIDTH + GET_ARR[I, 3, II, 8] // OPT WIDTH ADJ
|
|
* M_HEIGHT := M_HEIGHT + GET_ARR[I, 3, II, 9] // OPT HEIGHT ADJ
|
|
MADJ_INVSZ := GET_ARR[I, 3, II, 12] // OPT ADJ BILL?
|
|
IF MADJ_INVSZ$'Y'
|
|
// AMT TO ADJUST BILLING WIDTHS AND HEIGHTS
|
|
BWIDTH := BWIDTH + W_ADJAMT // OPT WIDTH ADJ
|
|
BHEIGHT := BHEIGHT + H_ADJAMT // OPT HEIGHT ADJ
|
|
** BWIDTH := BWIDTH + GET_ARR[I, 3, II, 8] // OPT WIDTH ADJ
|
|
** BHEIGHT := BHEIGHT + GET_ARR[I, 3, II, 9] // OPT HEIGHT ADJ
|
|
WID_BADJ := WID_BADJ + W_ADJAMT
|
|
HT_BADJ := HT_BADJ + H_ADJAMT
|
|
ENDIF
|
|
IF GET_ARR[I,3,II,17]$'N' // ADJ_TTSZ BLANK DEFAULTS TO YES
|
|
WID_AADJ := WID_AADJ + W_ADJAMT // THIS IS AMT TO ADD BACK IF NO ADJ
|
|
HT_AADJ := HT_AADJ + H_ADJAMT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
NEXT
|
|
//PRD/ACT ADJ BILL ADJ ROUND TO PRD/ACT ADJ ROUND TO BILL ADJ? ADJ TT SIZE?
|
|
RETURN {M_WIDTH, M_HEIGHT, BWIDTH, BHEIGHT, WID_RND, HT_RND , WID_BADJ, HT_BADJ , WID_AADJ, HT_AADJ }
|
|
|
|
********************************************************************
|
|
//** P3N - 4/21/00 DO NOT ALLOW UPDATE OF A LINE ITEM ENTRY SIZE
|
|
//** PER SCOTT IN KC
|
|
********************************************************************
|
|
FUNCTION CK_ENTRYSZ()
|
|
LOCAL SVREC := (CUR_OL)->(RECNO())
|
|
LOCAL CURFILE := ALIAS(), RETVAL := .T.
|
|
//**LOCAL SEEKKEY := (CURFILE)->ORDER_NUM + STR( (CURFILE)->LINE_NUM, 3) //** P3N - 07/10/02
|
|
LOCAL SEEKKEY := (CURFILE)->ORDER_NUM //** P3N - 07/10/02 ADDRESS ABEND FOR DARLENE - IOLA
|
|
IF VALTYPE( (CURFILE)->LINE_NUM ) $'N' //** P3N - 07/10/02
|
|
SEEKKEY := SEEKKEY + STR( (CURFILE)->LINE_NUM, 3) //** P3N - 07/10/02
|
|
ELSE //** P3N - 07/10/02
|
|
SEEKKEY := SEEKKEY + (CURFILE)->LINE_NUM //** P3N - 07/10/02
|
|
ENDIF //** P3N - 07/10/02
|
|
IF (CUR_OL)->(DBSEEK(SEEKKEY))
|
|
IF (CUR_OL)->ENTRY_SIZE == (CURFILE)->ENTRY_SIZE
|
|
RETVAL := .T.
|
|
ELSE
|
|
RETVAL := .F.
|
|
ENDIF
|
|
ENDIF
|
|
(CUR_OL)->(DBGOTO(SVREC))
|
|
RETURN RETVAL
|
|
********************************************************************
|
|
|
|
FUNCTION UPDATE_SQFT()
|
|
// CALCULATE AND UPDATE THE UI SIZE FIELD
|
|
|
|
LOCAL MHEIGHT, MWIDTH, MCALC
|
|
|
|
IF !EMPTY(USERFILE2->HEIGHT) .AND. !EMPTY(USERFILE2->WIDTH)
|
|
MHEIGHT = DECVAL(USERFILE2->HEIGHT) // CONVERT CHARACTER FRACTIONS
|
|
MWIDTH = DECVAL(USERFILE2->WIDTH)
|
|
MCALC := (MHEIGHT * MWIDTH) / 144
|
|
IF MCALC > 999.99
|
|
ERR_BOX('** ERROR in Square Ft. Calculation! **' ,' ', ;
|
|
'** Sqft. MUST BE LESS THAN 999.99 / calc. = ' + STR(MCALC,9,2) )
|
|
ELSE
|
|
REPLACE USERFILE2->SQFT WITH (MHEIGHT * MWIDTH) / 144
|
|
ENDIF
|
|
ENDIF
|
|
RETURN .T.
|
|
|
|
|
|
********************************************************************
|
|
FUNCTION CHK_FRACTION(C_NUM, ACTION)
|
|
// MAKE SURE C_NUM IS A CHARACTER STRING OF DIGITS AND/OR FRACTIONS
|
|
// FRACTIONS MUST BE IN THIS FORM 1/2, 3/8, WITH NO DECIMALS OR LETTERS
|
|
// IF ACTION = 'VALUE' THEN JUST RETURN THE VALUE, DON'T UPDATE GET FIELD
|
|
|
|
LOCAL SLASH_POS, SPACE1_POS, SPACE2_POS, WHOLE_NUM, FRACTION
|
|
LOCAL TOP_FRACTION, BOTT_FRACTION, DECIMAL_NUM
|
|
LOCAL N_CHOICE, L, X, I, FRACT_PARR := {} , RETVAL
|
|
|
|
IF ACTION = NIL
|
|
ACTION = 'UPDATE'
|
|
ENDIF
|
|
|
|
IF EMPTY(C_NUM)
|
|
|
|
IF ACTION = 'VALUE'
|
|
RETURN C_NUM
|
|
ELSE
|
|
RETURN .T.
|
|
ENDIF
|
|
ELSE
|
|
C_NUM = ALLTRIM(C_NUM) + ' '
|
|
ENDIF
|
|
|
|
IF AT('.', C_NUM) > 0
|
|
IF ACTION = 'VALUE'
|
|
RETURN C_NUM
|
|
ELSE
|
|
RETURN .F.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
FOR L = 1 TO LEN(C_NUM)
|
|
X = UPPER(SUBSTR(C_NUM,L,1))
|
|
IF !X$"0123456789/ '"
|
|
IF X$["'X]
|
|
ELSE
|
|
ERR_BOX( X + ' is an INVALID Character',;
|
|
'Please Re-Enter!')
|
|
ENDIF
|
|
IF ACTION = 'VALUE'
|
|
RETURN C_NUM
|
|
ELSE
|
|
RETURN .F.
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
// CHECK THE SYNTAX
|
|
SLASH_POS = AT('/', C_NUM)
|
|
|
|
**SPACE1_POS = AT(' ', C_NUM)
|
|
SPACE1_POS := LEN(C_NUM)
|
|
FOR I := LEN(C_NUM) - 1 TO 1 STEP -1
|
|
IF SUBS(C_NUM,I,1)$' '
|
|
SPACE1_POS := I
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF SPACE1_POS > SLASH_POS .AND. SLASH_POS <> 0 // NO WHOLE NUMBER!
|
|
WHOLE_NUM = 0
|
|
SPACE1_POS = 1
|
|
ELSE
|
|
WHOLE_NUM = VAL(LEFT(C_NUM, SPACE1_POS-1))
|
|
SPACE1_POS++ // POINT TO FIRST FRACTION DIGIT!
|
|
ENDIF
|
|
|
|
// FIND END OF FRACTION EXPRESSION
|
|
SPACE2_POS = LEN(C_NUM)
|
|
FOR L = SLASH_POS TO LEN(C_NUM)
|
|
X = SUBSTR(C_NUM,L,1)
|
|
IF X = ' '
|
|
SPACE2_POS = L-1 // NEED ACTUAL END OF FRACTION EXPRESSION
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
// MAKE SURE NOTHING COMES AFTER THE FRACTION
|
|
IF !EMPTY(RIGHT(C_NUM, LEN(C_NUM)-SPACE2_POS) )
|
|
ERR_BOX( 'ERRONEOUS Characters Detected after number',;
|
|
'Please Re-Enter!')
|
|
IF ACTION = 'VALUE'
|
|
RETURN C_NUM
|
|
ELSE
|
|
RETURN .F.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
IF SLASH_POS = 0 // NO FRACTION!
|
|
// CHECK FOR REALISTIC VALUE
|
|
IF WHOLE_NUM > 300
|
|
ERR_BOX( 'That Value is too LARGE',;
|
|
'Please Re-Enter!')
|
|
** RETURN .F.
|
|
IF ACTION = 'VALUE'
|
|
RETURN ALLTRIM(STR(WHOLE_NUM,3))
|
|
ELSE
|
|
RETURN .F.
|
|
ENDIF
|
|
ELSE
|
|
****RETURN .T.
|
|
IF ACTION = 'VALUE'
|
|
RETURN ALLTRIM(STR(WHOLE_NUM,3))
|
|
ELSE
|
|
RETURN .T.
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// VALIDATE FRACTION EXPRESSION
|
|
FRACTION = ALLTRIM(SUBSTR(C_NUM, SPACE1_POS, SPACE2_POS))
|
|
IF ASCAN(FRACTION_ARR, {|X| ALLTRIM(X[1]) == ALLTRIM(FRACTION)}) = 0
|
|
IF ACTION = 'EDIT'
|
|
ERR_BOX( 'Invalid FRACTION Entered' ,;
|
|
'Please Reenter!')
|
|
RETURN .F.
|
|
ENDIF
|
|
DO WHILE .T.
|
|
FOR I := 1 TO LEN(FRACTION_ARR)
|
|
AADD(FRACT_PARR, FRACTION_ARR[I,1])
|
|
NEXT
|
|
NCHOICE = LISTBOX(FRACT_PARR,1,'Choose A Fraction')
|
|
IF LASTKEY() = 27
|
|
IF ACTION = 'VALUE'
|
|
RETURN '0'
|
|
ELSE
|
|
RETURN .F.
|
|
ENDIF
|
|
ENDIF
|
|
IF NCHOICE <> 0
|
|
FRACTION = FRACTION_ARR[ NCHOICE, 1 ]
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF ACTION = 'VALUE'
|
|
IF WHOLE_NUM = 0
|
|
RETURN FRACTION
|
|
ELSE
|
|
RETURN LTRIM(STR(WHOLE_NUM)) + ' ' + FRACTION
|
|
ENDIF
|
|
ELSE
|
|
// UPDATE THE GET VARIABLE IF IT'S A GET
|
|
X = GETACTIVE() // GET CURRENT GET INFO
|
|
IF X:HASFOCUS
|
|
IF WHOLE_NUM = 0
|
|
X:BUFFER := PADR(ALLTRIM(FRACTION), LEN(X[13]), ' ') // X[13] = OLD VALUE OF GET VAR
|
|
ELSE
|
|
X:BUFFER := PADR(LTRIM(STR(WHOLE_NUM)) + ' ' + ALLTRIM(FRACTION) ,LEN(X[13]), ' ')
|
|
ENDIF
|
|
X:ASSIGN()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
|
|
IF ACTION = 'VALUE'
|
|
IF WHOLE_NUM = 0
|
|
RETURN FRACTION
|
|
ELSE
|
|
RETURN LTRIM(STR(WHOLE_NUM)) + ' ' + FRACTION
|
|
ENDIF
|
|
ELSE
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
********************************************************************
|
|
FUNCTION GET_SALEPRICE(MMODEL, MPRICE_TYPE, XPRICE_ARR, GET_ARR, ADDL_MODE, PR_CUSTID)
|
|
// GET THE WHOLE PRICE
|
|
|
|
LOCAL BASE_AMT, OPT_AMT, MEXT_AMT, MSALE_PRICE
|
|
LOCAL DISC_AMT := 0
|
|
LOCAL SAVESEL := SELECT()
|
|
LOCAL MCAT_CODE
|
|
LOCAL MSYS_DISC := 0
|
|
LOCAL MDISC_AMT := 0
|
|
LOCAL MSYS_PCT := (USERFILE2->SYS_DISC * .01)
|
|
LOCAL BASEPRICE_CUST := .F. //P3N - 2/18/98
|
|
LOCAL ABASEPRICE //P3N - 2/18/98
|
|
|
|
// GET THE PRICE ARRAY FOR THIS MPRICE TYPE
|
|
MPRICE_ARR = GET_PRICEARR(XPRICE_ARR, MPRICE_TYPE, PR_CUSTID)
|
|
|
|
// GET BASE PRICE
|
|
IF ADDL_MODE .AND. USERFILE2->STD_OPTS$'Y'
|
|
BASE_AMT := 0
|
|
ELSE
|
|
ABASEPRICE := GET_BASEPRICE(MMODEL, MPRICE_TYPE, XPRICE_ARR, GET_ARR, PR_CUSTID)
|
|
BASE_AMT := ABASEPRICE[1] //* P3N - 2/18/98
|
|
BASEPRICE_CUST := ABASEPRICE[2] //* P3N - 2/18/98
|
|
ENDIF
|
|
IF BASE_AMT > 9999.99
|
|
ERR_BOX('** ERROR in BASE Price Calculation! **' , ' ', ;
|
|
' Base Price should be less than 9999.99 / calc = ' + ;
|
|
STR(BASE_AMT, 9,2) )
|
|
ELSE
|
|
REPLACE USERFILE2->BASE_PRI WITH BASE_AMT
|
|
ENDIF
|
|
// GET ANY OPTION PRICING BEFORE EXTRAS
|
|
OPT_AMT = GET_OPTPRICE(MMODEL, MPRICE_ARR, GET_ARR, 'B')
|
|
IF OPT_AMT > 9999.99
|
|
ERR_BOX('** ERROR in OPTION Pricing Calculation! **' , ' ', ' Option Price should be less than 9999.99 / calc = ' + STR(OPT_AMT, 9,2) )
|
|
ELSE
|
|
REPLACE USERFILE2->OPT_PRI WITH OPT_AMT
|
|
ENDIF
|
|
// GET EXTRA PRICING
|
|
MEXT_AMT = GET_EXTPRICE(GET_ARR, PR_CUSTID)
|
|
IF MEXT_AMT > 9999.99
|
|
ERR_BOX('** ERROR in EXTRA Pricing Calculation! **' , ' ', ;
|
|
' Extra Price should be less than 9999.99 / calc = ' + ;
|
|
STR(MEXT_AMT, 9,2) )
|
|
ELSE
|
|
REPLACE USERFILE2->EXTRA_PRI WITH MEXT_AMT
|
|
ENDIF
|
|
|
|
// GET ANY OPTION PRICING AFTER EXTRAS
|
|
OPT_AMT = GET_OPTPRICE(MMODEL, MPRICE_ARR, GET_ARR, 'A')
|
|
IF OPT_AMT > 9999.99
|
|
ERR_BOX('** ERROR in EXTRA OPTION Pricing Calculation - GET_OPTPRICE()! **' , ' ', ;
|
|
' Option Price should be less than 9999.99 / calc = ' + ;
|
|
STR(OPT_AMT, 9,2) )
|
|
ELSE
|
|
IF OPT_AMT+USERFILE2->OPT_PRI > 9999.99
|
|
ERR_BOX('** ERROR in EXTRA OPTION Pricing Calculation! **' , ' ', ;
|
|
' Option Price should be less than 9999.99 / calc = ' + ;
|
|
STR(OPT_AMT+USERFILE2->OPT_PRI, 9,2) )
|
|
ELSE
|
|
REPLACE USERFILE2->OPT_PRI WITH USERFILE2->OPT_PRI + OPT_AMT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// ADD COMPONENTS TOGETHER TO GET FINAL PRICE
|
|
MSALE_PRICE = USERFILE2->BASE_PRI + ;
|
|
USERFILE2->OPT_PRI + ;
|
|
USERFILE2->EXTRA_PRI
|
|
IF MSALE_PRICE > 9999.99
|
|
ERR_BOX('** ERROR in SALE Price Calculation! **' , ;
|
|
' Sale Price should be less than 9999.99 / calc = ' + ;
|
|
STR(MSALE_PRICE, 9,2), ' ', ;
|
|
' Sale Price can NOT be calculated!' )
|
|
MSALE_PRICE := 0
|
|
ENDIF
|
|
|
|
// ROUND TO NEAREST NICKEL
|
|
MSALE_PRICE = ROUND_IT(MSALE_PRICE, .05)
|
|
|
|
|
|
SELECT (SAVESEL)
|
|
RETURN { MSALE_PRICE, BASEPRICE_CUST }
|
|
|
|
//** MSALE_PRICE // THIS IS THE PER UNIT PRICE
|
|
//** BASEPRICE_CUST // TELLS IF THE BASE PRICE IS FROM THE CUST LVL
|
|
|
|
********************************************************************
|
|
FUNCTION GET_BASEPRICE(MMODEL, MPRICE_TYPE, XPRICE_ARR, GET_ARR, PR_CUSTID)
|
|
// LOOKUP AND CALCULATE PRICING FOR MMODEL ACCORDING TO PRICE TYPE
|
|
// PRICE TYPE: D = DEALER, S = SPECIAL DEALER, B = BUILDER/BUILD TO STOCK
|
|
// PRICE TYPE: J = JOBBER(DISTRUBUTER), L = LUMBERMAN
|
|
// PRICE ARRAY = LIST OF ROW AND COLUMNS
|
|
// GET ARRAY HOLDS THE USER RESPONSES (SEE GET_LINEOPTS FOR ARRAY LAYOUT)
|
|
|
|
LOCAL L, SEEKKEY, MATT_CODE, ELEM, DB_ARR := {}
|
|
LOCAL M_NUM, MUI_SIZE, MFIELD := '', BASE_PRICE:=0, SAVESEL := SELECT()
|
|
LOCAL MCOL_VAR, RETVAL, ELEM2, SCANVAR
|
|
LOCAL MPERCENT, SPECPRICE, FLD_ARR
|
|
LOCAL XFILE, YFILE := ' ',DFILE := ' ' //P3N 2-5-98-CUST.PRICING UPGRD
|
|
LOCAL BASEPRICE_CUST := .F.
|
|
IF MPRICE_TYPE = NIL
|
|
MPRICE_TYPE = ''
|
|
ENDIF
|
|
|
|
**SPECPRICE := CUST_SPEC_BP(MMODEL)
|
|
|
|
**IF SPECPRICE <> NIL
|
|
** RETURN SPECPRICE
|
|
**ENDIF
|
|
|
|
SELECT PRODUCT
|
|
SEEK MMODEL
|
|
|
|
MPERCENT = 0
|
|
IF !EMPTY(PR_CUSTID)
|
|
CUST_BP->(DBSEEK( PR_CUSTID + MMODEL ))
|
|
MPERCENT := CUST_BP->BASEFAC
|
|
ELSE
|
|
DO CASE
|
|
CASE MPRICE_TYPE = 'S'
|
|
IF SD_BASEFAC <> 0
|
|
MPERCENT = SD_BASEFAC
|
|
ENDIF
|
|
|
|
CASE MPRICE_TYPE = 'B'
|
|
IF BU_BASEFAC <> 0
|
|
MPERCENT = BU_BASEFAC
|
|
ENDIF
|
|
|
|
CASE MPRICE_TYPE = 'L'
|
|
IF LU_BASEFAC <> 0
|
|
MPERCENT = LU_BASEFAC
|
|
ENDIF
|
|
|
|
CASE MPRICE_TYPE = 'J'
|
|
IF DI_BASEFAC <> 0
|
|
MPERCENT = DI_BASEFAC
|
|
ENDIF
|
|
|
|
CASE MPRICE_TYPE = 'I'
|
|
IF IN_BASEFAC <> 0
|
|
MPERCENT = IN_BASEFAC
|
|
ENDIF
|
|
|
|
END CASE
|
|
ENDIF
|
|
|
|
// SELECT THE PRICE TABLE
|
|
IF MPERCENT <> 0
|
|
// FORCE IT TO USE DEALER PRICE TABLE
|
|
XFILE = 'D' + ALLTRIM(MMODEL) + '.DBF'
|
|
// NEED TO GET THE DEALER PRICE ARRAY!!!
|
|
MPRICE_ARR = GET_PRICEARR(XPRICE_ARR, 'D', PR_CUSTID)
|
|
ELSE
|
|
MPERCENT = 100 // SET THIS TO 100, FOR NO CHANGE IN PRICE CALC (BELOW)
|
|
IF EMPTY(PR_CUSTID)
|
|
XFILE = MPRICE_TYPE + ALLTRIM(MMODEL) + '.DBF'
|
|
****XFILE := XFILE + '.DBF'
|
|
//** P3N - 2-5-98 - CHANGED TO ADDRESS CUSTOMER PRICING MODIFICATIONS
|
|
// GET THE PRICE ARRAY FOR THIS MPRICE TYPE
|
|
MPRICE_ARR = GET_PRICEARR(XPRICE_ARR, MPRICE_TYPE, PR_CUSTID)
|
|
ELSE
|
|
DFILE := 'D' + ALLTRIM(MMODEL) + '.DBF'
|
|
YFILE := MPRICE_TYPE + ALLTRIM(MMODEL) + '.DBF'
|
|
// UXXXXXXX.001 PRICE DBF
|
|
XFILE := 'U' + ALLTRIM(MMODEL)
|
|
XFILE := XFILE + '.' + PADL( ALLTRIM(STR( CUST_MAST->CPRICE_NUM )),3,'0')
|
|
//** P3N - 2-5-98 - CHANGED TO ADDRESS CUSTOMER PRICING MODIFICATIONS
|
|
// GET THE PRICE ARRAY FOR THIS CUSTOMER TYPE 'D'-DEALER
|
|
MPRICE_ARR = GET_PRICEARR(XPRICE_ARR, 'D', PR_CUSTID)
|
|
ENDIF
|
|
//** P3N - 2-5-98 - CHANGED TO ADDRESS CUSTOMER PRICING MODIFICATIONS
|
|
// GET THE PRICE ARRAY FOR THIS MPRICE TYPE
|
|
**MPRICE_ARR = GET_PRICEARR(XPRICE_ARR, MPRICE_TYPE, PR_CUSTID)
|
|
ENDIF
|
|
|
|
//** P3N - 4/1/98 - CHANGED TO ADDRESS PRICING CONCERNS (APRIL FOOLS)
|
|
//** (IE: PRICE TABLE '*PWS-O.DBF' - S/B '*PWS_O.DBF' )
|
|
XFILE := STRTRAN(XFILE, '-', '_')
|
|
YFILE := STRTRAN(YFILE, '-', '_')
|
|
DFILE := STRTRAN(DFILE, '-', '_')
|
|
|
|
IF VALTYPE(MPRICE_ARR) = 'N' // NO PRICE TABLE, NO PERCENT
|
|
BASE_PRICE := 0
|
|
**RETURN BASE_PRICE + PICKUP_DISC(MMODEL)
|
|
RETURN { BASE_PRICE + PICKUP_DISC(MMODEL) , BASEPRICE_CUST }
|
|
ENDIF
|
|
|
|
**IF !FILE(XFILE + '.DBF')
|
|
IF !FILE(XFILE)
|
|
BASE_PRICE = 0.00
|
|
**RETURN BASE_PRICE + PICKUP_DISC(MMODEL)
|
|
RETURN { BASE_PRICE + PICKUP_DISC(MMODEL) , BASEPRICE_CUST }
|
|
ELSE
|
|
IF SELECT('XMFILE') > 0
|
|
SELECT XMFILE
|
|
USE
|
|
ENDIF
|
|
NET_USE(XFILE, .F., 5, 'XMFILE')
|
|
ENDIF
|
|
|
|
SEEKKEY = ''
|
|
|
|
FOR L = 1 TO LEN(MPRICE_ARR)
|
|
IF MPRICE_ARR[L,2] = 'R' // ROW?
|
|
MATT_CODE = MPRICE_ARR[L,1]
|
|
ELEM = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == ALLTRIM(MATT_CODE)})
|
|
IF ELEM <> 0
|
|
IF !EMPTY(SEEKKEY)
|
|
SEEKKEY = SEEKKEY + '-'
|
|
ENDIF
|
|
SEEKKEY = SEEKKEY + TRIM(GET_ARR[ELEM,4])
|
|
ENDIF
|
|
ELSE
|
|
IF MPRICE_ARR[L,2] = 'C'
|
|
MCOL_VAR = MPRICE_ARR[L,1]
|
|
ELEM = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == ALLTRIM(MCOL_VAR)})
|
|
IF ELEM > 0
|
|
MFIELD = ALLTRIM(GET_ARR[ELEM,4])
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
// CHECK THAT OPTION RESPONSE IS A VALID FIELD NAME!!!
|
|
FLD_ARR = DBSTRUCT() // GET FIELD LIST
|
|
SCANVAR := LEFT( STRTRAN(MFIELD, ' ', '_') + SPACE(10), 10)
|
|
ELEM2 = ASCAN(FLD_ARR, {|X| LEFT(X[1]+SPACE(10),10) == SCANVAR})
|
|
IF ELEM2 = 0 .OR. ELEM = NIL .OR. ELEM = 0
|
|
IF EMPTY(PR_CUSTID)
|
|
IF ELEM = NIL .OR. ELEM = 0
|
|
ERR_BOX( ' CANNOT Calculate Base Price! ', ;
|
|
' The ' + TRIM(MMODEL) + ' Price Table ',;
|
|
' May NOT Be Set Up Correctly ')
|
|
ELSE
|
|
ERR_BOX( ' CANNOT Calculate Base Price! ', ;
|
|
' Field ' + MFIELD + ' for Option ' + ALLTRIM(GET_ARR[ELEM,1]) ,;
|
|
' Does NOT Exist. Check the Option Responses ', ;
|
|
' Or The ' + TRIM(MMODEL) + ' Price Table ')
|
|
ENDIF
|
|
ENDIF
|
|
IF EMPTY(PR_CUSTID)
|
|
BASE_PRICE = GET_ALTPRICE(MMODEL)
|
|
ELSE
|
|
BASE_PRICE = 0
|
|
ENDIF
|
|
**RETURN BASE_PRICE + PICKUP_DISC(MMODEL)
|
|
RETURN { BASE_PRICE + PICKUP_DISC(MMODEL) , BASEPRICE_CUST }
|
|
ENDIF
|
|
|
|
LOCATE FOR TRIM(DESC) == SEEKKEY
|
|
**IF !EMPTY(SCANVAR)
|
|
IF !EMPTY(SCANVAR) .AND. FIELDPOS(SCANVAR) > 0
|
|
BASE_PRICE = &SCANVAR
|
|
BASE_PRICE = BASE_PRICE * (MPERCENT*.01)
|
|
ENDIF
|
|
|
|
USE
|
|
|
|
//** P3N - 2-5-98 - CHANGED TO ADDRESS CUSTOMER PRICING MODIFICATIONS
|
|
***IF EMPTY(PR_CUSTID) .AND. BASE_PRICE = 0
|
|
*** BASE_PRICE = GET_ALTPRICE(MMODEL)
|
|
***ENDIF
|
|
IF EMPTY(PR_CUSTID)
|
|
IF BASE_PRICE = 0
|
|
BASE_PRICE := GET_ALTPRICE(MMODEL)
|
|
ELSE
|
|
// BASE PRICE CALCULATED ABOVE!
|
|
ENDIF
|
|
ELSE
|
|
// CUST. BASE PRICE NOT CALCULATED ABOVE - GET FROM REAL BASE PRICE TABLE!
|
|
IF BASE_PRICE = 0
|
|
BASE_PRICE := GET_REALBASE(YFILE, SEEKKEY, SCANVAR, MPERCENT, DFILE)
|
|
ELSE
|
|
// CUSTOMER BASE PRICE CALCULATED ABOVE!
|
|
// DO NOT APPLY A DISCOUNT FOR CUSTOMER BASE PRICE ITEMS!
|
|
BASEPRICE_CUST := .T. //* P3N - 2/18/98
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
SELECT(SAVESEL)
|
|
RETURN { BASE_PRICE + PICKUP_DISC(MMODEL) , BASEPRICE_CUST }
|
|
** RETURN BASE_PRICE + PICKUP_DISC(MMODEL)
|
|
|
|
**********************************************************
|
|
* CUSTOMER BASE PRICE WAS ZERO GET THE REAL BASE PRICE
|
|
* FROM THE ORIGINAL BASE PRICE TABLE - PRICE SHEET OR DEALER
|
|
* // P3N 2-5-98 - CUSTOMER PRICING UPGRADE
|
|
**********************************************************
|
|
FUNCTION GET_REALBASE(YFILE, SEEKKEY, SCANVAR, MPERCENT, DFILE)
|
|
LOCAL BASE_PRICE := 0.00
|
|
IF FILE(YFILE) // IF PRICE SHEET TABLE EXISTS GET THE
|
|
// BASE_PRICE FROM PRICE SHEET PRICE TABLE!
|
|
BASE_PRICE := SEEK_BASE(SEEKKEY, YFILE, SCANVAR, MPERCENT)
|
|
ENDIF
|
|
IF EMPTY(BASE_PRICE) // NO PRICE @ PRICE SHEET TABLE
|
|
IF FILE(DFILE) // DEFAULT IS THE DEALER PRICE TABLE
|
|
BASE_PRICE := SEEK_BASE(SEEKKEY, DFILE, SCANVAR, MPERCENT)
|
|
ENDIF
|
|
ENDIF
|
|
RETURN BASE_PRICE
|
|
|
|
|
|
**********************************************************
|
|
* SEEK AND RETIREVE THE BASE PRICE FROM THE PRICE SHEET OR DEALER TABLE
|
|
* // P3N 2-5-98 - CUSTOMER PRICING UPGRADE
|
|
**********************************************************
|
|
FUNCTION SEEK_BASE(SEEKKEY, PFILE, SCANVAR, MPERCENT)
|
|
LOCAL SVSEL := SELECT(), BASE_PRICE := 0.00
|
|
IF SELECT('XMFILE') > 0
|
|
SELECT XMFILE
|
|
USE
|
|
ENDIF
|
|
NET_USE(PFILE, .F., 5, 'PFILE')
|
|
LOCATE FOR TRIM(DESC) == SEEKKEY
|
|
IF !EMPTY(SCANVAR) .AND. FIELDPOS(SCANVAR) > 0
|
|
BASE_PRICE = &SCANVAR
|
|
IF EMPTY(MPERCENT)
|
|
ELSE
|
|
BASE_PRICE = BASE_PRICE * (MPERCENT*.01)
|
|
ENDIF
|
|
ENDIF
|
|
USE
|
|
|
|
SELECT(SVSEL)
|
|
RETURN BASE_PRICE
|
|
**********************************************************************
|
|
* ARE THERE ANY SPECIAL CUSTOMER BASE PRICE TABLES ACTIVE?
|
|
**********************************************************************
|
|
FUNCTION CK_SPEC_PRICE( CUSTID, MMODEL, CKDATE, LOOKFILE )
|
|
LOCAL SEEKKEY := CUSTID + MMODEL
|
|
LOCAL MDATE1, MDATE2, SAVESEL := SELECT(), RETVAL := .F.
|
|
|
|
IF LOOKFILE = 'CUST_BP'
|
|
SELECT CUST_BP
|
|
CUST_BP->(DBSEEK(SEEKKEY))
|
|
ELSE
|
|
SELECT (LOOKFILE)
|
|
LOCATE FOR PROD_CODE == MMODEL
|
|
ENDIF
|
|
|
|
IF FOUND()
|
|
IF EMPTY(DATE1)
|
|
MDATE1 := CTOD('01/01/1960')
|
|
ELSE
|
|
MDATE1 := DATE1
|
|
ENDIF
|
|
|
|
IF EMPTY(DATE2)
|
|
MDATE2 := CTOD('01/01/2050')
|
|
ELSE
|
|
MDATE2 := DATE2
|
|
ENDIF
|
|
|
|
IF CKDATE >= MDATE1 .AND. CKDATE <= MDATE2
|
|
RETVAL := .T.
|
|
ENDIF
|
|
ENDIF
|
|
SELECT (SAVESEL)
|
|
RETURN RETVAL
|
|
|
|
********************************************************************
|
|
** FUNCTION CUST_SPEC_BP(MMODEL)
|
|
** LOCAL SEEKKEY, RETVAL, MDATE1, MDATE2
|
|
** LOCAL SPEC_PRICE
|
|
**
|
|
** SEEKKEY := (CUR_MAST)->CUST_ID + MMODEL
|
|
** SELECT CUST_BP
|
|
** SEEK SEEKKEY
|
|
** IF !FOUND()
|
|
** RETURN NIL
|
|
** ENDIF
|
|
**
|
|
** IF EMPTY(DATE1)
|
|
** MDATE1 := CTOD('01/01/1960')
|
|
** ELSE
|
|
** MDATE1 := DATE1
|
|
** ENDIF
|
|
**
|
|
** IF EMPTY(DATE2)
|
|
** MDATE2 := CTOD('01/01/2050')
|
|
** ELSE
|
|
** MDATE2 := DATE2
|
|
** ENDIF
|
|
**
|
|
** **IF !(USERFILE2->ORDER_DATE >= MDATE1 .AND. USERFILE2->ORDER_DATE <= MDATE2)
|
|
**
|
|
** IF !( (CUR_MAST)->ORDER_DATE >= MDATE1 .AND. (CUR_MAST)->ORDER_DATE <= MDATE2 )
|
|
** RETURN NIL
|
|
** ENDIF
|
|
**
|
|
** SPEC_PRICE := CALC_CUST_PR( MMODEL, USERFILE2->UI_SIZE )
|
|
**
|
|
** RETURN SPEC_PRICE
|
|
**
|
|
**
|
|
** ********************************************************************
|
|
** FUNCTION CALC_CUST_PR(MMODEL, SIZEVAL)
|
|
** LOCAL SEEKKEY
|
|
**
|
|
** SELECT CUST_BPLVL
|
|
** SEEKKEY := (CUR_MAST)->CUST_ID + MMODEL
|
|
** SEEK SEEKKEY
|
|
** IF !FOUND()
|
|
** RETURN NIL
|
|
** ENDIF
|
|
**
|
|
** DO WHILE CUST_ID + PROD_CODE == SEEKKEY .AND. !EOF()
|
|
** IF SIZEVAL <= VAL(UI_BREAK)
|
|
** // RETURN THE (UI PRICE * SIZE) + THE "EACH" PRICE
|
|
** RETURN (SIZEVAL * PRICE) + UNIT_PRICE
|
|
** ENDIF
|
|
** SKIP 1
|
|
** ENDDO
|
|
**
|
|
** RETURN NIL
|
|
**
|
|
********************************************************************
|
|
FUNCTION PICKUP_DISC(MMODEL, SELFILE)
|
|
// LOOKUP AND CALCULATE DISCOUNT FOR DEALER PICKUPS
|
|
// PICKUP DELIVERY DISCOUNT FOR DEALERS
|
|
LOCAL RETVAL := 0, SAVESEL := SELECT()
|
|
|
|
IF SELFILE = NIL
|
|
SELFILE := 'USERFILE2'
|
|
ENDIF
|
|
|
|
**IF (SELFILE)->PRICE_SHT$'D' ; // DEALER PRICING
|
|
**IF ((MHOME_LOC_CODE = 'KC' .AND. (SELFILE)->PRICE_SHT$'D') ;
|
|
** .OR. MHOME_LOC_CODE <> 'KC' ) ;
|
|
// IF THIS PRICE SHEET CODE IS IN THE CONTROL FILE PICKUPDISC LIST
|
|
// AND THE ORDER IS TO BE PICKED UP
|
|
IF (SELFILE)->PRICE_SHT$MPICKUPDISC ;
|
|
.AND. &CUR_MAST->PICK_DEL == 'P' // PICKUP
|
|
SELECT PRODUCT
|
|
SEEK MMODEL
|
|
SELECT CATEGORY
|
|
SEEK PRODUCT->CAT_CODE
|
|
RETVAL := D_PICKDISC * -1
|
|
ENDIF
|
|
|
|
SELECT (SAVESEL)
|
|
|
|
RETURN RETVAL
|
|
|
|
|
|
********************************************************************
|
|
FUNCTION GET_OPTPRICE(MMODEL, MPRICE_ARR, GET_ARR, WHCHOPTS)
|
|
// LOOKUP AND CALCULATE PRICING FOR MMODEL OPTIONS
|
|
|
|
|
|
LOCAL L, SAVESEL := SELECT(), MOPT_PRICE := 0
|
|
LOCAL SEEKKEY, MCAT_CODE
|
|
LOCAL II, CUR_ATTSTUFF, CUR_ATTOPTS, CUR_OPTPRICES, CUR_OPTOPTS
|
|
LOCAL CUR_ELEM, M1, M2, M3, M4, M5, M6
|
|
|
|
FOR L = 1 TO LEN(GET_ARR)
|
|
IF WHCHOPTS <> GET_ARR[L,10] // BAFLAG FOR OPTIONS
|
|
LOOP
|
|
ENDIF
|
|
CUR_ATTSTUFF := GET_ARR[L]
|
|
MUSER_RESP := CUR_ATTSTUFF[4]
|
|
IF ASCAN(MPRICE_ARR, {|X| ALLTRIM(X[1]) == ALLTRIM(MUSER_RESP)} ) > 0
|
|
LOOP // DON'T PROCESS BASE PRICE STUFF
|
|
ENDIF
|
|
IF !GET_ARR[L,2]$'P'
|
|
LOOP // ONLY PROCESS THE P TYPE ATTRIBUTES
|
|
ENDIF
|
|
IF !EMPTY(MUSER_RESP) .AND. TRIM(MUSER_RESP) <> 'N/A' ;
|
|
.AND. TRIM(MUSER_RESP) <> 'NO OPTIONS FOUND!!'
|
|
CUR_ATTOPTS := CUR_ATTSTUFF[3]
|
|
CUR_ELEM := ASCAN(CUR_ATTOPTS, {|X| ALLTRIM(X[1]) == ALLTRIM(MUSER_RESP)} )
|
|
IF EMPTY(CUR_ELEM) //NO attribute OPTIONS
|
|
M1 := '**************************************************'
|
|
M2 := '** NO attribute OPTIONS found for ' + ALLTRIM(CUR_ATTSTUFF[5])
|
|
M3 := '**'
|
|
M4 := '** In the MODEL/PRODUCT setup function enter the '
|
|
M5 := '** attribute OPTIONS for ' + ALLTRIM(CUR_ATTSTUFF[1])
|
|
M6 := '**************************************************'
|
|
ERR_BOX( M1, M2, M3, M4, M5, M6)
|
|
ELSE
|
|
CUR_OPTOPTS := CUR_ATTOPTS[CUR_ELEM]
|
|
CUR_OPTPRICES := CUR_OPTOPTS[4]
|
|
|
|
// WHICH COLUMN TO DO!?
|
|
DO CASE
|
|
CASE CUR_OPTPRICES[1] <> 0 // LIST PER UNIT
|
|
MOPT_PRICE = MOPT_PRICE + CUR_OPTPRICES[1]
|
|
CASE CUR_OPTPRICES[2] <> 0 // TIMES UNITED INCHES
|
|
MOPT_PRICE = MOPT_PRICE + (CUR_OPTPRICES[2]*USERFILE2->UI_SIZE)
|
|
CASE CUR_OPTPRICES[3] <> 0 // TIMES SQFT PRICE
|
|
MOPT_PRICE = MOPT_PRICE + (CUR_OPTPRICES[3]*USERFILE2->SQFT)
|
|
ENDCASE
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
SELECT(SAVESEL)
|
|
RETURN MOPT_PRICE
|
|
|
|
********************************************************************
|
|
FUNCTION GET_EXTPRICE(GET_ARR, PR_CUSTID)
|
|
// LOOKUP AND CALCULATE EXTRA PRICING FOR OPTION
|
|
// AT THE CATEGORY LEVEL ONLY
|
|
|
|
LOCAL SAVESEL := SELECT(), MEXT_PRICE := 0
|
|
LOCAL RULE_ARR := {}, GOOD_RESULT, M_AMT := 0, MULTIPLIER := 0
|
|
LOCAL TFVALUE := 0.0000, RESULT, TVVALUE
|
|
LOCAL SAVEORD
|
|
LOCAL TVSTRTRAN
|
|
LOCAL OPT_VAL_TYPE, WHCHCHOICE, CHOICEARR, CHOICEPRICES
|
|
LOCAL MROUND_UP
|
|
LOCAL WORKVAL1, WORKVAL2
|
|
LOCAL GET_PRICE
|
|
|
|
|
|
|
|
SELECT PRI_EXTRAS
|
|
SAVEORD := INDEXORD()
|
|
DONSETORD(2)
|
|
MCAT_CODE = GET_CATCODE(USERFILE2->PROD_CODE)
|
|
SEEK MCAT_CODE
|
|
DO WHILE CAT_CODE == MCAT_CODE .AND. !EOF()
|
|
IF AT('U', PRI_EXTRAS->PRICE_SHT) > 0 ; // USER PRICING
|
|
.AND. CUST_PE->(DBSEEK(PRI_EXTRAS->CAT_CODE + PRI_EXTRAS->OPTION + (CUR_MAST)->CUST_ID))
|
|
// USE THIS OPTION
|
|
GET_PRICE := 'CUST_PE'
|
|
ELSE
|
|
GET_PRICE := 'PRI_EXTRAS'
|
|
// NO SPECIAL USER PRICING - CHECK PRICE SHEET FROM ORDER LINE
|
|
IF EMPTY(PR_CUSTID) .AND. AT(USERFILE2->PRICE_SHT, PRI_EXTRAS->PRICE_SHT) = 0
|
|
SKIP 1
|
|
LOOP
|
|
ENDIF
|
|
// IF A 'U' IS NOT IN THE PRI_EXTRAS->PRICE_SHT - EXIT
|
|
// ELSE SPECIAL CUSTOMERS WILL HAVE ACCESS BASED ON PRI_EXTRAS PRICE VALUES
|
|
IF !EMPTY(PR_CUSTID) .AND. AT(USERFILE2->PRICE_SHT, 'U') = 0
|
|
SKIP 1
|
|
LOOP
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF !EMPTY(RULE_PACK)
|
|
IF ALLTRIM(RULE_PACK) = 'ORIEL'
|
|
IF USERFILE2->ORIEL_SIZE$'N' .OR. (CUR_MAST)->ORIEL_CHRG$'N'
|
|
SKIP 1
|
|
LOOP
|
|
ENDIF
|
|
ENDIF
|
|
|
|
DO CASE
|
|
CASE !EMPTY( (GET_PRICE)->UNIT_SALE)
|
|
M_AMT = (GET_PRICE)->UNIT_SALE
|
|
|
|
CASE !EMPTY( (GET_PRICE)->UI_SALE) // TIMES NUMBER OF UNITED INCHES
|
|
M_AMT = (GET_PRICE)->UI_SALE * USERFILE2->UI_SIZE
|
|
|
|
CASE !EMPTY( (GET_PRICE)->SQFT_SALE) // TIMES NUMBER OF SQUARE FEET
|
|
M_AMT = (GET_PRICE)->SQFT_SALE * USERFILE2->SQFT
|
|
|
|
ENDCASE
|
|
|
|
MROUND_UP := ROUND_UP // SHOULD TRUE/FALSE VALUE BE ROUNDED UP?
|
|
|
|
/* STEP 1. TEST RULE
|
|
STEP 2. IF TRUE, EVAL(TRUE VAL)
|
|
IF FALSE, USE FALSE VAL
|
|
STEP 3. TAKE EVAL FROM STEP 2 * M_AMT
|
|
*/
|
|
|
|
** RULE_ARR = GETRULES(RULE_PACK) // RULE PACK NAME
|
|
** GOOD_RESULT = EVALCLRULES({RULE_ARR},,GET_ARR) // RULE ARRAY
|
|
GOOD_RESULT = CHK_RULE(RULE_PACK, GET_ARR, , _SELFILE ) // RULE ARRAY
|
|
|
|
IF GOOD_RESULT
|
|
TRUE_FALSE = ALLTRIM(TRUE_VAL)
|
|
ELSE
|
|
TRUE_FALSE = ALLTRIM(FALSE_VAL)
|
|
ENDIF
|
|
|
|
ELEM = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == TRUE_FALSE})
|
|
// IT'S AN OPTION VALUE
|
|
TFVALUE := 0
|
|
DO CASE
|
|
CASE ELEM > 0
|
|
// DECVAL() (IN CGWMATH) EXPECTS A CHARACTER, AND RETURNS A NUMERIC
|
|
|
|
OPT_VAL_TYPE = GET_ARR[ELEM,2]
|
|
DO CASE
|
|
CASE OPT_VAL_TYPE$'UC'
|
|
TFVALUE = DECVAL(GET_ARR[ELEM,4]) // * USER_RESP
|
|
|
|
CASE OPT_VAL_TYPE$'P'
|
|
// IF PICK LIST, GET THE PRICES FROM THE SELECTED OPTION
|
|
// THEN EVALUATE THE TRUE FALSE ON THAT LIKE A NUMERIC ONE
|
|
CHOICEARR = GET_ARR[ELEM,3]
|
|
WHCHCHOICE = ASCAN(CHOICEARR, {|X| ALLTRIM(X[1]) == ALLTRIM(GET_ARR[ELEM,4])})
|
|
IF WHCHCHOICE = 0
|
|
TFVALUE := 0
|
|
ELSE
|
|
CHOICEPRICES = CHOICEARR[WHCHCHOICE,4]
|
|
DO CASE
|
|
CASE CHOICEPRICES[1] <> 0
|
|
TFVALUE := CHOICEPRICES[1]
|
|
CASE CHOICEPRICES[2] <> 0
|
|
TFVALUE := CHOICEPRICES[2]
|
|
CASE CHOICEPRICES[3] <> 0
|
|
TFVALUE := CHOICEPRICES[3]
|
|
ENDCASE
|
|
ENDIF
|
|
ENDCASE
|
|
CASE ALLTRIM(TRUE_FALSE) == 'ITEM PRICE'
|
|
TFVALUE := USERFILE2->BASE_PRI + USERFILE2->OPT_PRI ;
|
|
+ MEXT_PRICE // ADD ALL PRICE COMPONENTS SO FAR
|
|
// DON'T USE "SPECIAL_FIELDS()" BECAUSE IT RETURNS STORED VALUE
|
|
// OF THE EXT_PRICE IN DBF VS. THE CURRENT CALCULATED VALUE
|
|
TFVALUE = ROUND_IT(TFVALUE, .05)
|
|
CASE ALLTRIM(TRUE_FALSE) == 'BASE PRICE'
|
|
TFVALUE := USERFILE2->BASE_PRI
|
|
CASE ALLTRIM(TRUE_FALSE) == "TT WIDTH'"
|
|
TFVALUE := USERFILE2->ACT_WIDTH / 12
|
|
CASE ALLTRIM(TRUE_FALSE) == 'TT WIDTH'
|
|
TFVALUE := USERFILE2->ACT_WIDTH
|
|
CASE ALLTRIM(TRUE_FALSE) == "TT HEIGHT'"
|
|
TFVALUE := USERFILE2->ACT_HEIGHT / 12
|
|
CASE ALLTRIM(TRUE_FALSE) == 'TT HEIGHT'
|
|
TFVALUE := USERFILE2->ACT_HEIGHT
|
|
CASE SPEC_FLD(TRUE_FALSE) // IS IT A SPECIAL FIELD?
|
|
TVSTRTRAN:= STRTRAN(ALLTRIM(TRUE_FALSE),' ', '_') // INCASE BLANKS
|
|
TFVALUE := USERFILE2->&TVSTRTRAN
|
|
IF VALTYPE(TFVALUE)$'C'
|
|
TFVALUE := VAL(TFVALUE)
|
|
ENDIF
|
|
CASE VALTYPE(TRUE_FALSE) = 'C'
|
|
TFVALUE = VAL(TRUE_FALSE) // IS IT ALWAYS A CHARACTER?
|
|
OTHERWISE
|
|
TFVALUE = TRUE_FALSE // IS IT ALWAYS A NUMERIC?
|
|
ENDCASE
|
|
|
|
IF MROUND_UP = 'Y'
|
|
WORKVAL1 := TFVALUE - INT(TFVALUE)
|
|
IF WORKVAL1 > 0
|
|
TFVALUE := INT(TFVALUE) + 1
|
|
ENDIF
|
|
ENDIF
|
|
MEXT_PRICE = MEXT_PRICE + (TFVALUE * M_AMT)
|
|
|
|
ENDIF
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
DONSETORD(SAVEORD)
|
|
|
|
SELECT(SAVESEL)
|
|
RETURN MEXT_PRICE
|
|
|
|
********************************************************************
|
|
* BASE PRICE COULD NOT BE CALCULATED ALLOW USER TO ENTER A PRICE!
|
|
********************************************************************
|
|
FUNCTION GET_ALTPRICE(MODEL_NUM)
|
|
// ASK USER FOR A BASE_PRICE
|
|
|
|
LOCAL BASE_PRICE := USERFILE2->ALT_BPRICE, SAVESCR := SAVESCREEN()
|
|
LOCAL NTOP, NBOTT, NLEFT, NRIGHT
|
|
|
|
NTOP = 10
|
|
NBOTT = 17
|
|
NLEFT = 20
|
|
NRIGHT = 61
|
|
|
|
SETCOLOR(BLACK)
|
|
@ NTOP+1,NLEFT+1 CLEAR TO NBOTT+1,NRIGHT+1 // DRAW SHADOW BOX
|
|
SETCOLOR(HREV)
|
|
@ NTOP,NLEFT CLEAR TO NBOTT,NRIGHT // DRAW BACKROUND COLOR
|
|
@ NTOP,NLEFT TO NBOTT,NRIGHT // DRAW DOUBLE LINE
|
|
|
|
@ NTOP+2,NLEFT+3 SAY ' Base Price for LINE #' + STR(USERFILE2->LINE_NUM,3) + ' Was Zero'
|
|
@ NTOP+4,NLEFT+3 SAY ' Enter Price for this ' + ALLTRIM(MODEL_NUM) GET BASE_PRICE;
|
|
PICTURE '9999.99'
|
|
READ()
|
|
SETCOLOR(LNOR)
|
|
RESTSCREEN(,,,,SAVESCR)
|
|
|
|
REPLACE USERFILE2->ALT_BPRICE WITH BASE_PRICE
|
|
|
|
RETURN BASE_PRICE
|
|
|
|
**************************************************************
|
|
//* DELETE THE CURRENT LINE IN THE TEMP ORDER LINES FILE
|
|
**************************************************************
|
|
FUNCTION DEL_LINEDETAIL(ADDL_MODE)
|
|
|
|
LOCAL SAVEREC, CORR, MSG, DEL_LINE, SEEKKEY, MORDER_NUM, CUR_LINE, DONE := .F.
|
|
LOCAL SAVESCR := SAVESCREEN(), SAVEORD
|
|
LOCAL ACTION_CODE := GETAVAR('ACTION_CODE')
|
|
|
|
LOCAL SVSEL := SELECT() //** P3N - 8/4/98
|
|
|
|
LOCAL M1 := 'Order ' + (CUR_MAST)->ORDER_NUM + ' shippped on ' + ;
|
|
DTOC((CUR_MAST)->SHIP_DATE) + '. '
|
|
LOCAL M2 := 'If you continue Shipping Information will be REMOVED!'
|
|
LOCAL M3 := 'DO YOU WANT TO CONTINUE?'
|
|
|
|
IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD'
|
|
@ 23,0 CLEAR
|
|
? CHR(7)
|
|
IF SELECT('ORD_SHIP') > 0 //** P3N - 8/4/98
|
|
ELSE //** P3N - 8/4/98
|
|
DBOPEN('ORD_SHIP') //** P3N - 8/4/98
|
|
ENDIF //** P3N - 8/4/98
|
|
IF ORD_SHIP->(DBSEEK( (SVSEL)->ORDER_NUM )) //** P3N - 8/4/98
|
|
ERR_BOX ('Order ' + (SVSEL)->ORDER_NUM + ' shippped on ' + ;
|
|
DTOC((CUR_MAST)->SHIP_DATE) + '!' , ;
|
|
'Contact Supervisor to DELETE this Line !!' )
|
|
IF LASTKEY() <> 126 //** '~' //** P3N - 8/4/98
|
|
RESTSCREEN(,,,,SAVESCR) //** P3N - 8/4/98
|
|
RETURN .F. //** P3N - 8/4/98
|
|
ENDIF //** P3N - 8/4/98
|
|
ENDIF //** P3N - 8/4/98
|
|
SELECT(SVSEL) //** P3N - 8/4/98
|
|
MSG = ' DELETE Line ' + LTRIM(STR(RECNO())) + ' --- Are You Sure?'
|
|
CORR = CORRCHEK(23, MSG)
|
|
IF CORR <> 'Y'
|
|
RESTSCREEN(,,,,SAVESCR)
|
|
RETURN .F.
|
|
ENDIF
|
|
//** P3N - 10/15/98
|
|
IF EMPTY( (CUR_MAST)->SHIP_DATE )
|
|
ELSEIF PROMPT_BOX(M1, M2, M3) //** P3N - 10/15/98
|
|
IF REMOVE_ORD_SHIP() //** P3N - 10/15/98
|
|
// USER REQUESTED TO CONTINUE WITH THE DELETE - SEND INFO MSG
|
|
ERR_BOX('Order Control Shipping Information has been REMOVED. ', ' ', ;
|
|
'This Order MUST be RE-SHIPPED!! ', ' ',;
|
|
'INFORM Order Control to RE-SHIP this Order!! ')
|
|
ELSE
|
|
RETURN .F. //** P3N - 10/15/98
|
|
ENDIF //** P3N - 10/15/98
|
|
ELSE //** P3N - 10/15/98
|
|
RETURN .F. //** P3N - 10/15/98
|
|
ENDIF //** P3N - 10/15/98
|
|
MORDER_NUM = ORDER_NUM
|
|
DEL_LINE = RECNO() // LINE ITEM NUMBER TO DELETE IN ODER_OPTS
|
|
|
|
SAVEREC := DEL_LINE - 1
|
|
DELETE
|
|
PACK
|
|
IF LASTREC() = 0
|
|
ADD_REC(3)
|
|
ELSE
|
|
SAVEORD := INDEXORD()
|
|
DONSETORD(0)
|
|
REPLACE ALL LINE_NUM WITH LINE_NUM - 1 FOR LINE_NUM > DEL_LINE
|
|
DONSETORD(SAVEORD)
|
|
ENDIF
|
|
|
|
|
|
// UPDATE THE ORDER OPTIONS STUFF!
|
|
SELECT USERFILE8 // ORDER OPTIONS (ORD_OPTS-CGW0OO)
|
|
IF ADDL_MODE
|
|
SEEKKEY = MORDER_NUM + USERFILE2->PROD_CODE + STR(DEL_LINE,3)
|
|
ELSE
|
|
SEEKKEY = MORDER_NUM + STR(DEL_LINE,3)
|
|
ENDIF
|
|
DO WHILE .T.
|
|
SEEK SEEKKEY
|
|
IF !FOUND()
|
|
EXIT
|
|
ENDIF
|
|
REC_LOCK(3)
|
|
REPLACE ORDER_NUM WITH ''
|
|
REPLACE LINE_NUM WITH 0
|
|
DELETE
|
|
ENDDO
|
|
|
|
CUR_LINE = DEL_LINE
|
|
|
|
// ADJUST ALL ORDER OPTS WITH LINE NUMBER GREATER THAN DEL_LINE
|
|
SELECT USERFILE8 //** ORDER OPTS(ORD_OPTS-CGW0OO)
|
|
SAVEORD := INDEXORD()
|
|
DONSETORD(0)
|
|
REPLACE ALL LINE_NUM WITH LINE_NUM - 1 FOR LINE_NUM > DEL_LINE
|
|
DONSETORD(SAVEORD)
|
|
PACK
|
|
|
|
*-// ADJUST ALL ORDER OPTS WITH LINE NUMBER GREATER THAN DEL_LINE
|
|
*-DELETE ALL RECS IN ADDL_LINES WHICH HAVE THIS ORDER NUMBER
|
|
*-AND THIS LINE NUMBER. THEN DELETE ALL ADDL_OPTS RECORDS FOR
|
|
*-THIS ORDER NUMBER AND THIS LINE NUMBER.
|
|
*-
|
|
*-AFTER YOU DELETE THE RECORDS, THEN RENUMBER SUBSEQUENT RECORDS
|
|
*-SO THEIR LINE NUMBERS MATCH WHAT THEY ARE SUPPOSED TO BE!
|
|
|
|
SELECT USERFILE6 //** ADDL LINES (CGW0XL)
|
|
SAVEORD := INDEXORD()
|
|
DONSETORD(0)
|
|
DELETE ALL FOR LINE_NUM = DEL_LINE
|
|
REPLACE ALL LINE_NUM WITH LINE_NUM - 1 FOR LINE_NUM > DEL_LINE
|
|
DONSETORD(SAVEORD)
|
|
PACK
|
|
|
|
// ADJUST ALL ADDL OPTS WITH LINE NUMBER GREATER THAN DEL_LINE
|
|
SELECT USERFILE9 //** ADDL OPTS (CGW0XO)
|
|
SAVEORD := INDEXORD()
|
|
DONSETORD(0)
|
|
DELETE ALL FOR LINE_NUM = DEL_LINE
|
|
REPLACE ALL LINE_NUM WITH LINE_NUM - 1 FOR LINE_NUM > DEL_LINE
|
|
DONSETORD(SAVEORD)
|
|
PACK
|
|
|
|
SELECT USERFILE2
|
|
GOTO MAX(SAVEREC,1)
|
|
KEYBOARD CHR(5) + CHR(19)
|
|
ELSEIF ACTION_CODE = 'REV'
|
|
ERR_BOX('You CAN NOT Delete line Items in REVIEW mode!')
|
|
ELSE
|
|
ERR_BOX('You DO NOT have Authorization to Delete line Items!')
|
|
ENDIF
|
|
|
|
RETURN .T.
|
|
|
|
***********************************************
|
|
FUNCTION F5_NOTACTIVE()
|
|
LOCAL M1 := 'The SORT OPTON is NOT ACTIVE'
|
|
LOCAL M2 := 'While Entering Line Items.'
|
|
LOCAL M3 := 'Request for SORT was IGNORED.'
|
|
ERR_BOX( M1, M2, M3)
|
|
RETURN .T.
|
|
|
|
|
|
***********************************************
|
|
FUNCTION ROUND_IT(M_AMT, ROUNDER)
|
|
// ROUND OFF M_AMT TO THE NEXT ROUNDER AMOUNT
|
|
// IN CENTS ONLY
|
|
|
|
LOCAL CENTS, ROUND_CENTS, DIFFERENCE, RESULT, DO_ROUND := 'N'
|
|
|
|
IF SELECT('CUST_MAST') > 0
|
|
DO_ROUND := CUST_MAST->RND_PRICE
|
|
ENDIF
|
|
|
|
IF M_AMT = 0 .OR. DO_ROUND$'N'
|
|
RETURN M_AMT
|
|
ENDIF
|
|
|
|
SET DECIMALS TO 2 // ONLY WANT 2 DECIMALS!
|
|
|
|
CENTS = M_AMT - INT(M_AMT)
|
|
RESULT = CENTS / ROUNDER
|
|
REMAINDER = RESULT - INT(RESULT)
|
|
///// HAVE TO DO THIS BULLSHIT BECAUSE CLIPPER DOESN'T THINK 0 = 0 !!!???
|
|
IF STR(REMAINDER) = STR(0.00) // IS IT DIVISIBLE BY 5, EVENLY?
|
|
SET DECIMALS TO
|
|
RETURN M_AMT
|
|
ENDIF
|
|
|
|
ROUND_CENTS = ( INT( CENTS / ROUNDER ) + 1) * ROUNDER
|
|
DIFFERENCE = ROUND_CENTS - CENTS
|
|
|
|
SET DECIMALS TO
|
|
RETURN M_AMT + DIFFERENCE
|
|
|
|
|
|
***********************************************
|
|
FUNCTION FILL_EMPTY(MCODE, ACTION, ADDL_MODE)
|
|
// THIS WILL FILL THE EMPTY LINE ITEM FIELDS (CURRENT RECORD)
|
|
// WITH THE VALUES OF THE PREVIOUS RECORD
|
|
|
|
LOCAL SAVESEL := SELECT(), RETVAL := .T., SEEKKEY, NEWSEEK
|
|
LOCAL MPROD_CODE := '', MDISCOUNT, MHOW_MEAS
|
|
LOCAL MSTD_OPTS := '', MPAR_COLOR := ''
|
|
|
|
SELECT USERFILE2 // ORDER LINE ITEMS RECORD
|
|
|
|
IF RECNO() > 1
|
|
SKIP -1 // POINT TO PREVIOUS RECORD
|
|
|
|
MPROD_CODE := PROD_CODE
|
|
MDISCOUNT := DISCOUNT
|
|
MHOW_MEAS := HOW_MEAS
|
|
MSTD_OPTS := STD_OPTS
|
|
IF EMPTY(FIELDPOS('PAR_COLOR'))
|
|
MPAR_COLOR := ' '
|
|
ELSE
|
|
MPAR_COLOR := PAR_COLOR
|
|
ENDIF
|
|
SKIP 1 // POINT BACK TO ORIGINAL RECORD
|
|
ENDIF
|
|
|
|
|
|
IF RECNO() = 1 ; // MUST FILL EVERYTHING MANUALLY
|
|
.OR. ( !EMPTY(PROD_CODE) .AND. (PROD_CODE <> MPROD_CODE))
|
|
IF EMPTY(PROD_CODE)
|
|
RETVAL := .F.
|
|
ENDIF
|
|
|
|
IF EMPTY(HOW_MEAS)
|
|
RETVAL := .F.
|
|
ENDIF
|
|
|
|
IF EMPTY(STD_OPTS)
|
|
RETVAL := .F.
|
|
ENDIF
|
|
|
|
IF RETVAL = .F.
|
|
SELECT (SAVESEL)
|
|
RETURN 'NO CONT' // NEED TO GET USERFILE2 INFO FROM USER
|
|
ELSE
|
|
SELECT USERFILE8
|
|
IF ADDL_MODE
|
|
SEEKKEY := (CUR_MAST)->ORDER_NUM + USERFILE2->PROD_CODE + STR(USERFILE2->LINE_NUM,3)
|
|
ELSE
|
|
SEEKKEY := (CUR_MAST)->ORDER_NUM + STR(USERFILE2->LINE_NUM,3)
|
|
ENDIF
|
|
SEEK SEEKKEY
|
|
IF !FOUND() // MEANS OPTS NOT THERE
|
|
SELECT(SAVESEL)
|
|
RETURN 'NO_OPTS_NO_PIRATE'
|
|
ELSE
|
|
SELECT(SAVESEL)
|
|
RETURN 'HAS_OWN_OPTS'
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
// ALL ITEMS HAD SAME PRODUCT CODE AS ITEM ABOVE IT.
|
|
// PIRATE ANY MISSING ITEMS FROM THE GUY ABOVE.
|
|
IF EMPTY(PROD_CODE)
|
|
REPLACE PROD_CODE WITH MPROD_CODE
|
|
ENDIF
|
|
|
|
IF EMPTY(HOW_MEAS)
|
|
REPLACE HOW_MEAS WITH MHOW_MEAS
|
|
ENDIF
|
|
|
|
IF EMPTY(STD_OPTS)
|
|
REPLACE STD_OPTS WITH MSTD_OPTS
|
|
ENDIF
|
|
|
|
//FILL ANY EMPTY LINE_OPTS WHICH ARE MISSING
|
|
|
|
SELECT USERFILE8
|
|
IF ADDL_MODE
|
|
SEEKKEY := (CUR_MAST)->ORDER_NUM + MPROD_CODE + STR(USERFILE2->LINE_NUM,3)
|
|
ELSE
|
|
SEEKKEY := (CUR_MAST)->ORDER_NUM + STR(USERFILE2->LINE_NUM,3)
|
|
ENDIF
|
|
SEEK SEEKKEY
|
|
IF !FOUND() // MEANS OPTS NOT THERE
|
|
IF USERFILE2->STD_OPTS == MSTD_OPTS .AND. CK_PAR_COLOR(MPAR_COLOR)
|
|
RETVAL := 'PIRATE_OPTS' //COPY ORDER_OPTS FOR LINE PREVIOUS
|
|
ELSE
|
|
RETVAL = 'NO_OPTS_NO_PIRATE'
|
|
ENDIF
|
|
ELSE
|
|
RETVAL := 'HAS_OWN_OPTS' //DON'T COPY ORDER_OPTS FOR LINE PREVIOUS
|
|
ENDIF
|
|
|
|
SELECT(SAVESEL)
|
|
RETURN RETVAL
|
|
|
|
*****************************************************
|
|
* IS THERE A PARENT COLOR FOR THIS LINE ITEM? *
|
|
* IF SO IS IT THE SAME AS THE PREV LINE ITEM? *
|
|
*****************************************************
|
|
FUNCTION CK_PAR_COLOR(MPAR_COLOR)
|
|
LOCAL RET_VAL
|
|
IF EMPTY(USERFILE2->(FIELDPOS('PAR_COLOR')))
|
|
RETVAL := .T.
|
|
ELSEIF USERFILE2->PAR_COLOR == MPAR_COLOR
|
|
RETVAL := .T.
|
|
ELSE
|
|
RETVAL := .F.
|
|
ENDIF
|
|
RETURN RETVAL
|
|
*****************************************************
|
|
FUNCTION BUILD_GETARR(MPROD_CODE, ACTION, MORDER_NUM, MLINE_NUM, PIRATE_VAR, USE_TMP, ADDL_MODE, PPR_CUSTID, DISP_WAIT, SELFILE)
|
|
// BUILDS A GET ARRAY AND A PRICING ARRAY FOR MPROD_CODE
|
|
// ACTION = 1, GET THE OPTIONS FROM THE ORDER OPTION FILE
|
|
// ACTION = 2, JUST BUILD THE GET_ARR & PRICING ARRAY
|
|
|
|
|
|
// LAYOUT FOR THE PRICE_ARR
|
|
// 1 = PRICE TABLE TYPE (DEALER, SPEC DEALER, INSTALLER, LUMBERMAN, DISTRIBUTOR)
|
|
// 1 = ATTRIBUTE NAME
|
|
// 2 = PRICE TYPE (R=ROW, C=COLUMN)
|
|
|
|
// LAYOUT FOR THE GET_ARR
|
|
// 1 = ATTRIBUTE NAME
|
|
// 2 = FIELD TYPE (P=PICK, U=USER INPUT, C=CALCULATE, T=PRICE TABLE)
|
|
// 3 = ARRAY OF ALL THE POSSIBLE ATTRIBUTE OPTIONS (FOR THE PICK TYPE)
|
|
// 1 = OPTION VALUE
|
|
// 2 = HOLDS THE DEFAULT FLAG (IF IT'S AN ASTERISK, IT'S THE DEFAULT)
|
|
// 3 = HOLDS THE DEFAULT FLAG RULE
|
|
// 4 = ARRAY OF PRICES
|
|
// 1 = UNIT SALE PRICE
|
|
// 2 = UNITED INCH SALE PRICE
|
|
// 3 = SQUARE FEET SALE PRICE
|
|
// 5 = SEQUENCE NUMBER FOR OPTIONS
|
|
// 6 = PRINT INDICATOR USED FOR OPTIONAL PRINT VALUES
|
|
// 7 = OPTIONAL PRINT VALUE - USED WITH PRINT INDICATOR
|
|
// 8 = OPTION ADJUSTMENT WIDTH
|
|
// 9 = OPTION ADJUSTMENT HEIGHT
|
|
// 10 = (ADDITIONAL) LINK PRODUCT CODE (ie A STORM WINDOW FOR A 404)
|
|
// 11 = (PARENT PRODUCT LINK CODE (ie A STORM WINDOW FOR A 404)
|
|
// 12 = RND_TTW_TO - ROUND TT WID TO SIZE (AND PROD SIZE)
|
|
// 13 = RND_TTW_RU - ROUND TT WID TO SIZE RULE
|
|
// 14 = RND_TTH_TO - ROUND TT HT TO SIZE (AND PROD SIZE)
|
|
// 15 = RND_TTH_RU - ROUND TT HT TO SIZE RULE
|
|
// 4 = THE VALUE THAT THE USER CHOOSES, TO GO IN THE FILE (USER RESPONSE)
|
|
// 5 = ATTRIBUTE DESCRIPTION
|
|
// 6 = RULE TO EXECUTE
|
|
// 7 = LOGIC VAR, WHETHER TO GET/SAY IT OR NOT
|
|
// 8 = HOLDS THE FILE NAME WHERE THE OPTIONS WERE FOUND
|
|
// 9 = TELLS IF THE OPTION WAS A DEFAULT SELECTION
|
|
// 10 = IS THE ATTRIBUTE CALCULATED BEFORE/AFTER CATEGORY EXTRAS?
|
|
// 11 = CURRENT PARENT PRODUCT
|
|
|
|
// PIRATE_VAR TELLS WHETHER OR NOT TO PIRATE THE LINE_OPT RECORDS
|
|
*****************************************************
|
|
|
|
LOCAL MCODE := MPROD_CODE, L, CHK_BLOCK
|
|
LOCAL SEEKKEY, FILE1, FILE2, DBNAME, MATT_CODE, MDESC
|
|
LOCAL GET_ARR := {}, PRICE_ARR := {}, OPT_ARR, OPT_ARRAMT
|
|
LOCAL NEW_PCODE, NEW_STD_OPTS, ELEM := 0
|
|
LOCAL SV_SEL := SELECT(), SAVESCRN := SAVESCREEN()
|
|
LOCAL LINEFILE, OPTFILE, MSTD_OPTS
|
|
LOCAL D_ARR := {}, S_ARR := {}, B_ARR := {}, L_ARR := {}, J_ARR := {}
|
|
LOCAL CUST_PARR := {}
|
|
LOCAL TEMP_ARR := {}, NEW_GET_ARR := .T., I_ARR := {}
|
|
LOCAL MHOW_MEAS, PR_CUSTID := SPACE(8)
|
|
|
|
LOCAL RND_TTW_RULE := ''
|
|
LOCAL RND_TTH_RULE := ''
|
|
|
|
|
|
STATIC ALLGET_ARR := {}
|
|
STATIC ALLPRI_ARR := {}
|
|
|
|
PRIVATE _SELFILE := SELFILE
|
|
|
|
IF DISP_WAIT = NIL
|
|
DISP_WAIT := .T.
|
|
ENDIF
|
|
|
|
//**IF SELECT('USERFILE2') > 0 //** P3N-4/22/98
|
|
//** MSTD_OPTS := USERFILE2->STD_OPTS
|
|
//** MHOW_MEAS := USERFILE2->HOW_MEAS
|
|
//**ELSE
|
|
//** MSTD_OPTS := NIL
|
|
//** MHOW_MEAS := NIL
|
|
//**ENDIF
|
|
IF FIELDPOS('STD_OPTS') > 0 //** P3N - 4/22/98
|
|
MSTD_OPTS := STD_OPTS
|
|
ELSE
|
|
MSTD_OPTS := NIL
|
|
ENDIF
|
|
IF FIELDPOS('HOW_MEAS') > 0 //** P3N - 4/22/98
|
|
MHOW_MEAS := HOW_MEAS
|
|
ELSE
|
|
MHOW_MEAS := NIL
|
|
ENDIF
|
|
|
|
IF DISP_WAIT
|
|
WAIT_BOX('*** Retrieving Product Options ***' , ;
|
|
' ', ;
|
|
'*** Please Wait ***')
|
|
ENDIF
|
|
|
|
IF USE_TMP == NIL
|
|
USE_TMP := .T.
|
|
ENDIF
|
|
|
|
IF PPR_CUSTID = NIL
|
|
PR_CUSTID := SPACE(8)
|
|
ELSE
|
|
PR_CUSTID := PPR_CUSTID
|
|
ENDIF
|
|
|
|
ELEM := ASCAN(ALLGET_ARR, {|X| X[1] == MPROD_CODE ;
|
|
.AND. X[2] == MHOW_MEAS ;
|
|
.AND. X[5] == MSTD_OPTS ;
|
|
.AND. X[6] == PR_CUSTID } )
|
|
|
|
IF ELEM > 0
|
|
GET_ARR := ACLONE(ALLGET_ARR[ELEM, 4])
|
|
PRICE_ARR := ACLONE(ALLPRI_ARR[ELEM, 4])
|
|
FILE1 := ALLPRI_ARR[ELEM,6]
|
|
ELSE
|
|
|
|
SEEKKEY = MCODE // SEEK SO THE PERCENT OF DEALER STUFF IS ALWAYS VISIBLE
|
|
SELECT PRODUCT
|
|
SEEK SEEKKEY
|
|
|
|
IF !EMPTY(PR_CUSTID)
|
|
SELECT CUST_ATTS
|
|
FILE1 = 'CUST_ATTS'
|
|
FILE2 = 'CUST_OPTS'
|
|
DBNAME = 'CUST_ID + PROD_CODE'
|
|
SEEKKEY := PR_CUSTID + MCODE
|
|
SEEK SEEKKEY
|
|
ENDIF
|
|
IF EMPTY(PR_CUSTID) .OR. !FOUND()
|
|
SEEKKEY = MCODE
|
|
SELECT PROD_ATTS
|
|
FILE1 = 'PROD_ATTS'
|
|
FILE2 = 'PROD_OPTS'
|
|
DBNAME = 'PROD_CODE'
|
|
SEEK SEEKKEY
|
|
IF !FOUND()
|
|
SELECT CAT_ATTS
|
|
SEEKKEY := PRODUCT->CAT_CODE
|
|
SEEK SEEKKEY
|
|
FILE1 = 'CAT_ATTS'
|
|
FILE2 = 'CAT_OPTS'
|
|
DBNAME = 'CAT_CODE'
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// SITTING ON FILE1, EITHER CUST_ATTS OR PRODUCTS OR CATEGORY FILE
|
|
// GET LIST OF ATTRIBUTES
|
|
|
|
GET_ARR := {}
|
|
DO WHILE SEEKKEY == &DBNAME .AND. !EOF()
|
|
MATT_CODE = ATT_CODE
|
|
SELECT ATTRIBUTES
|
|
SEEK MATT_CODE
|
|
MDESC = DESC
|
|
SELECT &FILE1
|
|
AADD(GET_ARR, {ATT_CODE, FIELD_TYPE, {}, SPACE(20), MDESC, ;
|
|
RULE_PACK, .F., '', '', BEF_AFT_X, ''})
|
|
|
|
//////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\
|
|
// SET UP THE PRICING ARRAY TOO
|
|
// ALL CUSTOMER ROWS/COLS ARE IN LINK_CODE
|
|
IF !EMPTY(PR_CUSTID)
|
|
IF LINK_CODE$'RC'
|
|
AADD(D_ARR, {ATT_CODE, LINK_CODE})
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF LINK_CODE$'RC'
|
|
AADD(D_ARR, {ATT_CODE, LINK_CODE})
|
|
ENDIF
|
|
|
|
IF LINK_SD$'RC'
|
|
AADD(S_ARR, {ATT_CODE, LINK_SD})
|
|
ENDIF
|
|
|
|
IF LINK_BU$'RC'
|
|
AADD(B_ARR, {ATT_CODE, LINK_BU})
|
|
ENDIF
|
|
|
|
IF LINK_LU$'RC'
|
|
AADD(L_ARR, {ATT_CODE, LINK_LU})
|
|
ENDIF
|
|
|
|
IF LINK_DI$'RC'
|
|
AADD(J_ARR, {ATT_CODE, LINK_DI})
|
|
ENDIF
|
|
|
|
IF LINK_IN$'RC'
|
|
AADD(I_ARR, {ATT_CODE, LINK_IN})
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
IF !EMPTY(D_ARR)
|
|
AADD(PRICE_ARR, {'D', D_ARR})
|
|
ENDIF
|
|
|
|
IF !EMPTY(B_ARR)
|
|
AADD(PRICE_ARR, {'B', B_ARR})
|
|
ELSE
|
|
AADD(PRICE_ARR, {'B', PRODUCT->BU_BASEFAC})
|
|
ENDIF
|
|
|
|
IF !EMPTY(S_ARR)
|
|
AADD(PRICE_ARR, {'S', S_ARR})
|
|
ELSE
|
|
AADD(PRICE_ARR, {'S', PRODUCT->SD_BASEFAC})
|
|
ENDIF
|
|
|
|
IF !EMPTY(L_ARR)
|
|
AADD(PRICE_ARR, {'L', L_ARR})
|
|
ELSE
|
|
AADD(PRICE_ARR, {'L', PRODUCT->LU_BASEFAC})
|
|
ENDIF
|
|
|
|
IF !EMPTY(J_ARR)
|
|
AADD(PRICE_ARR, {'J', J_ARR})
|
|
ELSE
|
|
AADD(PRICE_ARR, {'J', PRODUCT->DI_BASEFAC})
|
|
ENDIF
|
|
|
|
IF !EMPTY(I_ARR)
|
|
AADD(PRICE_ARR, {'I', I_ARR})
|
|
ELSE
|
|
AADD(PRICE_ARR, {'I', PRODUCT->IN_BASEFAC})
|
|
ENDIF
|
|
|
|
// LOAD UP THE OPTIONS FOR EACH ATTRIBUTE
|
|
IF ELEM = 0 // no options in stored allget_arr
|
|
FOR L = 1 TO LEN(GET_ARR)
|
|
IF GET_ARR[L,2]$'PT' // ONLY DO PICKS & TABLES
|
|
OPT_ARR := {}
|
|
// START WITH LOWEST LEVEL FIRST!
|
|
|
|
IF !EMPTY(PR_CUSTID)
|
|
CHK_BLOCK = {|| CUST_ID + PROD_CODE + ATT_CODE}
|
|
SELECT CUST_OPTS
|
|
FILE2 = 'CUST_OPTS'
|
|
SEEKKEY = PR_CUSTID + MPROD_CODE + GET_ARR[L,1]
|
|
SEEK SEEKKEY
|
|
ENDIF
|
|
IF EMPTY(PR_CUSTID) .OR. !FOUND()
|
|
CHK_BLOCK = {|| PROD_CODE + ATT_CODE}
|
|
|
|
SELECT PROD_OPTS
|
|
FILE2 = 'PROD_OPTS'
|
|
SEEKKEY = MPROD_CODE + GET_ARR[L,1]
|
|
SEEK SEEKKEY
|
|
|
|
IF !FOUND()
|
|
SELECT CAT_OPTS
|
|
FILE2 = 'CAT_OPTS'
|
|
SEEKKEY = PRODUCT->CAT_CODE + GET_ARR[L,1] // CAT ATTT + ATTRIBUTE
|
|
SEEK SEEKKEY
|
|
DBNAME = 'CAT_CODE'
|
|
CHK_BLOCK = {|| CAT_CODE + ATT_CODE}
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF !FOUND()
|
|
SELECT ATT_OPTS
|
|
FILE2 = 'ATT_OPTS'
|
|
SEEKKEY = GET_ARR[L,1] // ATTRIBUTE
|
|
SEEK SEEKKEY
|
|
CHK_BLOCK = {|| ATT_CODE}
|
|
ENDIF
|
|
|
|
DO WHILE SEEKKEY == EVAL(CHK_BLOCK) .AND. !EOF()
|
|
// ADD THE OPT VALUE, AND THE DEFAULT FLAG
|
|
AADD(OPT_ARR, {OPT_VALUE, OPT_TYPE, RULE_PACK, {}, SEQ_NUM, ; // 1-5
|
|
PRINT_IND, PRINT_VAL, WIDTH_ADJ, HEIGHT_ADJ, ; // 6-9
|
|
LINK_PROD, PAR_PROD, ADJ_INVSZ, ; // 10-12
|
|
RND_TTW_TO, RND_TTW_RULE, ; // 13-14
|
|
RND_TTH_TO, RND_TTH_RULE, ADJ_TTSZ, ; // 15-17
|
|
INCL_RULE, ICPRT_RULE } ) // 18-19
|
|
// IF YOU ADD MORE, UPDATE EMPTY ARRAY BELOW!
|
|
|
|
// GET ASSOCIATED PRICING VALUES
|
|
OPT_ARRAMT := {}
|
|
AADD(OPT_ARRAMT, LIST_PRICE )
|
|
AADD(OPT_ARRAMT, LIST_UI )
|
|
AADD(OPT_ARRAMT, LIST_SQFT )
|
|
|
|
OPT_ARR[LEN(OPT_ARR),4] = OPT_ARRAMT
|
|
SKIP 1
|
|
ENDDO
|
|
IF EMPTY(OPT_ARR)
|
|
//* THE OPT_ARR NEEDS TO BE 19 ELEMENTS
|
|
//* 1 , 2 , 3 , 4, 5, 6 , 7, 8 , 9 , 10 , 11 , 12, 13 , 14 , 15 , 16 , 17 , 18 19
|
|
AADD(OPT_ARR, {'NO OPTIONS FOUND!! ', ' ', '', {},0,' ',"",0.0000,0.0000," "," "," ",0.0000, " " ,0.0000," "," ", ' ', ' ' })
|
|
ENDIF
|
|
OPT_ARR := ASORT(OPT_ARR, ,, {|X,Y| X[5] < Y[5] } )
|
|
|
|
GET_ARR[L,3] = OPT_ARR // PUT OPTION INFO INTO GET ARRAY
|
|
GET_ARR[L,8] = FILE2 // WHERE THE OPTIONS CAME FROM
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
IF ELEM = 0
|
|
TEMP_ARR := ACLONE(GET_ARR)
|
|
AADD(ALLGET_ARR, {MPROD_CODE, MHOW_MEAS, ADDL_MODE, TEMP_ARR, MSTD_OPTS, PR_CUSTID})
|
|
TEMP_ARR := ACLONE(PRICE_ARR)
|
|
AADD(ALLPRI_ARR, {MPROD_CODE, MHOW_MEAS, ADDL_MODE, TEMP_ARR, MSTD_OPTS, FILE1, PR_CUSTID })
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
// AT THIS POINT, HAVE A BLANK ARRAY EITHER FROM STATIC HOLD ARR OR FILE
|
|
|
|
FOR L = 1 TO LEN(GET_ARR)
|
|
IF ACTION = 1 // ?? LOAD USER CHOICES
|
|
IF USE_TMP
|
|
LINEFILE := 'USERFILE2'
|
|
OPTFILE := 'USERFILE8'
|
|
ELSE
|
|
LINEFILE := CUR_OL
|
|
OPTFILE := CUR_OO
|
|
ENDIF
|
|
//
|
|
// LOAD USER RESPONSES OR DEFAULTS
|
|
IF ADDL_MODE
|
|
LINEFILE := CUR_XL //** P3N - 11/26/01
|
|
OPTFILE := CUR_XO //** P3N - 11/26/01
|
|
SEEKKEY = MORDER_NUM + (LINEFILE)->PROD_CODE + MLINE_NUM + GET_ARR[L,1]
|
|
ELSE
|
|
SEEKKEY = MORDER_NUM + MLINE_NUM + GET_ARR[L,1]
|
|
ENDIF
|
|
SELECT (OPTFILE)
|
|
SEEK SEEKKEY
|
|
IF FOUND()
|
|
NEW_GET_ARR := .F.
|
|
GET_ARR[L,4] = USER_RESP // HAS OWN OPTS
|
|
ELSE
|
|
// NO OPTIONS FOUND. FIRST, SEE IF PIRATE FROM LINE PREVIOUS.
|
|
// IF NOT, THEN SEE IF PIRATE FROM THE PARENT ITEM IF ADDL_MODE
|
|
// IF IT'S THE SAME AS THE MODEL BEFORE, GET THOSE OPTIONS
|
|
SELECT (LINEFILE)
|
|
IF USE_TMP .AND. RECNO() > 1 .AND. PIRATE_VAR = 'PIRATE_OPTS'
|
|
SKIP -1
|
|
SELECT (OPTFILE)
|
|
IF ADDL_MODE
|
|
SEEKKEY = MORDER_NUM + (LINEFILE)->PROD_CODE + STR(&LINEFILE->LINE_NUM,3) + GET_ARR[L,1]
|
|
ELSE
|
|
SEEKKEY = MORDER_NUM + STR(&LINEFILE->LINE_NUM,3) + GET_ARR[L,1]
|
|
ENDIF
|
|
SEEK SEEKKEY
|
|
IF FOUND()
|
|
IF GET_ARR[L,1] = 'ORIEL TOP' .OR. GET_ARR[L,1] = 'ORIEL BOTT'
|
|
// DON'T PIRATE ORIEL MEASUREMENTS.
|
|
ELSE
|
|
IF USER_RESP <> 'N/A' // 7-3-95 DON-SIZE PROBLEMS WHEN PIRATING OPTS FROM
|
|
GET_ARR[L,4] = USER_RESP // PREVIOUS LINE'S VALUES.
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
SELECT (LINEFILE)
|
|
SKIP 1
|
|
ELSE
|
|
// SEEK ON THE PARENT OPTIONS FILE FOR THIS ATTRIBUTE
|
|
IF ADDL_MODE
|
|
SEEKKEY = MORDER_NUM + STR(&LINEFILE->LINE_NUM,3) + GET_ARR[L,1]
|
|
SELECT (CUR_OO)
|
|
SEEK SEEKKEY
|
|
IF FOUND()
|
|
GET_ARR[L,4] = USER_RESP
|
|
ENDIF
|
|
SELECT (OPTFILE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//// IF * WAS IN DATABASE, ONLY DO IF DURING SET OPTIONS.
|
|
|
|
IF EMPTY(GET_ARR[L,4]) .AND. GET_ARR[L,2]$'PT'
|
|
// LOOK FOR THE DEFAULT VALUE
|
|
GET_ARR[L,4] = GET_DEFAULT(L, GET_ARR)
|
|
IF EMPTY(GET_ARR[L,4])
|
|
GET_ARR[L,4] = 'No DEFAULT Options!!'
|
|
GET_ARR[L,9] = ' '
|
|
SGACTION = 'GET'
|
|
ELSE
|
|
GET_ARR[L,9] = '*'
|
|
// SET ANOTHER ELEMENT IN THE OPTIONS PART OF THE GETARR
|
|
// WHICH SIGNIFIES THAT THIS VALUE WAS A CALCULATED DEFAULT.
|
|
// THEN, DURING THE PRINT PROCESS, DON'T HAVE TO MESS WITH 'GET_DEFAULT'
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
NEXT
|
|
|
|
RESTSCREEN(,,,,SAVESCRN)
|
|
SELECT(SV_SEL)
|
|
RETURN {GET_ARR, PRICE_ARR, FILE1}
|
|
*********************************************************
|
|
// MOVES THE TEMPORARY ORDER LINES INTO THE PERMANENT FILE (ADDL_LINES)
|
|
*********************************************************
|
|
FUNCTION UPDATE_LINES
|
|
LOCAL SAVESEL := SELECT(), MORDER_NUM, L := 0
|
|
LOCAL DELFLAG := .F., DEL_ARR := {}, MPROD_CODE
|
|
|
|
MORDER_NUM = &CUR_MAST->ORDER_NUM
|
|
|
|
SELECT USERFILE6
|
|
GOTO TOP
|
|
DO WHILE !EOF()
|
|
IF UPDATED = 'P'
|
|
SKIP 1
|
|
LOOP
|
|
ENDIF
|
|
MLINE_NUM = LINE_NUM
|
|
MPROD_CODE = PROD_CODE
|
|
SELECT (CUR_XL)
|
|
SEEK MORDER_NUM + MPROD_CODE + STR(MLINE_NUM,3)
|
|
IF !FOUND()
|
|
ADD_ONEREC('USERFILE6', CUR_XL)
|
|
ELSE
|
|
REC_LOCK(1)
|
|
REP_ONEREC('USERFILE6', CUR_XL)
|
|
REPLACE (CUR_XL)->GL311_AMT WITH ;
|
|
( SET_GL311( (CUR_XL)->PROD_CODE ) * (CUR_XL)->QUANTITY )
|
|
REPLACE UPDATED WITH ' ' // INDICATE THAT THIS IS NO LONGER PENDING
|
|
UNLOCK
|
|
ENDIF
|
|
SELECT USERFILE6
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
SELECT (CUR_XL)
|
|
SEEK MORDER_NUM
|
|
DO WHILE ORDER_NUM == MORDER_NUM .AND. !EOF()
|
|
IF UPDATED = 'P'
|
|
AADD(DEL_ARR, RECNO() )
|
|
DELFLAG := .T.
|
|
ENDIF
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
IF DELFLAG
|
|
FOR L = 1 TO LEN(DEL_ARR)
|
|
GOTO DEL_ARR[L]
|
|
REC_LOCK(1)
|
|
REPLACE ORDER_NUM WITH ''
|
|
REPLACE LINE_NUM WITH 0
|
|
REPLACE PROD_CODE WITH ''
|
|
DELETE
|
|
UNLOCK
|
|
NEXT
|
|
ENDIF
|
|
|
|
RETURN .T.
|
|
*********************************************************
|
|
// MOVES THE TEMPORARY ORDER OPTIONS INTO THE PERMANENT FILE
|
|
*********************************************************
|
|
FUNCTION UPDATE_ORDS(MUSERFILE)
|
|
LOCAL MORDER_NUM, MLINE_NUM, MATT_CODE, MUSER_RESP
|
|
LOCAL SAVESEL := SELECT(), DELFLAG := .F., SAVESCR
|
|
LOCAL DEL_ARR := {}, REALFILE, SEEKKEY
|
|
LOCAL ADDL_MODE := .F.
|
|
LOCAL REAL_PARENT
|
|
LOCAL M1 := 'Do you want to CONTINUE? ' + ;
|
|
'Order ' +(CUR_MAST)->ORDER_NUM + ' shippped on ' + ;
|
|
DTOC((CUR_MAST)->SHIP_DATE)
|
|
LOCAL M2 := 'If you do continue it is IMPERATIVE to RECREATE '
|
|
LOCAL M3 := 'Order Control Shipping Information to reflect any changes.'
|
|
LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') //** P3N - 10/15/98
|
|
IF CUR_MAST == 'ORD_MAST' .AND. MUSERFILE = 'USERFILE8' //** P3N - 10/15/98
|
|
IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' //** P3N - 10/15/98
|
|
IF SELECT('ORD_SHIP') > 0 //** P3N - 10/15/98
|
|
ELSE //** P3N - 10/15/98
|
|
DBOPEN('ORD_SHIP') //** P3N - 10/15/98
|
|
ENDIF //** P3N - 10/15/98
|
|
IF ORD_SHIP->(DBSEEK((CUR_MAST)->ORDER_NUM)) //** P3N - 10/15/98
|
|
? CHR(7) //** P3N - 10/15/98
|
|
IF PROMPT_BOX(M1, M2, M3) //** P3N - 10/15/98
|
|
// USER REQUESTED TO CONTINUE WITH THE UPDATE SEND INFO MSG
|
|
ERR_BOX('ANY Order changes will TAINT EXISTING Shipping Information. ' , ;
|
|
'IF YOU CONTINUE - To ENSURE ACCURATE shipping information: ' , ;
|
|
' 1) REMOVE ALL current Shipping Information.', ' and', ;
|
|
' 2) RE-SHIP this Order. ' , ;
|
|
'Press <Esc> to ABORT. ' )
|
|
IF LASTKEY() = 27 //** P3N - 10/15/98
|
|
RETURN .F. //** P3N - 10/15/98
|
|
ENDIF //** P3N - 10/15/98
|
|
ELSE //** P3N - 10/15/98
|
|
KEYBOARD CHR(27) //** P3N - 11/19/98
|
|
RETURN .F. //** P3N - 10/15/98
|
|
ENDIF //** P3N - 10/15/98
|
|
ENDIF //** P3N - 10/15/98
|
|
ENDIF //** P3N - 10/15/98
|
|
ENDIF //** P3N - 10/15/98
|
|
|
|
IF MUSERFILE == 'USERFILE8'
|
|
//* REALFILE = 'ORDER_OPTS'
|
|
//* REAL_PARENT := 'ORD_LINES'
|
|
* REALFILE = ['] + &CUR_OO + [']
|
|
* REAL_PARENT := ['] + &CUR_OL + [']
|
|
REALFILE = CUR_OO
|
|
REAL_PARENT := CUR_OL
|
|
ELSE
|
|
IF MUSERFILE == 'USERFILE9'
|
|
//* REALFILE = 'ADDL_OPTS'
|
|
//* REAL_PARENT := 'ADDL_LINES'
|
|
* REALFILE = ['] + &CUR_XO + [']
|
|
* REAL_PARENT := ['] + &CUR_XL + [']
|
|
REALFILE = CUR_XO
|
|
REAL_PARENT := CUR_XL
|
|
ADDL_MODE := .T.
|
|
ELSE
|
|
IF MUSERFILE == 'FILE8FILE9'
|
|
MUSERFILE = 'USERFILE8'
|
|
//* REALFILE = "ADDL_OPTS"
|
|
//* REAL_PARENT := 'ADDL_LINES'
|
|
* REALFILE = ['] + &CUR_XO + [']
|
|
* REAL_PARENT := ['] + &CUR_XL + [']
|
|
REALFILE = CUR_XO
|
|
REAL_PARENT := CUR_XL
|
|
ADDL_MODE := .T.
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SELECT (MUSERFILE)
|
|
GO TOP
|
|
MORDER_NUM = ORDER_NUM
|
|
|
|
DO WHILE !EOF()
|
|
MLINE_NUM = LINE_NUM
|
|
MATT_CODE = ATT_CODE
|
|
MUSER_RESP = USER_RESP
|
|
|
|
SELECT (REALFILE)
|
|
IF ADDL_MODE
|
|
SEEKKEY := MORDER_NUM + (MUSERFILE)->PROD_CODE + STR(MLINE_NUM,3)
|
|
ELSE
|
|
SEEKKEY := MORDER_NUM + STR(MLINE_NUM,3)
|
|
ENDIF
|
|
|
|
IF !( (REAL_PARENT)->(DBSEEK(SEEKKEY)) )
|
|
SELECT (MUSERFILE)
|
|
SKIP 1
|
|
LOOP
|
|
ENDIF
|
|
|
|
SELECT (REALFILE)
|
|
SEEKKEY := SEEKKEY + MATT_CODE // SEEKKEY ON OPT_FILE HAS ATT_CODE AT END
|
|
SEEK SEEKKEY
|
|
IF !FOUND()
|
|
ADD_REC(3)
|
|
REPLACE ORDER_NUM WITH MORDER_NUM
|
|
REPLACE LINE_NUM WITH MLINE_NUM
|
|
REPLACE ATT_CODE WITH MATT_CODE
|
|
IF ADDL_MODE
|
|
REPLACE PROD_CODE WITH (MUSERFILE)->PROD_CODE
|
|
ENDIF
|
|
ELSE
|
|
REC_LOCK(3)
|
|
ENDIF
|
|
REPLACE USER_RESP WITH MUSER_RESP
|
|
REPLACE UPDATED WITH ' '
|
|
UNLOCK
|
|
|
|
SELECT (MUSERFILE)
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
SELECT (REALFILE)
|
|
SEEKKEY = MORDER_NUM
|
|
SEEK SEEKKEY
|
|
DO WHILE ORDER_NUM == SEEKKEY .AND. !EOF()
|
|
IF UPDATED = 'P'
|
|
AADD(DEL_ARR, RECNO() )
|
|
DELFLAG := .T.
|
|
ENDIF
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
IF DELFLAG
|
|
FOR L = 1 TO LEN(DEL_ARR)
|
|
GOTO DEL_ARR[L]
|
|
REC_LOCK(1)
|
|
REPLACE ORDER_NUM WITH ''
|
|
REPLACE LINE_NUM WITH 0
|
|
REPLACE ATT_CODE WITH ''
|
|
IF ADDL_MODE
|
|
REPLACE PROD_CODE WITH ''
|
|
ENDIF
|
|
DELETE
|
|
UNLOCK
|
|
NEXT
|
|
ENDIF
|
|
|
|
SELECT (SAVESEL)
|
|
RETURN .T.
|
|
|
|
*********************************************************
|
|
// MAKE SURE THE PICKS HAVE A VALID RESPONSE
|
|
*********************************************************
|
|
FUNCTION VALID_PICK(GET_ARR, POINTER)
|
|
LOCAL L, CHECK_VAR
|
|
IF GET_ARR[POINTER,2]$'PT'
|
|
CHECK_VAR = GET_ARR[POINTER,4]
|
|
IF ALLTRIM(CHECK_VAR) = 'N/A' .OR. EMPTY(CHECK_VAR)
|
|
RETURN .T.
|
|
ENDIF
|
|
FOR L = 1 TO LEN(GET_ARR[POINTER,3]) // LIST OF GOOD OPTS
|
|
IF CHECK_VAR == GET_ARR[POINTER,3,L,1]
|
|
RETURN .T.
|
|
ENDIF
|
|
NEXT
|
|
RETURN .F.
|
|
ENDIF
|
|
RETURN .T.
|
|
|
|
*********************************************************
|
|
// RENAME ATTRIBUTES
|
|
*********************************************************
|
|
FUNCTION REN_ATT
|
|
// RENAME ATTRIBUTES
|
|
|
|
LOCAL ATT_PARM := DBOPEN('ATTRIBUTES', .T.) , CUR_ATT, NEW_ATT
|
|
LOCAL MSG1, MSG2
|
|
|
|
CLS
|
|
SAYTITLE('Rename Attributes', 'PRPO' )
|
|
|
|
DBOPEN('ATT_OPTS', .T.)
|
|
DBOPEN('CAT_ATTS', .T.)
|
|
DBOPEN('CAT_OPTS', .T.)
|
|
DBOPEN('PROD_ATTS', .T.)
|
|
DBOPEN('PROD_OPTS', .T.)
|
|
DBOPEN('ORDER_OPTS', .T.)
|
|
DBOPEN('ADDL_OPTS', .T.)
|
|
DBOPEN('MATHPACK', .T.)
|
|
DBOPEN('RULEPACK', .T.)
|
|
// ADD NEW FILES TO THIS LIST FOR QUOTE OPTS
|
|
DBOPEN('QUOTE_OPTS', .T.)
|
|
DBOPEN('ADDL_QOPT', .T.)
|
|
|
|
DO WHILE .T.
|
|
CUR_ATT = GET_KEY(ATT_PARM)
|
|
IF EMPTY(CUR_ATT) .OR. LASTKEY() = 27
|
|
CLOSE DATABASES
|
|
RETURN
|
|
ENDIF
|
|
NEW_ATT = SPACE(10)
|
|
@ 05,19 SAY ' Enter New Attribute' GET NEW_ATT PICTURE '@!'
|
|
@ 06,19 SAY ' (Press <ESC> to Quit)'
|
|
READ()
|
|
IF EMPTY(NEW_ATT)
|
|
LOOP
|
|
ENDIF
|
|
|
|
MSG1 := 'About to CHANGE Attributes'
|
|
MSG2 := 'Do You Wish to Continue?'
|
|
IF !PROMPT_BOX(MSG1,MSG2,'') // ASKS YES/NO, YES = .T., NO = .F.
|
|
@ 5,0 CLEAR
|
|
LOOP
|
|
ENDIF
|
|
|
|
@ 6,0 CLEAR
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Attribute File'
|
|
SELECT ATTRIBUTES
|
|
DONSETORD(0)
|
|
REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT)
|
|
DONSETORD(1)
|
|
|
|
@ 10,0
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Attribute Options File'
|
|
SELECT ATT_OPTS
|
|
DONSETORD(0)
|
|
REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT)
|
|
DONSETORD(1)
|
|
|
|
@ 10,0
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Category File'
|
|
SELECT CAT_ATTS
|
|
DONSETORD(0)
|
|
REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT)
|
|
DONSETORD(1)
|
|
|
|
@ 10,0
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Category Options File'
|
|
SELECT CAT_OPTS
|
|
DONSETORD(0)
|
|
REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT)
|
|
DONSETORD(1)
|
|
|
|
@ 10,0
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Model File'
|
|
SELECT PROD_ATTS
|
|
DONSETORD(0)
|
|
REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT)
|
|
DONSETORD(1)
|
|
|
|
@ 10,0
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Model Options File'
|
|
SELECT PROD_OPTS
|
|
DONSETORD(0)
|
|
REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT)
|
|
DONSETORD(1)
|
|
|
|
@ 10,0
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Order Options File'
|
|
SELECT ORDER_OPTS
|
|
DONSETORD(0)
|
|
REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT)
|
|
DONSETORD(1)
|
|
|
|
@ 10,0
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Additional Order Options File'
|
|
SELECT ADDL_OPTS
|
|
DONSETORD(0)
|
|
REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT)
|
|
DONSETORD(1)
|
|
|
|
@ 10,0
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Quote Options File'
|
|
SELECT QUOTE_OPTS
|
|
DONSETORD(0)
|
|
REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT)
|
|
DONSETORD(1)
|
|
|
|
@ 10,0
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Additional Quote Options File'
|
|
SELECT ADDL_QOPT
|
|
DONSETORD(0)
|
|
REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT)
|
|
DONSETORD(1)
|
|
|
|
@ 10,0
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Math Pack File'
|
|
SELECT MATHPACK
|
|
DONSETORD(0)
|
|
DO WHILE !EOF()
|
|
IF TRIM(FIELD1) == TRIM(CUR_ATT)
|
|
REPLACE FIELD1 WITH NEW_ATT
|
|
ENDIF
|
|
IF TRIM(FIELD2) == TRIM(CUR_ATT)
|
|
REPLACE FIELD2 WITH NEW_ATT
|
|
ENDIF
|
|
IF TRIM(ATT_CODE) == TRIM(CUR_ATT)
|
|
REPLACE ATT_CODE WITH NEW_ATT
|
|
ENDIF
|
|
SKIP 1
|
|
ENDDO
|
|
DONSETORD(1)
|
|
|
|
@ 10,0
|
|
@ 10,10 SAY 'Changing ATTRIBUTES in the Rule Pack File'
|
|
SELECT RULEPACK
|
|
DONSETORD(0)
|
|
DO WHILE !EOF()
|
|
IF TRIM(FIELD1) == TRIM(CUR_ATT)
|
|
REPLACE FIELD1 WITH NEW_ATT
|
|
ENDIF
|
|
IF TRIM(FIELD2) == TRIM(CUR_ATT)
|
|
REPLACE FIELD2 WITH NEW_ATT
|
|
ENDIF
|
|
IF TRIM(ALIAS1) == TRIM(CUR_ATT)
|
|
REPLACE ALIAS1 WITH NEW_ATT
|
|
ENDIF
|
|
IF TRIM(ALIAS2) == TRIM(CUR_ATT)
|
|
REPLACE ALIAS2 WITH NEW_ATT
|
|
ENDIF
|
|
SKIP 1
|
|
ENDDO
|
|
DONSETORD(1)
|
|
@ 5,0 CLEAR
|
|
|
|
ENDDO
|
|
CLOSE DATABASES
|
|
RETURN
|
|
*********************************************************
|
|
* CALCULATE THE ITEM DISCOUNTS
|
|
*********************************************************
|
|
FUNCTION ITEMDISC( PARTIAL_INVOICE, REPRINT_INVOICE, SELFILE)
|
|
LOCAL THIS_DISC, THIS_LINE
|
|
LOCAL ALT_PRICE_IND := .F. //** P3N - 9/1/98
|
|
LOCAL QTYARR := {} //** P3N -12/4/98
|
|
LOCAL INV_QTY := 0 //** P3N -12/4/98
|
|
|
|
//DEFAULT PARTIAL_INVOICE := .F.
|
|
//DEFAULT REPRINT_INVOICE := .F.
|
|
|
|
If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., )
|
|
If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., )
|
|
|
|
|
|
IF EMPTY(PARTIAL_INVOICE) //** P3N -11/24/98
|
|
PARTIAL_INVOICE := .F. //** P3N -11/24/98
|
|
ENDIF //** P3N -11/24/98
|
|
|
|
IF EMPTY(REPRINT_INVOICE) //** P3N -12/4/98
|
|
REPRINT_INVOICE := .F. //** P3N -12/4/98
|
|
ENDIF //** P3N -12/4/98
|
|
|
|
IF PARTIAL_INVOICE .OR. REPRINT_INVOICE //** P3N -12/4/98
|
|
QTYARR := GET_OSTQTY(SELFILE) //** P3N -12/4/98
|
|
IF EMPTY(QTYARR) //** P3N - 12/4/98
|
|
SHP_QTY := 0 //** P3N - 12/4/98
|
|
INV_QTY := 0 //** P3N - 12/4/98
|
|
ELSE //** P3N - 12/4/98
|
|
SHP_QTY := QTYARR[1] //** P3N - 12/4/98
|
|
INV_QTY := QTYARR[2] //** P3N - 12/4/98
|
|
ENDIF //** P3N - 12/4/98
|
|
ENDIF //** P3N - 12/4/98
|
|
|
|
IF ALT_SPRICE <> 0
|
|
IF PARTIAL_INVOICE //** P3N - 11/24/98
|
|
//**THIS_LINE := (ALT_SPRICE * SHIP_QTY) //** P3N - 11/24/98
|
|
THIS_LINE := (ALT_SPRICE * SHP_QTY) //** P3N - 11/24/98
|
|
ELSEIF REPRINT_INVOICE //** P3N - 12/07/98
|
|
THIS_LINE := (ALT_SPRICE * INV_QTY) //** P3N - 12/07/98
|
|
ELSE
|
|
THIS_LINE := (ALT_SPRICE * QUANTITY)
|
|
ENDIF
|
|
ALT_PRICE_IND := .T. //** P3N - 9/1/98
|
|
ELSE
|
|
IF PARTIAL_INVOICE //** P3N - 11/24/98
|
|
//**THIS_LINE := (SALE_PRICE * SHIP_QTY) //** P3N - 11/24/98
|
|
THIS_LINE := (SALE_PRICE * SHP_QTY) //** P3N - 11/24/98
|
|
ELSEIF REPRINT_INVOICE //** P3N - 12/07/98
|
|
THIS_LINE := (SALE_PRICE * INV_QTY) //** P3N - 12/07/98
|
|
ELSE
|
|
THIS_LINE := (SALE_PRICE * QUANTITY)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//** P3N - 11/23/98 PARTIAL INVOICE PROCESSING
|
|
IF EMPTY(THIS_LINE)
|
|
THIS_DISC := 0 //** P3N - 11/23/98
|
|
ELSEIF DISCOUNT <> 0
|
|
THIS_DISC := (DISCOUNT * .01 * THIS_LINE)
|
|
ELSEIF EMPTY(DISC_S_AMT) //** IF NO LINE ITEM DISC. USE SYS/CUST DISC
|
|
THIS_DISC := (SYS_DISC * .01 * THIS_LINE)
|
|
ELSEIF PARTIAL_INVOICE //** P3N - 12/4/98
|
|
//** THIS_DISC := DISC_S_AMT * SHIP_QTY
|
|
THIS_DISC := DISC_S_AMT * SHP_QTY
|
|
ELSEIF REPRINT_INVOICE //** P3N - 12/4/98
|
|
THIS_DISC := DISC_S_AMT * INV_QTY
|
|
ELSE //** P3N - 12/4/98
|
|
THIS_DISC := DISC_S_AMT * QUANTITY
|
|
ENDIF
|
|
|
|
**IF EMPTY(ALT_SPRICE) // P3N - PER ELLEN - 6/3/98
|
|
**ELSE // DO NOT APPLY A DISCOUNT ON ALT PRICE!
|
|
** THIS_DISC := 0
|
|
**ENDIF
|
|
THIS_DISC := VAL(STR(THIS_DISC,12,2))
|
|
|
|
//** P3N - 4/3/98 IS THIS ALT_SPRICE A CREDIT?
|
|
//** P3N - IF A CREDIT SET THE DISCOUNT NEGATIVE
|
|
//** P3N - CGWPRINT FUNC PRNT_DISCOUNTS() WILL TREAT A NEGATIVE DISCOUNT
|
|
//** P3N - AS A POSITIVE CHARGE BACK.
|
|
IF ALT_SPRICE <> 0
|
|
IF ALT_SPRICE + SALE_PRICE = 0
|
|
IF THIS_DISC < 0
|
|
// DISCOUNT IS ALREADY NEGATIVE
|
|
ELSE
|
|
THIS_DISC := THIS_DISC * -1
|
|
ENDIF
|
|
ENDIF
|
|
ELSEIF (CUR_MAST)->TERMS = '98' //CREDIT MEMO
|
|
IF THIS_DISC < 0
|
|
// DISCOUNT IS ALREADY NEGATIVE
|
|
ELSE
|
|
THIS_DISC := THIS_DISC * -1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN {THIS_LINE, THIS_DISC, ALT_PRICE_IND} //** P3N - 9/1/98
|
|
****RETURN {THIS_LINE, THIS_DISC} //** P3N - 9/1/98
|
|
|
|
|
|
*********************************************************
|
|
** UPDATE MISC TOTAL IN ORDER MASTER
|
|
** P3N - 2/20/98
|
|
** PER ELLENS REQUEST - ADDED AN ALTERNATE PRICE
|
|
** USED TO OVERRIDE THE SYSTEM GENERATED PRICE!
|
|
*********************************************************
|
|
FUNCTION UP_MISCTOT(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE)
|
|
//**LOCAL SUBTOT:=0, SAVESEL := SELECT()
|
|
LOCAL SUBTOT := 0, QTYARR := {}
|
|
LOCAL WKQTY := 0, MISCKEY //** P3N - 11/25/98
|
|
LOCAL MISCITMS := CUR_MISC //** P3N - 11/25/98
|
|
|
|
//DEFAULT PARTIAL_INVOICE := .F.
|
|
//DEFAULT REPRINT_INVOICE := .F.
|
|
|
|
|
|
If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., )
|
|
If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., )
|
|
|
|
|
|
IF EMPTY(PARTIAL_INVOICE) //** P3N - 11/25/98
|
|
PARTIAL_INVOICE := .F. //** P3N - 11/25/98
|
|
ENDIF
|
|
|
|
IF EMPTY(REPRINT_INVOICE) //** P3N - 12/4/98
|
|
REPRINT_INVOICE := .F. //** P3N - 12/4/98
|
|
ENDIF
|
|
|
|
IF PARTIAL_INVOICE .OR. REPRINT_INVOICE //** P3N - 12/4/98
|
|
MISCITMS := 'TORD_LINES' //** P3N - 11/25/98
|
|
IF SELECT('TORD_LINES') > 0
|
|
//** TORD_LINES ALREADY EXISTS
|
|
IF (MISCITMS)->ORDER_NUM == (CUR_MAST)->ORDER_NUM
|
|
//** TORD_LINES ALREADY EXISTS WITH THE SAME ORDER - PROCESS
|
|
ELSE
|
|
CLOSE TORD_LINES
|
|
BLD_TORD_LINES((CUR_MAST)->ORDER_NUM)
|
|
ENDIF
|
|
ELSE
|
|
BLD_TORD_LINES((CUR_MAST)->ORDER_NUM)
|
|
ENDIF
|
|
(MISCITMS)->(DBGOTOP())
|
|
ELSE
|
|
(MISCITMS)->(DBSEEK(MORDER_NUM))
|
|
ENDIF
|
|
DO WHILE (MISCITMS)->(!EOF()) .AND. (MISCITMS)->ORDER_NUM == MORDER_NUM
|
|
WKQTY := (MISCITMS)->QUANTITY
|
|
IF PARTIAL_INVOICE .OR. REPRINT_INVOICE //** P3N - 12/4/98
|
|
IF (MISCITMS)->PROD_CODE == 'MISCITM'
|
|
MISCKEY := (MISCITMS)->ORDER_NUM
|
|
MISCKEY := MISCKEY + STR((MISCITMS)->LINE_NUM, 3)
|
|
MISCKEY := MISCKEY + (MISCITMS)->PROD_CODE
|
|
QTYARR := GET_OSTQTY('TORD_LINES', MISCKEY)
|
|
IF EMPTY(QTYARR) //** P3N - 12/4/98
|
|
WKQTY := 0 //** P3N - 12/4/98
|
|
ELSEIF PARTIAL_INVOICE //** P3N - 12/4/98
|
|
WKQTY := QTYARR[1] //** SHIP QTY
|
|
ELSEIF REPRINT_INVOICE //** P3N - 12/4/98
|
|
WKQTY := QTYARR[2] //** INVOICE QTY
|
|
ENDIF //** P3N - 12/4/98
|
|
ELSE
|
|
WKQTY := 0
|
|
ENDIF
|
|
ENDIF
|
|
IF EMPTY((MISCITMS)->ALT_SPRICE) //** P3N - 2/20/98
|
|
SUBTOT := SUBTOT + ( (MISCITMS)->SALE_PRICE * WKQTY )
|
|
ELSE
|
|
SUBTOT := SUBTOT + ((MISCITMS)->ALT_SPRICE * WKQTY ) //**P3N-2/20/98
|
|
ENDIF
|
|
(MISCITMS)->(DBSKIP(+1))
|
|
ENDDO
|
|
//**(MISCITMS)->(DBGOTOP())
|
|
|
|
IF SUBTOT > 99999.99
|
|
ERR_BOX('** Calculated total - ' + ALLTRIM(STR(SUBTOT,16,4)) + ;
|
|
' is larger Than allowable! **', ;
|
|
' The Max. allowable MISC. Order Items total is - $99,999.99', ;
|
|
' The Order INVOICE TOTAL may be INCORRECT!')
|
|
ELSE
|
|
//** SELECT (CUR_MAST)
|
|
REC_LOCK(1, CUR_MAST)
|
|
REPLACE (CUR_MAST)->ORD_M_TTL WITH SUBTOT
|
|
(CUR_MAST)->(DBUNLOCK())
|
|
ENDIF
|
|
|
|
//**SELECT (SAVESEL)
|
|
RETURN .T.
|
|
|
|
|
|
*********************************************************
|
|
****PAINT SCREEN BEFORE 2115 EXECUTES
|
|
*********************************************************
|
|
FUNCTION MISCP_PAINT(NOPAINT, PARTIAL_INVOICE, REPRINT_INVOICE, SELFILE)
|
|
|
|
LOCAL SAVESEL := SELECT()
|
|
LOCAL LINE_TOTAL := 0, SUBTOTL := 0, SEEKKEY := &CUR_MAST->ORDER_NUM
|
|
LOCAL DISC_TOTAL := 0, _DISC_INFO
|
|
LOCAL MISC_TOTAL, L1 := 0, L2 := 0, L3 := 0
|
|
LOCAL THIS_LINE := 0, THIS_DISC := 0
|
|
LOCAL M1 := 0, M2 := 0, M3 := 0, NTX1 := 0, NTX2 := 0, NTX3 := 0
|
|
LOCAL T1 := 0, T2 := 0, T3 := 0 //** P3N - 11/25/98
|
|
LOCAL ALT_PRICE_IND := .F. //** P3N - 9/1/98
|
|
LOCAL ALT_PR_ARR := {} //** P3N - 9/1/98
|
|
LOCAL MISC_ARR := {} //** P3N - 11/25/98
|
|
LOCAL DISC_ARR := {} //** P3N - 12/07/98
|
|
LOCAL DISC_PCT := 0, ELM := 0, TOT_AMT := 0 //** P3N - 12/07/98
|
|
LOCAL DISP_PCT := 0
|
|
LOCAL FSC_PCT := SHIPMETH->FUEL_CHRG / 100 //** P3N - 09/21/06
|
|
|
|
//DEFAULT PARTIAL_INVOICE := .F.
|
|
//DEFAULT REPRINT_INVOICE := .F.
|
|
|
|
If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., )
|
|
If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., )
|
|
|
|
|
|
IF SHIPMETH->(DBSEEK( (CUR_MAST)->SHP_METHOD )) //** P3N - 11/13/06
|
|
FSC_PCT := SHIPMETH->FUEL_CHRG / 100 //** P3N - 11/13/06
|
|
ENDIF //** P3N - 11/13/06
|
|
//** P3N - 11/23/98 PARTIAL INVOICE PROCESSING MODIFICATIONS
|
|
|
|
IF EMPTY(NOPAINT) //** P3N - 11/23/98
|
|
NOPAINT := .F. //** P3N - 11/23/98
|
|
ENDIF //** P3N - 11/23/98
|
|
|
|
IF EMPTY(PARTIAL_INVOICE) //** P3N - 11/23/98
|
|
PARTIAL_INVOICE := .F. //** P3N - 11/23/98
|
|
ENDIF //** P3N - 11/23/98
|
|
|
|
IF EMPTY( REPRINT_INVOICE ) //** P3N - 12/4/98
|
|
REPRINT_INVOICE := .F. //** P3N - 12/4/98
|
|
ENDIF //** P3N - 12/4/98
|
|
|
|
IF LASTKEY() = 27
|
|
RETURN
|
|
ENDIF
|
|
|
|
// DO ORDER LINES FIRST, THEN ADDL PRODUCTS SECOND
|
|
IF &CUR_MAST->QUOTE_PRIC > 0
|
|
LINE_TOTAL := &CUR_MAST->QUOTE_PRIC
|
|
ELSE
|
|
SELECT (CUR_OL)
|
|
SEEK SEEKKEY
|
|
DO WHILE ORDER_NUM == SEEKKEY .AND. !EOF()
|
|
_DISC_INFO := ITEMDISC(PARTIAL_INVOICE, REPRINT_INVOICE, SELFILE)
|
|
THIS_LINE := _DISC_INFO[1]
|
|
THIS_DISC := _DISC_INFO[2]
|
|
ALT_PRICE_IND := _DISC_INFO[3] //** P3N - 9/1/98
|
|
IF ALT_PRICE_IND //** P3N - 9/1/98
|
|
AADD(ALT_PR_ARR, {LINE_NUM, PROD_CODE } ) //** P3N - 9/1/98
|
|
ENDIF //** P3N - 9/1/98
|
|
LINE_TOTAL := LINE_TOTAL + THIS_LINE
|
|
// CHECK FOR USER LINE DISCOUNTS OR SYSTEM CALC DISCOUNTS
|
|
DISC_TOTAL := DISC_TOTAL + THIS_DISC
|
|
|
|
SKIP 1
|
|
ENDDO
|
|
|
|
SELECT (CUR_XL)
|
|
SEEK SEEKKEY
|
|
DO WHILE ORDER_NUM == SEEKKEY .AND. !EOF()
|
|
IF ALT_SPRICE <> 0
|
|
THIS_LINE := (ALT_SPRICE * QUANTITY)
|
|
ELSE
|
|
THIS_LINE := (SALE_PRICE * QUANTITY)
|
|
ENDIF
|
|
//** P3N - 9/1/98 DO NOT INCLUDE THE ADDL LINE PRICE IN THE TOTAL
|
|
//** P3N - 9/1/98 ORDER AMOUNT IF AN ALT. PRICE HAS BEEN ENTERED.
|
|
IF EMPTY(ALT_PR_ARR) .OR. ; //** P3N - 9/1/98
|
|
EMPTY(ASCAN(ALT_PR_ARR, {|X| X[1] == LINE_NUM .AND. ;
|
|
X[2] == PAR_PROD } ) )
|
|
LINE_TOTAL := LINE_TOTAL + THIS_LINE //** P3N - 9/1/98
|
|
ENDIF //** P3N - 9/1/98
|
|
|
|
|
|
// CHECK FOR USER LINE DISCOUNTS OR SYSTEM CALC DISCOUNTS
|
|
IF DISCOUNT <> 0
|
|
THIS_DISC := (DISCOUNT * .01 * THIS_LINE)
|
|
ELSE
|
|
THIS_DISC := DISC_S_AMT * QUANTITY
|
|
ENDIF
|
|
DISC_TOTAL := DISC_TOTAL + THIS_DISC
|
|
SKIP 1
|
|
ENDDO
|
|
ENDIF
|
|
|
|
//* CALC SUBTOTAL
|
|
UP_MISCTOT((CUR_MAST)->ORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) //** P3N - 11/25/98
|
|
|
|
SELECT (CUR_MAST)
|
|
MISC_TOTAL := &CUR_MAST->ORD_M_TTL //* F8-MISC TOTALS
|
|
IF PARTIAL_INVOICE .OR. REPRINT_INVOICE //** P3N - 11/24/98
|
|
MISC_ARR := GETQTYMISC( (CUR_MAST)->ORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE )
|
|
FOR I := 1 TO LEN(MISC_ARR[1])
|
|
IF MISC_ARR[1,I,5] == 'ORDMISC1'
|
|
IF REPRINT_INVOICE //** P3N - 12/4/98
|
|
M1 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
M1 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L1 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
M1 := M1 * L1
|
|
ELSEIF MISC_ARR[1,I,5] == 'ORDMISC2'
|
|
IF REPRINT_INVOICE //** P3N - 12/4/98
|
|
M2 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
M2 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L2 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
M2 := M2 * L2
|
|
ELSEIF MISC_ARR[1,I,5] == 'ORDMISC3'
|
|
IF REPRINT_INVOICE //** P3N - 12/4/98
|
|
M3 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
M3 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L3 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
M3 := M3 * L3
|
|
ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX1'
|
|
IF REPRINT_INVOICE //** P3N - 12/4/98
|
|
T1 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
T1 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L1 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
NTX1 := T1 * L1
|
|
ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX2'
|
|
IF REPRINT_INVOICE //** P3N - 12/4/98
|
|
T2 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
T2 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L2 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
NTX2 := T2 * L2
|
|
ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX3'
|
|
IF REPRINT_INVOICE //** P3N - 12/4/98
|
|
T3 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
T3 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L3 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
NTX3 := T3 * L3
|
|
ENDIF
|
|
NEXT
|
|
ELSE
|
|
//* - SCREEN 2115 MISC ITEMS
|
|
M1 := &CUR_MAST->MISC_AMT1 * &CUR_MAST->MISC_QTY1
|
|
M2 := &CUR_MAST->MISC_AMT2 * &CUR_MAST->MISC_QTY2
|
|
M3 := &CUR_MAST->MISC_AMT3 * &CUR_MAST->MISC_QTY3
|
|
|
|
//* 7-30-97 NON-TAXABLE AMOUNTS ADDED - Perry Nichols
|
|
NTX1 := &CUR_MAST->NOTX_AMT1 * &CUR_MAST->NOTX_QTY1
|
|
NTX2 := &CUR_MAST->NOTX_AMT2 * &CUR_MAST->NOTX_QTY2
|
|
NTX3 := &CUR_MAST->NOTX_AMT3 * &CUR_MAST->NOTX_QTY3
|
|
ENDIF
|
|
SUBTOTL := (CUR_MAST)->ORD_L_TTL + (CUR_MAST)->ORD_M_TTL + M1 + M2 + M3
|
|
SUBTOTL := SUBTOTL - (CUR_MAST)->ORD_D_TTL
|
|
IF _OC_CAPABLE
|
|
REC_LOCK(1)
|
|
REPLACE (CUR_MAST)->ORD_L_TTL WITH LINE_TOTAL
|
|
IF DISC_TOTAL > 9999.99
|
|
ERR_BOX('** The Calculated Discount is - ' + STR(DISC_TOTAL, 15,2) + ' **' , ;
|
|
'** The system can store a discount up to $9999.99 **')
|
|
ELSE
|
|
REPLACE (CUR_MAST)->ORD_D_TTL WITH DISC_TOTAL
|
|
ENDIF
|
|
IF M->OE_TYPE == 'ADD' .AND. ; //** P3N - 09/22/06 HAPPY BDAY CINDY #47
|
|
EMPTY((CUR_MAST)->FUEL_CHRG)
|
|
//** ADD ORDER TIME-CALC BASED ON THE ORDER TOTAL * SHIPMETH->FUEL_CHRG %
|
|
SUBTOTL := (CUR_MAST)->ORD_L_TTL + (CUR_MAST)->ORD_M_TTL + M1 + M2 + M3
|
|
SUBTOTL := SUBTOTL - (CUR_MAST)->ORD_D_TTL
|
|
REPLACE (CUR_MAST)->FUEL_CHRG WITH SUBTOTL * FSC_PCT
|
|
ENDIF
|
|
SUBTOTL += (CUR_MAST)->FUEL_CHRG //** P3N - 09/22/06 HAPPY BDAY CINDY #47
|
|
REPLACE (CUR_MAST)->SALES_TAX WITH ( (CUR_MAST)->SLS_TX_PCT * SUBTOTL ) /100
|
|
|
|
//* 7-30-97 NON-TAXABLE AMOUNTS ADDED - Perry Nichols
|
|
TOT_AMT := SUBTOTL +(CUR_MAST)->SALES_TAX + NTX1 + NTX2 + NTX3
|
|
//** P3N - 09/21/06 ADDED THE FUEL SURCHARGE TO ORDER ENTRY
|
|
REPLACE (CUR_MAST)->TOTAL_AMT WITH TOT_AMT
|
|
|
|
IF ZERO_ORDER() //** NO CHARGE P3N-3/5/99
|
|
REPLACE (CUR_MAST)->TOTAL_AMT WITH 0
|
|
REPLACE (CUR_MAST)->SALES_TAX WITH 0 //** P3N - 02/20/07
|
|
ENDIF
|
|
(CUR_MAST)->(DBUNLOCK())
|
|
ENDIF
|
|
|
|
//** P3N - 11/23/98 PARTIAL INVOICE PROCESSING MODIFICATIONS
|
|
IF NOPAINT
|
|
//** DO NOT PAINT ANYTHING ON THE SCREEN
|
|
|
|
ELSE
|
|
|
|
@ 02,33 SAY ' Line Item Totals ' + STR(&CUR_MAST->ORD_L_TTL,9,2)
|
|
@ 03,33 SAY ' Less Discounts '
|
|
@ 04,33 SAY ' Misc Item Lines '
|
|
@ 06,06 SAY 'Misc. Items'
|
|
@ 06,36 SAY 'Qty'
|
|
@ 06,45 SAY 'Cost'
|
|
@ 10,53 SAY '----------'
|
|
@ 11,43 SAY 'Subtotal '
|
|
|
|
//* 7-30-97 NON-TAXABLE AMOUNTS ADDED - Perry Nichols
|
|
//* lines 16-20 are used for the NON-TAXABLE items
|
|
//** P3N - 09/21/06 ADD FUEL SURCHARGE TO ORDER ENTRY
|
|
@ 14,53 SAY '----------'
|
|
@ 15,06 SAY 'Non-Taxable Items'
|
|
@ 15,36 SAY 'Qty'
|
|
@ 15,45 SAY 'Cost'
|
|
@ 19,53 SAY '----------'
|
|
|
|
IF EMPTY((CUR_MAST)->FUEL_CHRG)
|
|
|
|
ELSE
|
|
DISP_PCT := VAL (STR((CUR_MAST)->FUEL_CHRG / SUBTOTL,15,2))
|
|
ENDIF
|
|
|
|
@ 12,65 SAY STR(DISP_PCT*100, 3,0) + '%' //** P3N - 09/21/06
|
|
@ 13,65 SAY STR((CUR_MAST)->SLS_TX_PCT, 8,4) + '%' //** P3N - 09/22/06 - HAPPY BDAY CINDY #47
|
|
@ 21,33 SAY 'Order ' + ALLTRIM((CUR_MAST)->ORDER_NUM) + ' TOTAL'
|
|
@ 22,53 SAY '=========='
|
|
|
|
ENDIF
|
|
|
|
|
|
UP_ORD_TTL(NOPAINT, MISC_ARR, PARTIAL_INVOICE, REPRINT_INVOICE )
|
|
|
|
SELECT(SAVESEL)
|
|
|
|
RETURN .T.
|
|
|
|
|
|
|
|
*********************************************************
|
|
* THIS FUNCTION PROVIDES THE PROCESSING FOR THE MISC PRICING SCREEN
|
|
*********************************************************
|
|
|
|
FUNCTION MISC_PRICING( )
|
|
|
|
LOCAL SV_SEL := SELECT()
|
|
LOCAL SV_COLOR := SETCOLOR(BLACK)
|
|
LOCAL I_DESC := SPACE(30), I_AMT := 0, FR_AMT := 0
|
|
LOCAL SLS_TAX := 0
|
|
LOCAL MTITLE := 'ADD Misc Items / Close Order - ' + &CUR_MAST->ORDER_NUM
|
|
LOCAL ASR_ARR, OPT
|
|
LOCAL ACTION_CODE := GETAVAR( 'ACTION_CODE' )
|
|
|
|
IF LASTKEY() = 27
|
|
RETURN
|
|
ENDIF
|
|
|
|
IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD'
|
|
OPT := 1
|
|
MTITLE := 'ADD Misc Items / Close Order - ' + &CUR_MAST->ORDER_NUM
|
|
IF CUR_MAST = 'QUOTE_MAST'
|
|
MTITLE := 'ADD Misc Items / Close Quote - ' + &CUR_MAST->ORDER_NUM
|
|
ENDIF
|
|
ELSE
|
|
OPT := 3
|
|
MTITLE := 'ORDER Misc Items - ' + &CUR_MAST->ORDER_NUM
|
|
IF CUR_MAST = 'QUOTE_MAST'
|
|
MTITLE := 'QUOTE Misc Items - ' + &CUR_MAST->ORDER_NUM
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ASR_ARR := {'&CUR_MAST',.F., , , , , ACTION_CODE , '2115', .F.}
|
|
|
|
NEWREC := .F.
|
|
ADD_SING_REC(OPT, MTITLE, ASR_ARR)
|
|
|
|
UP_OM_NEED_CALC() // INDICATE THE THE ORDER IS COMPLETE.
|
|
|
|
SETCOLOR(SV_COLOR)
|
|
SELECT(SV_SEL)
|
|
RETURN .T.
|
|
|
|
*********************************************************
|
|
* THIS FUNCTION UPDATES THE ORDER TOTALS
|
|
*********************************************************
|
|
|
|
FUNCTION UP_ORD_TTL(NOPAINT, MISC_ARR, PARTIAL_INVOICE, REPRINT_INVOICE)
|
|
|
|
LOCAL SAVECOLOR := SETCOLOR(HNOR), LINE_TOTAL := 0
|
|
LOCAL PRNTVAR, SAVESEL := SELECT()
|
|
LOCAL M1 := 0, M2 := 0, M3 := 0, NTX1 := 0, NTX2 := 0, NTX3 := 0
|
|
LOCAL T1 := 0, T2 := 0, T3 := 0 //** P3N - 11/25/98
|
|
LOCAL MISC_TOTAL := 0, M_FSC := 0, MFUEL_CHRG := 0
|
|
LOCAL DISC_TOTAL := 0, SUB1 := 0
|
|
LOCAL STX_AMT := 0, TOT_AMT := 0
|
|
LOCAL M_AMT1 := 0, M_AMT2 := 0, M_AMT3 := 0, M_STAX := 0
|
|
LOCAL M_QTY1 := 0, M_QTY2 := 0, M_QTY3 := 0, M_OTTL := 0
|
|
LOCAL DISP_PCT := 0
|
|
|
|
//7-30-97 NO more FREIGHT - per Ellen
|
|
****STATIC M_TTL
|
|
****STATIC M_FRT
|
|
|
|
//7-30-97 NON-TAX MODIFICATIONS - Perry Nichols
|
|
LOCAL NOTX_AMT1,NOTX_AMT2,NOTX_AMT3,NOTX_QTY1,NOTX_QTY2,NOTX_QTY3
|
|
|
|
//** P3N - 11/23/98 PARTIAL INVOICE PROCESSING MODIFICATIONS
|
|
IF EMPTY(NOPAINT)
|
|
NOPAINT := .F.
|
|
ENDIF
|
|
IF NOPAINT
|
|
//** DO NOT PAINT ANYTHING ON THE SCREEN - JUST CALC TOTALS
|
|
//** P3N - 11/23/98 PARTIAL INVOICE PROCESSING MODIFICATIONS
|
|
IF EMPTY(MISC_ARR) //** USE ORDER QTYS TO CALC TOTALS
|
|
M1 := (CUR_MAST)->MISC_AMT1 * (CUR_MAST)->MISC_QTY1
|
|
M2 := (CUR_MAST)->MISC_AMT2 * (CUR_MAST)->MISC_QTY2
|
|
M3 := (CUR_MAST)->MISC_AMT3 * (CUR_MAST)->MISC_QTY3
|
|
NTX1 := (CUR_MAST)->NOTX_AMT1 * (CUR_MAST)->NOTX_QTY1
|
|
NTX2 := (CUR_MAST)->NOTX_AMT2 * (CUR_MAST)->NOTX_QTY2
|
|
NTX3 := (CUR_MAST)->NOTX_AMT3 * (CUR_MAST)->NOTX_QTY3
|
|
ELSE //** USE SHIP QTYS TO CALC TOTALS
|
|
FOR I := 1 TO LEN(MISC_ARR[1])
|
|
IF MISC_ARR[1,I,5] == 'ORDMISC1'
|
|
IF REPRINT_INVOICE
|
|
M1 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
M1 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L1 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
M1 := M1 * L1
|
|
ELSEIF MISC_ARR[1,I,5] == 'ORDMISC2'
|
|
IF REPRINT_INVOICE
|
|
M2 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
M2 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L2 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
M2 := M2 * L2
|
|
ELSEIF MISC_ARR[1,I,5] == 'ORDMISC3'
|
|
IF REPRINT_INVOICE
|
|
M3 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
M3 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L3 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
M3 := M3 * L3
|
|
ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX1'
|
|
IF REPRINT_INVOICE
|
|
T1 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
T1 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L1 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
NTX1 := T1 * L1
|
|
ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX2'
|
|
IF REPRINT_INVOICE
|
|
T2 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
T2 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L2 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
NTX2 := T2 * L2
|
|
ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX3'
|
|
IF REPRINT_INVOICE
|
|
T3 := MISC_ARR[1,I,6] //** INV QTY
|
|
ELSE
|
|
T3 := MISC_ARR[1,I,3] //** SHIP QTY
|
|
ENDIF
|
|
L3 := MISC_ARR[1,I,4] //** ITEM PRICE
|
|
NTX3 := T3 * L3
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
SUB1 := M1 + M2 + M3 ;
|
|
+ &CUR_MAST->ORD_L_TTL - &CUR_MAST->ORD_D_TTL ;
|
|
+ &CUR_MAST->ORD_M_TTL
|
|
MFUEL_CHRG := (CUR_MAST)->FUEL_CHRG //** P3N - 09/22/06 HAPPY BDAY CINDY #47
|
|
SUB1 += MFUEL_CHRG //** P3N - 09/22/06 HAPPY BDAY CINDY #47
|
|
STX_AMT := (SUB1 * (&CUR_MAST->SLS_TX_PCT / 100))
|
|
STX_AMT := VAL( STR( STX_AMT, 8, 2 ) )
|
|
//** IF (CUR_MAST)->TERMS = '90' .OR. ; //NO CHARGE
|
|
//** (CUR_MAST)->TERMS = '96' //CANCELLED
|
|
IF ZERO_ORDER() //** NO CHARGE P3N-3/5/99
|
|
TOT_AMT := 0.00 //** TOTAL ORDER IS ZERO
|
|
ELSE
|
|
TOT_AMT := SUB1 + STX_AMT + NTX1 + NTX2 + NTX3
|
|
ENDIF
|
|
ELSE
|
|
IF !EMPTY(GETVARS)
|
|
//7-30-97 NON-TAX MODIFICATIONS - Perry Nichols
|
|
NOTX_AMT1 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_AMT1'})
|
|
NOTX_AMT2 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_AMT2'})
|
|
NOTX_AMT3 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_AMT3'})
|
|
NOTX_QTY1 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_QTY1'})
|
|
NOTX_QTY2 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_QTY2'})
|
|
NOTX_QTY3 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_QTY3'})
|
|
|
|
M_AMT1 := ASCAN(GETVARS, {|X| X[3] = 'MISC_AMT1'})
|
|
M_AMT2 := ASCAN(GETVARS, {|X| X[3] = 'MISC_AMT2'})
|
|
M_AMT3 := ASCAN(GETVARS, {|X| X[3] = 'MISC_AMT3'})
|
|
M_QTY1 := ASCAN(GETVARS, {|X| X[3] = 'MISC_QTY1'})
|
|
M_QTY2 := ASCAN(GETVARS, {|X| X[3] = 'MISC_QTY2'})
|
|
M_QTY3 := ASCAN(GETVARS, {|X| X[3] = 'MISC_QTY3'})
|
|
M_STAX := ASCAN(GETVARS, {|X| X[3] = 'SALES_TAX'})
|
|
M_OTTL := ASCAN(GETVARS, {|X| X[3] = 'TOTAL_AMT'})
|
|
//7-30-97 NO more FREIGHT - per Ellen
|
|
****M_FRT := ASCAN(GETVARS, {|X| X[3] = 'FREIGHT'})
|
|
|
|
|
|
// WRITE DISCOUNTS TO SCREEN
|
|
LINE_TOTAL := (CUR_MAST)->ORD_L_TTL
|
|
DISC_TOTAL := (CUR_MAST)->ORD_D_TTL * -1
|
|
MISC_TOTAL := (CUR_MAST)->ORD_M_TTL
|
|
@ 02,53 SAY VAL(STR(LINE_TOTAL,10,2)) PICTURE '9999999.99' //*ORDER LINE ITEM TOTALS
|
|
//**@ 02,52 SAY VAL(STR(LINE_TOTAL,10,2)) PICTURE '9999999.99' //*ORDER LINE ITEM TOTALS
|
|
**@ 02,53 SAY VAL(STR(LINE_TOTAL,9,2)) PICTURE '999999.99' //*ORDER LINE ITEM TOTALS
|
|
//**@ 03,53 SAY VAL(STR(DISC_TOTAL,9,2)) PICTURE '999999.99' //*DISC TAX AMT
|
|
@ 03,54 SAY VAL(STR(DISC_TOTAL,9,2)) PICTURE '999999.99' //*DISC TAX AMT
|
|
//**@ 04,53 SAY VAL(STR(MISC_TOTAL,9,2)) PICTURE '999999.99' //*MISC AMT
|
|
@ 04,54 SAY VAL(STR(MISC_TOTAL,9,2)) PICTURE '999999.99' //*MISC AMT
|
|
|
|
IF EMPTY(M_AMT1) //** GET OUT - DO NOT CONTINUE DUE TO NO
|
|
SETCOLOR(SAVECOLOR) //** GETVARS ARR TO USE FOR UPDATE
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
//* CALC SUB TOTAL OF MISC ITEMS
|
|
// misc_amt1,2,3
|
|
M1 := (GETVARS[M_AMT1,4] * GETVARS[M_QTY1,4])
|
|
M2 := (GETVARS[M_AMT2,4] * GETVARS[M_QTY2,4])
|
|
M3 := (GETVARS[M_AMT3,4] * GETVARS[M_QTY3,4])
|
|
SUB1 := M1 + M2 + M3 ;
|
|
+ &CUR_MAST->ORD_L_TTL - &CUR_MAST->ORD_D_TTL ;
|
|
+ &CUR_MAST->ORD_M_TTL
|
|
|
|
M_FSC := ASCAN(GETVARS, {|X| X[3] = 'FUEL_CHRG'}) //** P3N - 09/21/06
|
|
IF EMPTY(M_FSC) //** P3N - 09/21/06
|
|
MFUEL_CHRG := (CUR_MAST)->FUEL_CHRG //** P3N - 09/21/06
|
|
ELSE //** P3N - 09/21/06
|
|
MFUEL_CHRG := GETVARS[M_FSC,4] //** P3N - 09/21/06
|
|
ENDIF //** P3N - 09/21/06
|
|
//**@ 07,53 SAY STR(M1, 9, 2)
|
|
@ 07,54 SAY STR(M1, 9, 2)
|
|
//**@ 08,53 SAY STR(M2, 9, 2)
|
|
@ 08,54 SAY STR(M2, 9, 2)
|
|
//**@ 09,53 SAY STR(M3, 9, 2)
|
|
@ 09,54 SAY STR(M3, 9, 2)
|
|
IF M->OE_TYPE = 'ADD' //** P3N - 10/16/06
|
|
@ 12, 54 SAY MFUEL_CHRG PICTURE '999999.99' //** P3N - 10/16/06
|
|
ENDIF //** P3N - 10/16/06
|
|
@ 11,54 SAY VAL(STR(SUB1,9,2)) PICTURE '999999.99' //*SUBTOTAL
|
|
|
|
//* CALC THE SALES TAX AMT
|
|
STX_AMT := ( (SUB1+ MFUEL_CHRG) * (&CUR_MAST->SLS_TX_PCT / 100))
|
|
STX_AMT := VAL( STR( STX_AMT, 8, 2 ) )
|
|
PRNTVAR := STX_AMT
|
|
|
|
// sales tax amt
|
|
GETVARS[M_STAX,4] := STX_AMT
|
|
// @ 12,53 SAY VAL(STR(PRNTVAR,9,2)) PICTURE '999999.99' //*SALES TAX AMT
|
|
// @ 13,53 SAY VAL(STR(PRNTVAR,9,2)) PICTURE '999999.99' //*SALES TAX AMT
|
|
@ 13,54 SAY VAL(STR(PRNTVAR,9,2)) PICTURE '999999.99' //*SALES TAX AMT
|
|
|
|
//7-30-97 NON-TAX MODIFICATIONS - Perry Nichols
|
|
//* DISPLAY THE NON - TAXABLE ITEMS - SCREEN 2115
|
|
NTX1 := (GETVARS[NOTX_AMT1,4] * GETVARS[NOTX_QTY1,4])
|
|
NTX2 := (GETVARS[NOTX_AMT2,4] * GETVARS[NOTX_QTY2,4])
|
|
NTX3 := (GETVARS[NOTX_AMT3,4] * GETVARS[NOTX_QTY3,4])
|
|
//**@ 15,53 SAY STR(NTX1, 9, 2)
|
|
@ 16,54 SAY STR(NTX1, 9, 2)
|
|
//**@ 16,53 SAY STR(NTX2, 9, 2)
|
|
@ 17,54 SAY STR(NTX2, 9, 2)
|
|
//**@ 17,53 SAY STR(NTX3, 9, 2)
|
|
@ 18,54 SAY STR(NTX3, 9, 2)
|
|
|
|
//* DISPLAY THE TOTAL ORDER AMT
|
|
|
|
//** P3N - 4/3/98
|
|
//**IF (CUR_MAST)->TERMS = '90' .OR. ; //NO CHARGE
|
|
//** (CUR_MAST)->TERMS = '96' //CANCELLED
|
|
IF ZERO_ORDER() //** NO CHARGE P3N-3/5/99
|
|
TOT_AMT := 0.00 //** TOTAL ORDER IS ZERO
|
|
ELSE
|
|
TOT_AMT := SUB1 + MFUEL_CHRG + STX_AMT + NTX1 + NTX2 + NTX3
|
|
ENDIF
|
|
|
|
GETVARS[M_OTTL,4] := TOT_AMT
|
|
PRNTVAR := TOT_AMT
|
|
//** P3N - 09/21/06 - ADDED FUEL SURCHARGE TO ORDER ENTRY
|
|
IF EMPTY(MFUEL_CHRG)
|
|
ELSE
|
|
DISP_PCT := MFUEL_CHRG / SUB1 //** P3N - 09/22/06 HAPPY BDAY CINDY #47
|
|
ENDIF
|
|
@ 12,65 SAY STR(DISP_PCT*100, 3,0) + '%' //** P3N - 09/22/06 HAPPY BDAY CINDY #47
|
|
@ 13,65 SAY STR((CUR_MAST)->SLS_TX_PCT, 8,4) + '%' //** P3N - 09/22/06 HAPPY BDAY CINDY #47
|
|
@ 21,52 SAY VAL(STR(PRNTVAR,10,2)) PICTURE '99999999.99' //*TOTAL ORDER AMT
|
|
//**@ 20,52 SAY VAL(STR(PRNTVAR,10,2)) PICTURE '99999999.99' //*TOTAL ORDER AMT
|
|
**@ 20,53 SAY VAL(STR(PRNTVAR,9,2)) PICTURE '999999.99' //*TOTAL ORDER AMT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (CUR_MAST)->SALES_TAX <> VAL(STR(STX_AMT, 9,2)) .OR. ;
|
|
(CUR_MAST)->TOTAL_AMT <> VAL(STR(TOT_AMT, 10,2))
|
|
IF _OC_CAPABLE
|
|
(CUR_MAST)->(REC_LOCK(1))
|
|
REPLACE (CUR_MAST)->SALES_TAX WITH STX_AMT
|
|
REPLACE (CUR_MAST)->TOTAL_AMT WITH TOT_AMT
|
|
(CUR_MAST)->(DBUNLOCK())
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SETCOLOR(SAVECOLOR)
|
|
|
|
RETURN .T.
|
|
|
|
*********************************************************
|
|
* THIS FUNCTION VALIDATES THE PRINT IND VALUE
|
|
*********************************************************
|
|
FUNCTION PRTIND_VAL()
|
|
LOCAL SV_SEL := SELECT(), RETVAL
|
|
IF PRINT_IND$' ANDE'
|
|
RETVAL := .T.
|
|
ELSE
|
|
ERR_BOX('VALID Values are the following:', ;
|
|
'"A" - ALWAYS Print Option Value', ;
|
|
'"N" - NEVER Print the Option Value', ;
|
|
'"D" - PRINT Print if Option is DEFAULT ', ;
|
|
'"E" - PRINT Print if Option is NOT Default-EXCEPTION')
|
|
RETVAL := .F.
|
|
ENDIF
|
|
SELECT(SV_SEL)
|
|
RETURN RETVAL
|
|
|
|
**************************************************************
|
|
FUNCTION NOSORT() // called by acdcargo for lineitems
|
|
ERR_BOX('*** SORT OPTION Not AVAILABLE ***', ;
|
|
'*** In This Process ***', ;
|
|
' ')
|
|
RETURN .T.
|
|
|
|
**************************************************************
|
|
* NOTES EDIT FOR THE LINE ITEM
|
|
**************************************************************
|
|
FUNCTION LINENOTE() // called by acdcargo for lineitems
|
|
LOCAL ACTION_CODE := GETAVAR('ACTION_CODE')
|
|
LOCAL SAVESCRN := SAVESCREEN(), LI_NOTES := 3, SV_IND := PRT_NOTES
|
|
LOCAL MTITLE := 'Line Item ' + ALLTRIM(STR(USERFILE2->LINE_NUM)) ;
|
|
+ ' (' + ALLTRIM(USERFILE2->PROD_CODE) + ')'
|
|
IF _OC_CAPABLE
|
|
NOTES('LINE_NOTES', NOTEREV_EDIT(), MTITLE, 3, .F.,.F.) // NO AUDIT_PROC AND DON'T MESS WITH SETTING HOT KEYS
|
|
REMOVE_XLNOTE(ORDER_NUM, LINE_NUM) //** P3N - 2/8/99
|
|
****// 5-7-97 **************
|
|
**** Ask where to PRINT the line item NOTE?
|
|
IF EMPTY(LINE_NOTES)
|
|
REPLACE PRT_NOTES WITH 'U' //Print notes under the line item - DEFAULT
|
|
ELSE
|
|
IF PRT_NOTES = 'A'
|
|
LI_NOTES := 1
|
|
ELSEIF PRT_NOTES = 'B'
|
|
LI_NOTES := 2
|
|
ELSE
|
|
LI_NOTES := 3
|
|
ENDIF
|
|
|
|
LI_NOTES := PICKLIST({'ABOVE Line Item', 'BESIDE Line Item', 'UNDER Line Item'}, 5, 31, 'PRINT Notes', LI_NOTES)
|
|
IF LI_NOTES = 1
|
|
REPLACE PRT_NOTES WITH 'A' //Print notes above the line item
|
|
ELSEIF LI_NOTES = 2
|
|
REPLACE PRT_NOTES WITH 'B' //Print notes beside the line item
|
|
ELSE // = 3
|
|
REPLACE PRT_NOTES WITH 'U' //Print notes under the line item - DEFAULT
|
|
ENDIF
|
|
IF LASTKEY() == 27
|
|
REPLACE PRT_NOTES WITH SV_IND // RETURN TO ORIGINAL VALUE IF ESCAPE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
NOTES('LINE_NOTES', NOTEREV_EDIT(),'Review '+MTITLE, 3, .F.,.F.) // NO AUDIT_PROC AND DON'T MESS WITH SETTING HOT KEYS
|
|
ENDIF
|
|
RESTSCREEN(,,,,SAVESCRN)
|
|
RETURN .T.
|
|
**************************************************************
|
|
//** P3N - 2/08/99 *
|
|
//** REMOVE THE XL NOTE *
|
|
**************************************************************
|
|
FUNCTION REMOVE_XLNOTE(MORD_NUM, MLINE)
|
|
LOCAL SEEKKEY := MORD_NUM + STR(MLINE, 3)
|
|
LOCAL SVSEL := SELECT()
|
|
LOCAL SVORD, SVREC
|
|
LOCAL LINEFILE := 'ADDL_LINES'
|
|
IF CUR_MAST = 'QUOTE_MAST'
|
|
LINEFILE := 'QUOTE_ADDL'
|
|
ENDIF
|
|
SVREC := (LINEFILE)->(RECNO())
|
|
SVORD := (LINEFILE)->(INDEXORD())
|
|
SVREC := (LINEFILE)->(RECNO())
|
|
SELECT(LINEFILE)
|
|
DONSETORD(3) //** ORDER_NUM + STR(LINE_NUM, 3)
|
|
IF (LINEFILE)->(DBSEEK(SEEKKEY))
|
|
REC_LOCK(3, LINEFILE)
|
|
(LINEFILE)->LINE_NOTES := ' '
|
|
(LINEFILE)->(DBUNLOCK())
|
|
ENDIF
|
|
DONSETORD(SVORD)
|
|
(LINEFILE)->(DBGOTO(SVREC))
|
|
SELECT(SVSEL)
|
|
RETURN .T.
|
|
**************************************************************
|
|
FUNCTION TAXNOTE() // called by acdcargo for lineitems
|
|
LOCAL ACTION_CODE := GETAVAR('ACTION_CODE')
|
|
LOCAL SAVESCRN := SAVESCREEN()
|
|
LOCAL MTITLE := 'Tax Table Notes ' + USERFILE2->STAXSCH
|
|
IF _OC_CAPABLE
|
|
NOTES('NOTES', NOTEREV_EDIT(), MTITLE, 3, .F.,.F.) // NO AUDIT_PROC AND DON'T MESS WITH SETTING HOT KEYS
|
|
ELSE
|
|
NOTES('NOTES', NOTEREV_EDIT(),'Review '+MTITLE, 3, .F.,.F.) // NO AUDIT_PROC AND DON'T MESS WITH SETTING HOT KEYS
|
|
ENDIF
|
|
RESTSCREEN(,,,,SAVESCRN)
|
|
RETURN .T.
|
|
|
|
|
|
**************************************************************
|
|
FUNCTION GET_PRICEARR(MPRICE_ARR, MPRICE_TYPE, PPR_CUSTID)
|
|
// GET THE PRICE ARRAY FOR THIS MPRICE TYPE
|
|
|
|
LOCAL ELEM, PR_CUSTID := PPR_CUSTID
|
|
|
|
**ELEM = ASCAN(MPRICE_ARR, {|X| X[1] == MPRICE_TYPE .AND. X[6] == PR_CUSTID} )
|
|
ELEM = ASCAN(MPRICE_ARR, {|X| X[1] == MPRICE_TYPE} )
|
|
IF ELEM > 0
|
|
RETURN MPRICE_ARR[ELEM,2]
|
|
ELSE
|
|
RETURN {}
|
|
ENDIF
|
|
|
|
|
|
**************************************************************
|
|
* VALIDATE THE DECIMAL VALUES AT ORDER ENTRY TIME
|
|
**************************************************************
|
|
|
|
FUNCTION VALID_DECIMAL(VAL2CHEK)
|
|
LOCAL DECIMAL_VAL := VAL2CHEK - INT(VAL2CHEK)
|
|
LOCAL NCHOICE
|
|
LOCAL SV_COLOR := SETCOLOR(LNOR)
|
|
LOCAL NTOP := 03, NLEFT := 50, NBOTTOM := 20, NRIGHT := 65
|
|
LOCAL DEC_ARR := {}, I, ELM, NEG_SW := .F.
|
|
|
|
IF DECIMAL_VAL == 0
|
|
RETURN .T.
|
|
ELSEIF DECIMAL_VAL < 0
|
|
DECIMAL_VAL := DECIMAL_VAL * -1
|
|
NEG_SW := .T.
|
|
ENDIF
|
|
|
|
ELM := ASCAN( FRACTION_ARR , {|X| X[2] == DECIMAL_VAL } )
|
|
IF ELM == 0
|
|
ERR_BOX( ' *** INVALID DECIMAL ENTERED ', ;
|
|
' *** Check the FRACTION VALUE ', ;
|
|
' *** Must be a Multiple of 1/' + ALLTRIM(STR(MBASE_NUM,2) ) )
|
|
RETURN .F.
|
|
ELSE
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
|
|
**************************************************************
|
|
FUNCTION CHK_ADDITIONAL(MPROD_CODE, MADDL_PROD, MOPTION, MRESPONSE)
|
|
// CHECK THE ADDITIONAL PRODUCT
|
|
|
|
LOCAL ELEM, SAVESEL := SELECT()
|
|
LOCAL MSTD_OPTS := ' ', MSG1, RESULT, MSG2, MSG3
|
|
LOCAL SAVESCR := SAVESCREEN(), SAVEREC
|
|
LOCAL SAVECOLOR := SETCOLOR()
|
|
|
|
|
|
|
|
SELECT PRODUCT
|
|
SAVEREC = RECNO()
|
|
|
|
SEEK MADDL_PROD
|
|
MDESC = DESC // PRODUCT DESCRIPTION
|
|
MSG1 = 'Additional Product, ' + MDESC
|
|
MSG2 = 'For Option, ' + TRIM(MOPTION) + ': ' + MRESPONSE
|
|
MSG3 = 'Do You Want to use Standard Options'
|
|
|
|
|
|
bTOP = 10
|
|
bBOTM = 16
|
|
bLEFT = 10
|
|
bRIGHT = 70
|
|
*
|
|
SETCOLOR(DARK)
|
|
@ bTOP+1,bLEFT+1 CLEAR TO bBOTM+1,bRIGHT+1 // DRAW SHADOW BOX
|
|
SETCOLOR(HREV)
|
|
@ bTOP,bLEFT CLEAR TO bBOTM,bRIGHT // DRAW BACKROUND COLOR
|
|
@ bTOP,bLEFT TO bBOTM,bRIGHT // DRAW DOUBLE LINE
|
|
|
|
IF EMPTY(MSTD_OPTS)
|
|
MSTD_OPTS = 'Y'
|
|
ENDIF
|
|
@ BTOP+1, BLEFT+2 SAY MSG1
|
|
@ BTOP+2, BLEFT+2 SAY MSG2
|
|
@ BTOP+4, BLEFT+2 SAY MSG3 GET MSTD_OPTS PICTURE '!' VALID MSTD_OPTS$'YN'
|
|
READ()
|
|
|
|
GOTO SAVEREC
|
|
SELECT(SAVESEL)
|
|
RESTSCREEN(,,,,SAVESCR)
|
|
SETCOLOR(SAVECOLOR)
|
|
RETURN MSTD_OPTS
|
|
|
|
|
|
**************************************************************
|
|
FUNCTION ADD_ADDITIONAL(MADDL_PROD, MSTD_OPTS, GET_ARR)
|
|
// CHECK THE ADDITIONAL PRODUCT IN ADDL_LINE FILE
|
|
|
|
LOCAL ELEM, SAVESEL := SELECT(), MLINE_NUM := USERFILE2->LINE_NUM
|
|
LOCAL MPROD_CODE
|
|
LOCAL CLR_ELM := ASCAN(GET_ARR, { |X| X[1] = 'FR COLOR'}) //** P3N - 10/17/06
|
|
LOCAL MCOLOR := GET_ARR[CLR_ELM,4] //** P3N - 10/17/06
|
|
MPROD_CODE = USERFILE2->PROD_CODE
|
|
|
|
SELECT PRODUCT
|
|
SAVEREC = RECNO()
|
|
|
|
SEEK MADDL_PROD
|
|
SELECT USERFILE6
|
|
LOCATE FOR PROD_CODE == MADDL_PROD .AND. LINE_NUM == MLINE_NUM
|
|
IF !FOUND()
|
|
ADD_ONEREC('USERFILE2', 'USERFILE6')
|
|
ENDIF
|
|
|
|
// IF EXTRA WINDOWS (TWIN, TRIPLE, QUAD, ETC)
|
|
// INCREASE THE QUANTITY OF THE ADDITIONAL PRODUCT
|
|
// BY THE NUMBER OF ADDITIONAL WINDOWS
|
|
ELEM = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'XTRA WIND'})
|
|
IF ELEM > 0
|
|
REPLACE QUANTITY WITH USERFILE2->QUANTITY * ( VAL( GET_ARR[ELEM,4] ) + 1 )
|
|
ENDIF
|
|
|
|
REPLACE ORDER_NUM WITH &CUR_MAST->ORDER_NUM
|
|
REPLACE PROD_CODE WITH MADDL_PROD
|
|
REPLACE PAR_PROD WITH MPROD_CODE
|
|
REPLACE PAR_COLOR WITH DISPCOLOR(.F.)
|
|
IF PAR_COLOR = 'N/A' //** P3N - 10/17/06
|
|
REPLACE PAR_COLOR WITH MCOLOR //** P3N - 10/17/06
|
|
ENDIF //** P3N - 10/17/06
|
|
REPLACE LINE_NUM WITH MLINE_NUM
|
|
REPLACE STD_OPTS WITH MSTD_OPTS
|
|
REPLACE ALT_SPRICE WITH 0
|
|
REPLACE UPDATED WITH ' '
|
|
|
|
REPLACE LINE_NOTES WITH ' ' //** P3N - 2/8/99
|
|
|
|
RETURN NIL
|
|
|
|
|
|
*******************************************************
|
|
FUNCTION DO_ADDL_LINES
|
|
// GO DO AN ACD UPDATE FOR THE ADDITIONAL PRODUCTS AND OPTION
|
|
|
|
LOCAL TITLE, SAVESEL := SELECT()
|
|
LOCAL MORDER_NUM := &CUR_MAST->ORDER_NUM
|
|
|
|
SELECT USERFILE6
|
|
IF LASTREC() > 0
|
|
IF SELECT('USERFILE8') > 0
|
|
SELECT USERFILE8
|
|
USE
|
|
ENDIF
|
|
|
|
SELECT USERFILE9
|
|
COPY TO (USERFILE8) FOR GOOD_AO('USERFILE9')
|
|
|
|
NET_USE('&USERFILE8', .T., 3, 'USERFILE8')
|
|
SELECT (CUR_XO)
|
|
DONSETORD(1)
|
|
NDX_EXP = INDEXKEY()
|
|
SELECT USERFILE8
|
|
INDEX ON &NDX_EXP TO &USERFILE8
|
|
IF __DBDRIVER = 'CDX'
|
|
TAGNAME := 'T1'
|
|
INDEX ON &NDX_EXP TAG &TAGNAME TO &USERFILE8
|
|
ELSE
|
|
INDEX ON &NDX_EXP TO &USERFILE8
|
|
ENDIF
|
|
|
|
|
|
|
|
IF _OC_CAPABLE .AND. GETAVAR('ACTION_CODE') = 'ADD'
|
|
TITLE = 'Update Additional Line Items'
|
|
ACD_PAR_CHILD(1, TITLE, {NIL, CUR_XL, .F., 3, 'ADD NOAPPEND',,,,,,.F. }) // don't close dbfs
|
|
ELSE
|
|
TITLE = 'Review Additional Line Items'
|
|
ACD_PAR_CHILD(3, TITLE, {NIL, CUR_XL, .F., 3, 'REV',,,,,,.F. }) // don't close dbfs
|
|
ENDIF
|
|
ELSE
|
|
IF SELECT('USERFILE8') > 0
|
|
SELECT USERFILE8
|
|
ZAP
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SELECT(SAVESEL)
|
|
|
|
RETURN NIL
|
|
|
|
|
|
********************************************************
|
|
FUNCTION GOOD_AO(SELFILE)
|
|
LOCAL SEEKKEY := (SELFILE)->ORDER_NUM + (SELFILE)->PROD_CODE + STR( (SELFILE)->LINE_NUM,3)
|
|
//*IF ADDL_LINES->(DBSEEK(SEEKKEY))
|
|
IF (CUR_XL)->(DBSEEK(SEEKKEY))
|
|
RETURN .T.
|
|
ELSE
|
|
RETURN .F.
|
|
ENDIF
|
|
********************************************************
|
|
FUNCTION GET_CM_VALU(FLD_NAM,FLD_VALU)
|
|
LOCAL SAVESEL := SELECT(), EVALVAL
|
|
IF EMPTY(&FLD_VALU)
|
|
SELECT CUST_MAST
|
|
&FLD_VALU := &FLD_NAM
|
|
ENDIF
|
|
SELECT (SAVESEL)
|
|
RETURN .T.
|
|
|
|
|
|
********************************************************
|
|
FUNCTION CUST_CSZ(FLDLEN)
|
|
RETURN PADR(ALLTRIM(CUST_CITY) + ' ' + ALLTRIM(CUST_STATE) + ' ' + CUST_ZIP, FLDLEN)
|
|
|
|
********************************************************
|
|
FUNCTION SHIP_CSZ(FLDLEN)
|
|
RETURN PADR(ALLTRIM(SHIPADD2) + ' ' + ALLTRIM(SHIPST) + ' ' + SHIPZIP, FLDLEN)
|
|
|
|
|
|
|
|
********************************************************
|
|
FUNCTION ADDL_KEY()
|
|
RETURN {&CUR_MAST->ORDER_NUM}
|
|
|
|
|
|
********************************************************
|
|
FUNCTION STUFF_ENTER_KEY()
|
|
KEYBOARD CHR(13)
|
|
RETURN
|
|
|
|
|
|
********************************************************
|
|
FUNCTION CK_DELSIZE(MWIDTH)
|
|
IF MWIDTH >= 999
|
|
DELETE
|
|
PACK
|
|
IF RECCOUNT() = 0
|
|
ADD_REC(3)
|
|
ELSE
|
|
GOTO TOP
|
|
ENDIF
|
|
ENDIF
|
|
RETURN .T.
|
|
**********************************************************
|
|
*
|
|
**********************************************************
|
|
FUNCTION CGWBASEPRICE(WHICHFILE, NCHOICE)
|
|
LOCAL TABLE_ARR
|
|
|
|
IF WHICHFILE = 'PRODUCT'
|
|
SELECT PRODUCT //* - ONLY CALL LOAD UP FOR THIS PRODUCT RECORD
|
|
TABLE_ARR := CGWPRICE(,,NCHOICE)
|
|
CGWBP_LOAD(TABLE_ARR) // READ TABLE_ARR AND CREATE USERFILE7 RECS.
|
|
RETURN
|
|
ELSE
|
|
SELECT PRODUCT
|
|
DONSETORD(3)
|
|
SEEK CATEGORY->CAT_CODE
|
|
DO WHILE PRODUCT->CAT_CODE == CATEGORY->CAT_CODE .AND. !EOF()
|
|
TABLE_ARR := CGWPRICE(,,NCHOICE)
|
|
CGWBP_LOAD(TABLE_ARR) // ASSUMES SITTING ON CORRECT PRODUCT RECORD
|
|
SELECT PRODUCT
|
|
SKIP 1
|
|
ENDDO
|
|
ENDIF
|
|
RETURN
|
|
**********************************************************
|
|
* LOAD THE USER FILE WITH THE BASE PRICE INFORMATION FOR PRINT/DISPL
|
|
**********************************************************
|
|
FUNCTION CGWBP_LOAD(BP_ARR) // READ TABLE_ARR AND CREATE USERFILE7 RECS.
|
|
LOCAL REP_VAR, AMT, DESC, II, I
|
|
LOCAL FHEAD1, FHEAD2, FHEAD3
|
|
LOCAL HEAD1 := ' ' , HEAD2 := ' ' , HEAD3 := ' '
|
|
|
|
//PRICE_DBF, DLR_DBF, PRICE_SHT
|
|
LOCAL PRT_ARR := BLDPRICE_ARR(BP_ARR[1], BP_ARR[2], BP_ARR[3])
|
|
LOCAL FRZ_ARR := PRT_ARR[1] // FIXED COL - IE: ROW HEADINGS/COL HEADINGS
|
|
LOCAL DTL_ARR := PRT_ARR[2] // ROW DETAIL - COL HEADING/AMTS
|
|
LOCAL DTL_LINE, TOTL_PRT := 0
|
|
LOCAL FRST_COL := 1
|
|
LOCAL COL_LIMIT := 7-1 // 7 TO LEN(FRZ_ARR) TO CONTROL THE NUMBER OF VARIABLE COLS
|
|
LOCAL LAST_COL := COL_LIMIT
|
|
|
|
DTL_LINE := ' '
|
|
|
|
DO WHILE .T.
|
|
FOR II := 1 TO LEN(FRZ_ARR)
|
|
DTL_LINE := FRZ_ARR[II] + SPACE(3)
|
|
|
|
FOR I := FRST_COL TO MIN( LAST_COL, LEN(DTL_ARR) )
|
|
IF II <= LEN(DTL_ARR[I])
|
|
DTL_LINE := DTL_LINE + DTL_ARR[I, II] + SPACE(3)
|
|
ENDIF
|
|
NEXT
|
|
|
|
ADD_U7(DTL_LINE)
|
|
NEXT
|
|
|
|
ADD_U7(' ')
|
|
ADD_U7(' ')
|
|
IF PAGE_BREAK = 'Y'
|
|
ADD_U7('') // CATEGORY PAGE BREAK ????????????????????
|
|
ENDIF
|
|
|
|
FRST_COL := FRST_COL + COL_LIMIT
|
|
LAST_COL := LAST_COL + COL_LIMIT
|
|
IF FRST_COL > LEN(DTL_ARR)
|
|
EXIT
|
|
ENDIF
|
|
|
|
ENDDO
|
|
|
|
|
|
RETURN
|
|
********************************************************
|
|
********************************************************
|
|
********************************************************
|
|
FUNCTION BLDPRICE_ARR(PRICE_DBF, DLR_FILE, PRICE_SHEET)
|
|
LOCAL FLD_ARR := {}, HEAD1, FLD_TYPE
|
|
LOCAL VAL_ARR := {}
|
|
LOCAL WK_VAL
|
|
LOCAL PR_ARR := {}, COL_VAL
|
|
LOCAL LEFT_COL_ARR := {}
|
|
LOCAL SV_SEL := SELECT(), I
|
|
LOCAL FLD_NAME, PRICE_FACTOR, HEAD_TYP
|
|
|
|
SELECT PRODUCT
|
|
// UI SIZE
|
|
|
|
IF PRICE_SHEET == 'L'
|
|
PRICE_FACTOR := PRODUCT->LU_BASEFAC / 100
|
|
ELSEIF PRICE_SHEET == 'J'
|
|
PRICE_FACTOR := PRODUCT->DI_BASEFAC / 100
|
|
ELSEIF PRICE_SHEET == 'B'
|
|
PRICE_FACTOR := PRODUCT->BU_BASEFAC / 100
|
|
ELSEIF PRICE_SHEET == 'S'
|
|
PRICE_FACTOR := PRODUCT->SD_BASEFAC / 100
|
|
ELSEIF PRICE_SHEET == 'I'
|
|
PRICE_FACTOR := PRODUCT->IN_BASEFAC / 100
|
|
ELSE
|
|
PRICE_FACTOR := 1
|
|
ENDIF
|
|
|
|
IF PRICE_FACTOR = 0
|
|
PRICE_FACTOR := 1
|
|
ENDIF
|
|
|
|
IF SELECT('PRICE_DBF') > 0
|
|
SELECT PRICE_DBF
|
|
USE
|
|
ENDIF
|
|
|
|
IF PRICE_FACTOR > 0 .AND. PRICE_FACTOR < 1
|
|
IF !FILE(DLR_FILE + '.DBF')
|
|
ERR_BOX('*** PRICE TABLE ' + DLR_FILE + '.DBF Was NOT FOUND!', ;
|
|
'*** It must be SETUP under the OPEN MODEL BASE PRICES TABLES')
|
|
RETURN { {} , {} }
|
|
ENDIF
|
|
NET_USE(DLR_FILE, .F., 5, 'PRICE_DBF')
|
|
ELSE
|
|
IF !FILE(PRICE_DBF + '.DBF')
|
|
ERR_BOX('*** PRICE TABLE ' + PRICE_DBF + '.DBF Was NOT FOUND!', ;
|
|
'*** It must be SETUP under the OPEN MODEL BASE PRICES TABLES')
|
|
RETURN { {} , {} }
|
|
ENDIF
|
|
NET_USE(PRICE_DBF, .F., 5, 'PRICE_DBF')
|
|
ENDIF
|
|
|
|
// PRICE BREAK
|
|
HEAD1 := 'Model - ' + ALLTRIM(PRODUCT->PROD_CODE) + ' / ' + ALLTRIM(PRODUCT->DESC)
|
|
AADD(LEFT_COL_ARR, HEAD1)
|
|
AADD(LEFT_COL_ARR, ' ')
|
|
AADD(LEFT_COL_ARR, SPACE(15))
|
|
AADD(LEFT_COL_ARR, SPACE(15))
|
|
AADD(LEFT_COL_ARR, SPACE(15))
|
|
|
|
DO CASE
|
|
CASE !EMPTY(PRODUCT->COL_HEAD3)
|
|
LEFT_COL_ARR[5] := PRODUCT->COL_HEAD3
|
|
LEFT_COL_ARR[4] := PRODUCT->COL_HEAD2
|
|
LEFT_COL_ARR[3] := PRODUCT->COL_HEAD1
|
|
CASE !EMPTY(PRODUCT->COL_HEAD2)
|
|
LEFT_COL_ARR[5] := PRODUCT->COL_HEAD2
|
|
LEFT_COL_ARR[4] := PRODUCT->COL_HEAD1
|
|
OTHERWISE
|
|
LEFT_COL_ARR[5] := PRODUCT->COL_HEAD1
|
|
ENDCASE
|
|
|
|
AADD(LEFT_COL_ARR, REPLICATE('-',15) )
|
|
|
|
FLD_ARR := DBSTRUCT()
|
|
FOR I := 1 TO LEN(FLD_ARR)
|
|
IF FLD_ARR[I,1] = 'COL_HEAD' .OR. FLD_ARR[I,1] = 'DESC' ;
|
|
.OR. FLD_ARR[I,1] = 'CUST_ID' .OR. FLD_ARR[I,1] = 'UPDATED'
|
|
LOOP
|
|
ELSE
|
|
*** COL_VAL := PADR( FLD_ARR[I,1] , 15 )
|
|
COL_VAL := COLVAL( FLD_ARR[I,1] , 'TEXT', 15 )
|
|
AADD( LEFT_COL_ARR, COL_VAL )
|
|
ENDIF
|
|
NEXT
|
|
|
|
DO WHILE !EOF()
|
|
WK_ARR := {}
|
|
AADD (WK_ARR, SPACE(15))
|
|
AADD (WK_ARR, SPACE(15))
|
|
AADD (WK_ARR, SPACE(15))
|
|
AADD (WK_ARR, SPACE(15))
|
|
AADD (WK_ARR, SPACE(15))
|
|
|
|
DO CASE
|
|
CASE !EMPTY(COL_HEAD3)
|
|
WK_ARR[5] := PADL(TRIM(COL_HEAD3),15)
|
|
WK_ARR[4] := PADL(TRIM(COL_HEAD2),15)
|
|
WK_ARR[3] := PADL(TRIM(COL_HEAD1),15)
|
|
CASE !EMPTY(COL_HEAD2)
|
|
WK_ARR[5] := PADL(TRIM(COL_HEAD2),15)
|
|
WK_ARR[4] := PADL(TRIM(COL_HEAD1),15)
|
|
OTHERWISE
|
|
WK_ARR[5] := PADL(TRIM(COL_HEAD1),15)
|
|
ENDCASE
|
|
AADD (WK_ARR, REPLICATE('-',15) )
|
|
|
|
FOR I := 1 TO LEN(FLD_ARR)
|
|
FLD_NAME := FLD_ARR[I,1]
|
|
FLD_TYPE := FLD_ARR[I,2]
|
|
IF FLD_NAME = 'DESC' .OR. FLD_NAME = 'COL_HEAD' ; // DESCRIPTION IN COL HEAD 1/2/3
|
|
.OR. FLD_NAME = 'CUST_ID' .OR. FLD_NAME = 'UPDATED'
|
|
LOOP
|
|
ELSE
|
|
IF FLD_TYPE == 'N'
|
|
// ROUND TO NEAREST NICHOLS
|
|
AADD(WK_ARR, STR(ROUND_IT(&FLD_NAME * PRICE_FACTOR, .05) ,15,2))
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
AADD (PR_ARR, WK_ARR )
|
|
SKIP 1
|
|
ENDDO
|
|
SELECT PRICE_DBF
|
|
USE
|
|
SELECT(SV_SEL)
|
|
RETURN { LEFT_COL_ARR, PR_ARR }
|
|
|
|
**********************************************************
|
|
FUNCTION COLVAL(WORKVAL, TYPE, LEN)
|
|
LOCAL I, CKCHAR
|
|
|
|
IF TYPE = NIL
|
|
TYPE = 'TEXT'
|
|
ENDIF
|
|
|
|
// system generated "V9" VARIABLE
|
|
IF LEFT(WORKVAL,1)$'V' .AND. SUBS(WORKVAL,2,1)$'0123456789'
|
|
RETURN FORM_WORKVAL(SUBS(WORKVAL,2 ), TYPE, LEN)
|
|
ELSE
|
|
RETURN FORM_WORKVAL(WORKVAL, TYPE, LEN)
|
|
ENDIF
|
|
**********************************************************
|
|
FUNCTION FORM_WORKVAL(WORKVAL, TYPE, LEN)
|
|
LOCAL WK_LEN
|
|
IF LEN = NIL
|
|
WK_LEN := 18
|
|
ELSE
|
|
WK_LEN := LEN
|
|
ENDIF
|
|
WORKVAL := STRTRAN(WORKVAL, '_', ' ')
|
|
|
|
IF TYPE = 'TEXT'
|
|
RETURN PADR(WORKVAL, WK_LEN)
|
|
ELSE
|
|
RETURN PADL(WORKVAL, WK_LEN)
|
|
ENDIF
|
|
****************************************************************
|
|
* //** P3N - 12/10/98
|
|
* DO WE PRINT LINE ITEM DISCOUNTS
|
|
****************************************************************
|
|
FUNCTION PRT_ITMDISC(PRN_ARR, PRODCODE)
|
|
LOCAL RETVAL := .F., I, DISC_AMT := 0, DISC_PCT := 0
|
|
LOCAL STRT := ASCAN( PRN_ARR, { |X| X[10] == PRODCODE } )
|
|
FOR I := STRT TO LEN(PRN_ARR)
|
|
IF PRODCODE = PRN_ARR[I,10]
|
|
IF EMPTY(DISC_PCT)
|
|
DISC_PCT := PRN_ARR[I, 5, 1] // LINE ITEM DISCOUNT PCT
|
|
DISC_AMT := PRN_ARR[I, 5, 2] // LINE ITEM DISCOUNT AMT
|
|
ENDIF
|
|
IF DISC_PCT == PRN_ARR[I, 5, 1] // LINE ITEM DISCOUNT PCT
|
|
ELSE
|
|
RETVAL := .T.
|
|
ENDIF
|
|
ELSE
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
RETURN RETVAL
|
|
****************************************************************
|
|
* P3N -11/24/98
|
|
* GET THE ORDER MASTER (CGW0OM) MISC ITEMS (SCREEN 2115)
|
|
* ORDER QTYS FOR INVOICING PURPOSES
|
|
****************************************************************
|
|
FUNCTION GETQTYMISC(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE)
|
|
LOCAL MTOT := 0, QTY := 0, AMT := 0, MAMTS := {}, INVQTY := 0
|
|
LOCAL SHPQTY := 0, BKO_QTY := 0, MISCKEY, SVPROD, SVLINE, MAMTS_ARR := {}
|
|
LOCAL SVREC := 1, QTYARR := {}, SVSEL := SELECT()
|
|
|
|
|
|
|
|
IF SELECT('TORD_LINES') > 0
|
|
SVREC := TORD_LINES->(RECNO())
|
|
TORD_LINES->(DBGOTOP())
|
|
IF MORDER_NUM == TORD_LINES->ORDER_NUM
|
|
ELSE
|
|
CLOSE TORD_LINES
|
|
BLD_TORD_LINES(MORDER_NUM)
|
|
ENDIF
|
|
ELSE
|
|
BLD_TORD_LINES(MORDER_NUM)
|
|
ENDIF
|
|
|
|
TORD_LINES->(DBGOTOP())
|
|
SVPROD := TORD_LINES->PROD_CODE
|
|
SVLINE := TORD_LINES->LINE_NUM
|
|
DO WHILE TORD_LINES->(!EOF())
|
|
IF TORD_LINES->PROD_CODE = 'ORD'
|
|
IF TORD_LINES->LINE_NUM == SVLINE .AND. ;
|
|
TORD_LINES->PROD_CODE == SVPROD
|
|
ELSE
|
|
IF EMPTY(MAMTS)
|
|
ELSE
|
|
AADD(MAMTS_ARR, MAMTS )
|
|
MAMTS := {}
|
|
ENDIF
|
|
SVPROD := TORD_LINES->PROD_CODE
|
|
SVLINE := TORD_LINES->LINE_NUM
|
|
ENDIF
|
|
MISCKEY := TORD_LINES->ORDER_NUM
|
|
MISCKEY := MISCKEY + STR(TORD_LINES->LINE_NUM, 3)
|
|
MISCKEY := MISCKEY + TORD_LINES->PROD_CODE
|
|
QTYARR := GET_OSTQTY('TORD_LINES', MISCKEY, PARTIAL_INVOICE, REPRINT_INVOICE )
|
|
IF EMPTY(QTYARR) //** P3N - 12/3/98
|
|
SHPQTY := 0 //** P3N - 12/3/98
|
|
INVQTY := 0 //** P3N - 12/3/98
|
|
ELSE //** P3N - 12/3/98
|
|
SHPQTY := QTYARR[1] //** P3N - 12/3/98
|
|
INVQTY := QTYARR[2] //** P3N - 12/3/98
|
|
ENDIF //** P3N - 12/3/98
|
|
BKO_QTY := TORD_LINES->QUANTITY - SHPQTY
|
|
MTOT := MTOT + ( TORD_LINES->QUANTITY * TORD_LINES->SALE_PRICE )
|
|
MAMTS := { TORD_LINES->QUANTITY, BKO_QTY, SHPQTY, TORD_LINES->SALE_PRICE, ;
|
|
TORD_LINES->PROD_CODE+STR(TORD_LINES->LINE_NUM,1), INVQTY }
|
|
ENDIF
|
|
TORD_LINES->(DBSKIP(+1))
|
|
ENDDO
|
|
IF EMPTY(MAMTS)
|
|
ELSE
|
|
AADD(MAMTS_ARR, MAMTS )
|
|
ENDIF
|
|
TORD_LINES->(DBGOTO(SVREC))
|
|
SELECT(SVSEL)
|
|
RETURN { MAMTS_ARR }
|
|
****************************************************************
|
|
* P3N - 7/29/98
|
|
* BLD THE ORDER MASTER (CGW0OM) MISC ITEMS (SCREEN 2115)
|
|
* FOR BACK ORDER PRINTING PURPOSES
|
|
****************************************************************
|
|
|
|
FUNCTION BLD_ORDMISC( PBODY_ARR, PAMTS_ARR, LI_TOTALS, PRT_AMT, PRT_BO, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE )
|
|
|
|
LOCAL MTOT := 0, QTY := 0, AMT := 0, PAMTS := {}, INVQTY := 0, QTYARR := {}
|
|
LOCAL SHPQTY := 0 , BKO_QTY := 0, MISCKEY, SVPROD, ORD_QTY := 0
|
|
LOCAL SVREC := TORD_LINES->(RECNO())
|
|
|
|
//DEFAULT PARTIAL_INVOICE := .F.
|
|
//DEFAULT REPRINT_INVOICE := .F.
|
|
|
|
If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., )
|
|
If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., )
|
|
|
|
|
|
IF EMPTY(PARTIAL_INVOICE)
|
|
PARTIAL_INVOICE := .F.
|
|
ENDIF
|
|
|
|
IF REPRINT_INVOICE = NIL
|
|
//IF EMPTY( REPRINT_INVOICE )
|
|
REPRINT_INVOICE := .F.
|
|
ELSE
|
|
|
|
ENDIF
|
|
|
|
TORD_LINES->(DBGOTOP())
|
|
SVPROD := TORD_LINES->PROD_CODE
|
|
DO WHILE TORD_LINES->(!EOF())
|
|
IF TORD_LINES->PROD_CODE = 'ORD'
|
|
IF TORD_LINES->PROD_CODE == SVPROD
|
|
ELSE
|
|
// double space ORDER misc items for now.
|
|
IF EMPTY(PBODY_ARR) //** P3N 1/6/99
|
|
ELSE
|
|
AADD(PBODY_ARR, ' ' )
|
|
AADD(PAMTS_ARR, NIL ) // nil pamts_arr will line up in body
|
|
ENDIF
|
|
SVPROD := TORD_LINES->PROD_CODE
|
|
ENDIF
|
|
MISCKEY := TORD_LINES->ORDER_NUM
|
|
MISCKEY := MISCKEY + STR(TORD_LINES->LINE_NUM, 3)
|
|
MISCKEY := MISCKEY + TORD_LINES->PROD_CODE
|
|
QTYARR := GET_OSTQTY('TORD_LINES', MISCKEY, PARTIAL_INVOICE, REPRINT_INVOICE)
|
|
IF EMPTY(QTYARR) //** P3N - 12/3/98
|
|
SHPQTY := 0 //** P3N - 12/3/98
|
|
INVQTY := 0 //** P3N - 12/3/98
|
|
ELSE //** P3N - 12/3/98
|
|
SHPQTY := QTYARR[1] //** P3N - 12/3/98
|
|
INVQTY := QTYARR[2] //** P3N - 12/3/98
|
|
ENDIF //** P3N - 12/3/98
|
|
BKO_QTY := TORD_LINES->QUANTITY - SHPQTY
|
|
ORD_QTY := TORD_LINES->QUANTITY
|
|
MTOT := MTOT + ( TORD_LINES->QUANTITY * TORD_LINES->SALE_PRICE )
|
|
IF WHCHORDER == 'BACKORD'
|
|
PAMTS := { 0, 0 , BKO_QTY, TORD_LINES->SALE_PRICE, PRT_AMT, PRT_BO, 0, , INVQTY }
|
|
ELSE
|
|
PAMTS := { ORD_QTY, BKO_QTY , SHPQTY , TORD_LINES->SALE_PRICE, PRT_AMT, PRT_BO, 0, , INVQTY }
|
|
ENDIF
|
|
IF EMPTY(BKO_QTY)
|
|
ELSE
|
|
AADD(PBODY_ARR, '^' + SUBS(TORD_LINES->LINE_DESC, 1, 30) )
|
|
AADD(PAMTS_ARR, PAMTS )
|
|
ENDIF
|
|
ENDIF
|
|
TORD_LINES->(DBSKIP(+1))
|
|
ENDDO
|
|
LI_TOTALS := LI_TOTALS + MTOT
|
|
TORD_LINES->(DBGOTO(SVREC))
|
|
|
|
RETURN { PBODY_ARR, PAMTS_ARR, LI_TOTALS }
|
|
|
|
****************************************************************
|
|
* P3N - 7/7/98
|
|
* BLD THE MISC ORDER LINE ITEMS FOR PRINTING PURPOSES
|
|
****************************************************************
|
|
FUNCTION BLD_MISCORD(CUR_MISC, PBODY_ARR, PAMTS_ARR, LI_TOTALS, PRT_AMT, ;
|
|
DIDFST, PRT_BO, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE, ORDSHIPD, SUBTYPE)
|
|
LOCAL M1 := 0, M_UOM := '', M_QTY_UOM := '', WORKVAR := '', WORKPRICE := 0
|
|
LOCAL MISCITMS := CUR_MISC, WRKQTY := 0, QTYARR := {}, PAMTS, WRK1, TOTBKO := 0
|
|
LOCAL BKO_QTY := 0, MISCKEY, SHPQTY := 0, INVQTY := 0, SVSEL := SELECT()
|
|
|
|
IF EMPTY(ORDSHIPD) //** P3N - 1/7/99
|
|
ORDSHIPD := .F.
|
|
ENDIF
|
|
|
|
|
|
//DEFAULT PARTIAL_INVOICE := .F.
|
|
//DEFAULT REPRINT_INVOICE := .F.
|
|
|
|
|
|
If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., )
|
|
If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., )
|
|
|
|
IF REPRINT_INVOICE = NIL // 1/20/20
|
|
//IF EMPTY(REPRINT_INVOICE) //** P3N - 12/3/98
|
|
REPRINT_INVOICE := .F.
|
|
ENDIF
|
|
IF EMPTY(PARTIAL_INVOICE) //** P3N - 11/24/98
|
|
PARTIAL_INVOICE := .F.
|
|
ENDIF
|
|
IF MISCITMS == 'TORD_LINES'
|
|
IF SELECT('TORD_LINES') > 0
|
|
//** TORD_LINES ALREADY EXISTS
|
|
IF (MISCITMS)->ORDER_NUM == (CUR_MAST)->ORDER_NUM
|
|
//** TORD_LINES ALREADY EXISTS WITH THE SAME ORDER - PROCESS
|
|
ELSE
|
|
CLOSE TORD_LINES
|
|
BLD_TORD_LINES((CUR_MAST)->ORDER_NUM)
|
|
ENDIF
|
|
ELSE
|
|
BLD_TORD_LINES((CUR_MAST)->ORDER_NUM)
|
|
ENDIF
|
|
(MISCITMS)->(DBGOTOP())
|
|
ELSE
|
|
(MISCITMS)->(DBSEEK((CUR_MAST)->ORDER_NUM))
|
|
ENDIF
|
|
DO WHILE (MISCITMS)->ORDER_NUM == (CUR_MAST)->ORDER_NUM .AND. (MISCITMS)->(!EOF())
|
|
//** IF WHCHORDER == 'BACKORD' //** P3N - 1/14/99
|
|
IF WHCHORDER == 'BACKORD' .OR. ORDSHIPD //** P3N - 1/14/99
|
|
IF (MISCITMS)->PROD_CODE == 'MISCITM'
|
|
//** PROCESS ONLY MISC ITEMS
|
|
ELSE
|
|
(MISCITMS)->(DBSKIP(+1))
|
|
LOOP
|
|
ENDIF
|
|
ENDIF
|
|
MISCKEY := (MISCITMS)->ORDER_NUM
|
|
IF VALTYPE((MISCITMS)->LINE_NUM)== 'N'
|
|
MISCKEY := MISCKEY + STR((MISCITMS)->LINE_NUM, 3)
|
|
ELSE
|
|
MISCKEY := MISCKEY + (MISCITMS)->LINE_NUM
|
|
ENDIF
|
|
MISCKEY := MISCKEY + 'MISCITM'
|
|
QTYARR := GET_OSTQTY(CUR_OL, MISCKEY, PARTIAL_INVOICE, REPRINT_INVOICE )
|
|
IF EMPTY(QTYARR) //** P3N - 12/3/98
|
|
SHPQTY := 0 //** P3N - 12/3/98
|
|
INVQTY := 0 //** P3N - 12/3/98
|
|
ELSE //** P3N - 12/3/98
|
|
SHPQTY := QTYARR[1] //** P3N - 12/3/98
|
|
INVQTY := QTYARR[2] //** P3N - 12/3/98
|
|
ENDIF //** P3N - 12/3/98
|
|
BKO_QTY := (MISCITMS)->QUANTITY - SHPQTY
|
|
TOTBKO := TOTBKO + BKO_QTY //** P3N - 1/14/99
|
|
IF WHCHORDER == 'BACKORD' .AND. EMPTY(BKO_QTY)
|
|
(MISCITMS)->(DBSKIP(+1)) //** DO NOT INCLUDE 0 QTY'S ON BACKORDERS
|
|
LOOP
|
|
ENDIF
|
|
MISC_ITEMS->(DBSEEK ( (MISCITMS)->PARTNUM ))
|
|
IF (MISCITMS)->UOM = 'N/A'
|
|
M_UOM := ''
|
|
ELSE
|
|
UOMFILE->(DBSEEK ( (MISCITMS)->UOM ))
|
|
IF UOMFILE->PRINT_FLAG$'N'
|
|
M_UOM := ''
|
|
ELSE
|
|
M_UOM := (MISCITMS)->UOM
|
|
ENDIF
|
|
M_QTY_UOM := UOMFILE->PRINT_QTY
|
|
ENDIF
|
|
WORKVAR := '^' //** P3N - 12/16/98
|
|
IF (MISCITMS)->COLOR <> 'N/A'
|
|
WORKVAR := WORKVAR + ALLTRIM( (MISCITMS)->COLOR ) + ' '
|
|
ENDIF
|
|
WORKVAR:= WORKVAR + ALLTRIM( MISC_ITEMS->DESC ) + ' '
|
|
//** P3N - 1/7/99 IS THIS CHECKING FOR ORDER ENTIRELY SHIPPED ??
|
|
IF ORDSHIPD .AND. EMPTY(SHPQTY)
|
|
//** DO NOT ADD PRICES BECAUSE WE ARE ONLY BUILDING THIS ARRAY
|
|
//** TO DETERMINE IF THE ENTIRE ORDER HAS BEEN SHIPPED!!!
|
|
//** NOT TO PRINT ON ANY DOCUMENT
|
|
ELSE
|
|
//** P3N - 2/20/98 PER ELLEN-KC
|
|
IF EMPTY( (MISCITMS)->ALT_SPRICE)
|
|
WORKPRICE := (MISCITMS)->SALE_PRICE
|
|
ELSE
|
|
WORKPRICE := (MISCITMS)->ALT_SPRICE
|
|
ENDIF
|
|
ENDIF
|
|
IF M_QTY_UOM $'N'
|
|
WRK1 := { (MISCITMS)->QUANTITY, (MISCITMS)->ENTRY_SIZE }
|
|
IF WHCHORDER == 'BACKORD'
|
|
WRK1 := { 0 , (MISCITMS)->ENTRY_SIZE }
|
|
PAMTS := {WRK1, 0 ,BKO_QTY, WORKPRICE, PRT_AMT,PRT_BO ,0, M_UOM, INVQTY }
|
|
ELSE
|
|
PAMTS := { WRK1 ,BKO_QTY, SHPQTY, WORKPRICE, PRT_AMT,PRT_BO ,0, M_UOM, INVQTY }
|
|
ENDIF
|
|
ELSEIF WHCHORDER == 'BACKORD'
|
|
PAMTS := { 0, 0, BKO_QTY, WORKPRICE , PRT_AMT, PRT_BO, 0, M_UOM , INVQTY }
|
|
ELSE
|
|
PAMTS := { (MISCITMS)->QUANTITY, BKO_QTY,SHPQTY, WORKPRICE, PRT_AMT, PRT_BO, 0, M_UOM , INVQTY }
|
|
ENDIF
|
|
IF PARTIAL_INVOICE //** P3N - 11/25/98
|
|
LI_TOTALS := LI_TOTALS + ( SHPQTY * WORKPRICE )
|
|
ELSEIF REPRINT_INVOICE //** P3N - 12/4/98
|
|
LI_TOTALS := LI_TOTALS + ( INVQTY * WORKPRICE )
|
|
ELSE //** P3N - 11/25/98
|
|
LI_TOTALS := LI_TOTALS + ( (MISCITMS)->QUANTITY * WORKPRICE )
|
|
ENDIF //** P3N - 11/25/98
|
|
// start order below last detail printed
|
|
IF !DIDFST
|
|
IF !EMPTY(PBODY_ARR) // SEPERATE FROM DATA ABOVE
|
|
IF WHCHORDER == 'BACKORD'
|
|
AADD(PBODY_ARR, ' -----' )
|
|
ELSE
|
|
AADD(PBODY_ARR, '-------------' )
|
|
ENDIF
|
|
AADD(PAMTS_ARR, {}) // empty array will left justify
|
|
AADD(PBODY_ARR, ' ' )
|
|
AADD(PAMTS_ARR, NIL ) // nil pamts_arr will line up in body
|
|
ENDIF
|
|
DIDFST := .T.
|
|
ENDIF
|
|
AADD(PBODY_ARR, WORKVAR )
|
|
AADD(PAMTS_ARR, PAMTS )
|
|
IF !EMPTY( (MISCITMS)->ENTRY_SIZE )
|
|
IF M_QTY_UOM $'N'
|
|
// Print size IN THE QTY AREA
|
|
ELSE
|
|
// Print size below desc
|
|
AADD(PBODY_ARR, 'Size: ' + ALLTRIM((MISCITMS)->ENTRY_SIZE ) + ' ' + ALLTRIM( M_UOM ) )
|
|
AADD(PAMTS_ARR, NIL )
|
|
ENDIF
|
|
ENDIF
|
|
//** P3N - 04/30/03 - MOVED FROM ABOVE - WAS ONLY PRINTING IF !EMPTY(ENTRY_SIZE) PER LINDA LINDS
|
|
//** P3N - 11/18/02 - ADDED THE KEYWORD FOR PRINTING - PER LINDA LINDS
|
|
IF EMPTY(SUBTYPE) //** P3N - 11/18/02
|
|
//** DO NOT PRINT KEYWORDS ON EMPTY SUBTYPES
|
|
ELSEIF SUBTYPE = 'DELIVERY' .OR. ; //** DELIVERY COPY
|
|
SUBTYPE = 'GOLDEN' .OR. ; //** GOLDEN ROD COPY
|
|
SUBTYPE = 'PREBILL' //** PREBILL COPY
|
|
AADD(PBODY_ARR, MISC_ITEMS->KEYWORD ) //** P3N - 11/18/02
|
|
AADD(PAMTS_ARR, NIL ) //** P3N - 11/18/02
|
|
ENDIF //** P3N - 11/18/02
|
|
// double space the cur_misc items for now.
|
|
AADD(PBODY_ARR, ' ' )
|
|
AADD(PAMTS_ARR, NIL ) // nil pamts_arr will line up in body
|
|
(MISCITMS)->(DBSKIP(+1))
|
|
ENDDO
|
|
RETURN { PBODY_ARR, PAMTS_ARR, LI_TOTALS, TOTBKO }
|
|
****************************************************************
|
|
* DO WE WANT TO PRINT A PRODUCTION FRAME COPY OR
|
|
* A PRODUCTION STD FRAME COPY ?
|
|
* 'STD' - STORM DOOR
|
|
****************************************************************
|
|
FUNCTION PRT_FRAME(WHICH_TYPE, PROD)
|
|
LOCAL RETVAL := .F.
|
|
DO CASE
|
|
CASE WHICH_TYPE = 'FRAME'
|
|
IF PROD_STD(PROD)
|
|
RETVAL := .F.
|
|
ELSE
|
|
RETVAL := .T.
|
|
ENDIF
|
|
CASE WHICH_TYPE = 'STDFRAME'
|
|
IF PROD_STD(PROD)
|
|
// STORM DOOR FRAME COPY
|
|
RETVAL := .T.
|
|
ENDIF
|
|
ENDCASE
|
|
RETURN RETVAL
|
|
****************************************************************
|
|
* IS THIS PRODUCT A 'STD'
|
|
* 'STD' - STORM DOOR
|
|
****************************************************************
|
|
FUNCTION PROD_STD(PROD)
|
|
LOCAL RETVAL := .F.
|
|
IF PRODUCT->(DBSEEK(PROD))
|
|
IF PRODUCT->CAT_CODE = 'STD'
|
|
RETVAL := .T.
|
|
ENDIF
|
|
ENDIF
|
|
RETURN RETVAL
|
|
****************************************************************
|
|
* SHOULD WE PRINT A DISCOUNT TOTAL
|
|
****************************************************************
|
|
FUNCTION PRINT_DISC(PRN_ARR, PRODCODE) //PRINT A DISCOUNT%
|
|
LOCAL STRT := ASCAN(PRN_ARR, {|X| X[10] == PRODCODE}), I, RETVAL := .F.
|
|
IF EMPTY(STRT)
|
|
RETVAL := .F.
|
|
ELSE
|
|
FOR I := STRT TO LEN(PRN_ARR)
|
|
IF PRN_ARR[I,10] == PRODCODE
|
|
IF EMPTY(PRN_ARR[I,5,1])
|
|
RETVAL := .F.
|
|
ELSE
|
|
RETVAL := .T.
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
RETURN RETVAL
|
|
****************************************************************
|
|
* GET THE PRODUCT DISCOUNT TOTAL ( IE: ALL LINE ITEMS FOR A PRODUCT)
|
|
****************************************************************
|
|
FUNCTION GETDISCTOT(PRN_ARR, STRT)
|
|
LOCAL PRODCODE := PRN_ARR[STRT, 10], ELM, DISC_PCT, I, RETARR := {}
|
|
//**LOCAL DISC_AMT := 0,ITMDISC := PRT_ITMDISC(PRN_ARR, PRODCODE)
|
|
LOCAL DISC_AMT := 0,ITMDISC := .F.
|
|
FOR I := STRT TO 1 STEP -1
|
|
IF PRODCODE = PRN_ARR[I,10]
|
|
DISC_AMT := PRN_ARR[I, 5, 2] // LINE ITEM DISCOUNT AMT
|
|
DISC_PCT := PRN_ARR[I, 5, 1] // LINE ITEM DISCOUNT PCT
|
|
DISC_SIZE := PRN_ARR[I, 5, 3] // LINE ITEM ENTRY SIZE
|
|
IF EMPTY(DISC_AMT)
|
|
ELSE
|
|
IF EMPTY(RETARR)
|
|
AADD(RETARR, {PRODCODE, DISC_PCT, DISC_AMT, DISC_SIZE})
|
|
ELSE
|
|
ELM := ASCAN(RETARR, {|X| X[1] == PRODCODE .AND. X[2] == DISC_PCT})
|
|
IF EMPTY(ELM)
|
|
AADD(RETARR, {PRODCODE, DISC_PCT, DISC_AMT, DISC_SIZE})
|
|
ELSEIF ITMDISC
|
|
AADD(RETARR, {PRODCODE, DISC_PCT, DISC_AMT, DISC_SIZE})
|
|
ELSE
|
|
RETARR[ELM,3] := RETARR[ELM,3] + DISC_AMT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
RETURN RETARR
|
|
*****************************************************************
|
|
//** P3N - 3/5/99 - NEW FUNCTION TO IDENTIFY ZERO ORDERS
|
|
//** IN ONE PLACE. ( NO PRICING )
|
|
//** P3N- 3/5/99 ADDED '93' TO THE NO PRICING TERMS LIST.
|
|
*****************************************************************
|
|
FUNCTION ZERO_ORDER()
|
|
LOCAL RETVAL := .F.
|
|
IF (CUR_MAST)->TERMS = '90' .OR. ; //** NO CHARGE //**P3N - 6/16/98
|
|
(CUR_MAST)->TERMS = '91' .OR. ; //** EVEN EXCHANGE//**P3N - 3/10/99
|
|
(CUR_MAST)->TERMS = '93' .OR. ; //** MEMO BILLING //**P3N - 3/05/99
|
|
(CUR_MAST)->TERMS = '96' //** CANCELLATION //**P3N - 6/16/98
|
|
RETVAL := .T.
|
|
ENDIF
|
|
RETURN RETVAL
|
|
*****************************************************************
|
|
//** P3N - 2/1/00 - NEW FUNCTION TO PAINT THE KEY VALUES AS NEEDED
|
|
//** IN A PREPROC SITUATION
|
|
*****************************************************************
|
|
FUNCTION PAINT_KEYS(KEYFLD,DISPROW, DISPCOL)
|
|
LOCAL SVCOLOR := SETCOLOR(HNOR)
|
|
MGET_KEY := &KEYFLD
|
|
IF EMPTY(DISPROW)
|
|
DISPROW := 3
|
|
ENDIF
|
|
IF EMPTY(DISPCOL)
|
|
DISPCOL := 40
|
|
ENDIF
|
|
@ DISPROW, 0 CLEAR
|
|
@ DISPROW, DISPCOL SAY MGET_KEY
|
|
SETCOLOR(SVCOLOR)
|
|
RETURN .T.
|
|
*********************************************************
|
|
// VALIDATE A PRODUCT CODE
|
|
|
|
FUNCTION VAL_PRODUCT(PASSKEY, ELEM, DISPNAME, DOPACK)
|
|
LOCAL SAVESCR := SAVESCREEN()
|
|
LOCAL SAVESEL := SELECT()
|
|
LOCAL SAVEREC := RECNO()
|
|
LOCAL RETVAL := .F., A_ELEM
|
|
LOCAL SAVECOL := SETCOLOR()
|
|
LOCAL SAYMSG := "PRODUCT->DESC"
|
|
|
|
LOCAL SAVEGETLIST := SAVEGETS()
|
|
LOCAL SEEKKEY
|
|
|
|
IF PASSKEY = NIL
|
|
SEEKKEY := PROD_CODE
|
|
ELEM := NIL
|
|
DISPNAME := .F.
|
|
ELSE
|
|
SEEKKEY := &PASSKEY
|
|
ENDIF
|
|
|
|
IF DISPNAME = NIL
|
|
DISPNAME := .T.
|
|
ENDIF
|
|
|
|
IF DOPACK = NIL
|
|
DOPACK := .T.
|
|
ENDIF
|
|
|
|
SETCOLOR(SAVECOL)
|
|
IF EMPTY(SEEKKEY) .AND. DOPACK
|
|
DELETE
|
|
PACK
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
IF EMPTY(SEEKKEY) .OR. GOOD_PROD(SEEKKEY)
|
|
IF DISPNAME
|
|
A_ELEM := DISP_GETVAR(ELEM, SAYMSG)
|
|
ENDIF
|
|
RETURN .T.
|
|
ENDIF
|
|
|
|
GBROWSE(3,'Product Lookup', 'PRODUCT')
|
|
SELECT (SAVESEL)
|
|
GOTO SAVEREC
|
|
SETCOLOR(SAVECOL)
|
|
RESTSCREEN(,,,,SAVESCR)
|
|
IF LASTKEY() = 13
|
|
DO CASE
|
|
CASE ELEM = NIL // DBROWSE TYPE PROC
|
|
***** REPLACE USERFILE2->CLUBID WITH CLUB_MAST->CLUBID
|
|
REPLACE (SAVESEL)->PROD_CODE WITH PRODUCT->PROD_CODE
|
|
REPLACE UPDATED WITH 'Y'
|
|
|
|
CASE VALTYPE(ELEM)$'A' // EXECUTE SOMETHING
|
|
NILVAR := &ELEM[1]
|
|
|
|
CASE DISPNAME // GET_ONE_REC TYPE PROC
|
|
A_ELEM := DISP_GETVAR(ELEM, SAYMSG)
|
|
GETVARS[A_ELEM,4] := CLUB_MAST->CLUBID
|
|
ENDCASE
|
|
RETVAL := .T.
|
|
ELSE
|
|
RETVAL := .F.
|
|
ENDIF
|
|
|
|
SETCOLOR(SAVECOL)
|
|
RETURN RETVAL
|
|
|
|
|
|
|
|
****************************************************************
|
|
* VALIDATE THE INPUT FIELD TO CONTAIN A VALID SET OF CHARACTARS*
|
|
****************************************************************
|
|
FUNCTION VALID_CHR(PARM)
|
|
LOCAL I, RETVAL, FLD := &PARM
|
|
FOR I := 1 TO LEN(FLD)
|
|
IF SUBS(FLD,I,1)$'ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890_'
|
|
RETVAL := .T.
|
|
ELSE
|
|
ERR_BOX('** Invalid Option Value **', ;
|
|
'** Remove the - ' + ALLTRIM(SUBS(FLD,I,1)) )
|
|
RETVAL := .F.
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
RETURN RETVAL
|
|
|
|
|
|
****************************************************************
|
|
FUNCTION GOOD_PROD(SEEKKEY)
|
|
LOCAL SAVESEL := SELECT(), RECNUM := RECNO(), RETVAL
|
|
IF PRODUCT->(DBSEEK(SEEKKEY))
|
|
RETVAL := .T.
|
|
ELSE
|
|
RETVAL := .F.
|
|
ENDIF
|
|
SELECT (SAVESEL)
|
|
GOTO RECNUM
|
|
RETURN RETVAL
|
|
|
|
*******************************************************************
|
|
//** P3N - 1/15/99
|
|
//** THIS FUNCTION WILL BUILD USERFILE2 WITH ORD_SHIP TRANS.
|
|
//** THIS IS A PREPROC 'I' FOR SCREEN 21350 - SELECTIVE SHIPPING
|
|
//** (F7-ORDER CONTROL / SHIPPING INFORMATION - SCREEN 3220)
|
|
*******************************************************************
|
|
FUNCTION BLD_TMP_OST()
|
|
LOCAL ORDNUM := TORD_LINES->ORDER_NUM
|
|
LOCAL LINENUM := TORD_LINES->LINE_NUM
|
|
LOCAL PROD := TORD_LINES->PROD_CODE
|
|
LOCAL PARPROD := TORD_LINES->PAR_PROD
|
|
LOCAL TRANNUM := TORD_LINES->(STR(RECNO(), 3) )
|
|
LOCAL SVSEL := SELECT()
|
|
SELECT USERFILE2
|
|
ZAP
|
|
IF ORD_SHIP->(DBSEEK(ORDNUM+STR(LINENUM,3)+ PROD +PARPROD+TRANNUM))
|
|
DO WHILE ORD_SHIP->(!EOF()) .AND. ;
|
|
ORD_SHIP->ORDER_NUM == ORDNUM .AND. ;
|
|
ORD_SHIP->LINE_NUM == LINENUM .AND. ;
|
|
ORD_SHIP->PROD_CODE == PROD .AND. ;
|
|
ORD_SHIP->PAR_PROD == PARPROD .AND. ;
|
|
ORD_SHIP->TRAN_NUM == TRANNUM
|
|
SELECT USERFILE2
|
|
ADD_REC(1)
|
|
REC_LOCK(1, 'USERFILE2')
|
|
REP_ONEREC('ORD_SHIP', 'USERFILE2' )
|
|
ORD_SHIP->(DBSKIP(+1))
|
|
ENDDO
|
|
ENDIF
|
|
SELECT(SVSEL)
|
|
RETURN .T.
|
|
|
|
*******************************************************************
|
|
//** P3N - 1/15/02
|
|
//** THIS FUNCTION WILL BUILD USERFILE2 WITH ORD_PROD TRANS.
|
|
//** THIS IS A PREPROC 'I' FOR SCREEN 22350 - SELECTIVE PRODUCTION
|
|
//** (F7-PRODUCTION CONTROL / PRODUCTION INFORMATION - SCREEN ????)
|
|
*******************************************************************
|
|
FUNCTION BLD_TMPOPT()
|
|
LOCAL ORDNUM := TORD_LINES->ORDER_NUM
|
|
LOCAL LINENUM := TORD_LINES->LINE_NUM
|
|
LOCAL PROD := TORD_LINES->PROD_CODE
|
|
LOCAL PARPROD := TORD_LINES->PAR_PROD
|
|
LOCAL TRANNUM := TORD_LINES->(STR(RECNO(), 3) )
|
|
LOCAL SVSEL := SELECT()
|
|
SELECT USERFILE2
|
|
//**ZAP
|
|
USERFILE2->(__DBZAP())
|
|
IF ORD_PROD->(DBSEEK(ORDNUM+STR(LINENUM,3)+ PROD +PARPROD+TRANNUM))
|
|
DO WHILE ORD_PROD->(!EOF()) .AND. ;
|
|
ORD_PROD->ORDER_NUM == ORDNUM .AND. ;
|
|
ORD_PROD->LINE_NUM == LINENUM .AND. ;
|
|
ORD_PROD->PROD_CODE == PROD .AND. ;
|
|
ORD_PROD->PAR_PROD == PARPROD .AND. ;
|
|
ORD_PROD->TRAN_NUM == TRANNUM
|
|
SELECT USERFILE2
|
|
ADD_REC(1)
|
|
REC_LOCK(1, 'USERFILE2')
|
|
REP_ONEREC('ORD_PROD', 'USERFILE2' )
|
|
ORD_PROD->(DBSKIP(+1))
|
|
ENDDO
|
|
ENDIF
|
|
SELECT(SVSEL)
|
|
RETURN .T.
|
|
//*******************************************************************
|
|
//** P3N - 08/08/11
|
|
//** Allow ONLY the AMOUNT OR PCT for Freight calc
|
|
//*******************************************************************
|
|
FUNCTION VAL_FRT(FLD)
|
|
LOCAL G_ACT_LIST := GETACTIVE()
|
|
LOCAL RETVAL := .T.
|
|
STATIC SVAMT, SVPCT
|
|
IF EMPTY(FLD)
|
|
FLD := ''
|
|
ENDIF
|
|
IF FLD = 'FRT_AMT'
|
|
IF EMPTY(G_ACT_LIST)
|
|
//** NO GET OBJ - CONTINUE
|
|
ELSE
|
|
SVAMT := G_ACT_LIST:BUFFER
|
|
ENDIF
|
|
ELSE
|
|
IF EMPTY(G_ACT_LIST)
|
|
//** NO GET OBJ - CONTINUE
|
|
ELSE
|
|
SVPCT := G_ACT_LIST:BUFFER
|
|
|
|
IF VAL(SVAMT) <> 0 .AND. VAL(SVPCT) <> 0
|
|
ERR_BOX( ' Freight Amount = '+ SVAMT , ;
|
|
' Freight PCT = ' + SVPCT , ;
|
|
' ', ;
|
|
' Please - enter ONLY Amount OR PCT - NOT BOTH!')
|
|
RETVAL := .F.
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN RETVAL
|
|
|