#INCLUDE 'CGWINCLD.PRG' //#INCLUDE 'FIVEWIN.CH' //#INCLUDE 'REPORT.CH' //#INCLUDE 'FIVEWIN.CH' // #include "report.ch" #DEFINE SW_SHOW 5 * MIKE LEWIS - PRINT ORDERS - CGWPRINT 02/01/94 ******************************************************************* PROCEDURE ALL_ORDPR(OPTION, TITLE, ACTION) DBOPEN("CONTROL") PRIVATE MD_ALLPRNT := D_ALLPRNT PRIVATE MP_ALLPRNT := P_ALLPRNT PRIVATE MI_ALLPRNT := I_ALLPRNT PRIVATE MO_ALLPRNT := O_ALLPRNT PRIVATE MPO_ALLPRNT := PO_ALLPRNT PRIVATE MPB_ALLPRNT := PB_ALLPRNT PRIVATE MPC_ALLPRNT := PC_ALLPRNT PRIVATE MGR_ALLPRNT := GR_ALLPRNT PRIVATE MBO_ALLPRNT := BO_ALLPRNT //** P3N - 4/30/98 PRIVATE _WHEREORD := '1' PRIVATE MPRTBYINIT := ' ' //** P3N - 01/07/02 IF CONTROL->(FIELDPOS( 'ALLPRTINIT' ) ) > 0 //** P3N - 01/07/02 MPRTBYINIT := CONTROL->ALLPRTINIT //** P3N - 01/07/02 ENDIF //** P3N - 01/07/02 USE ORD_PRINT(OPTION, TITLE, ACTION) RETURN ******************************************************************* PROCEDURE ORD_PRINT(OPTION, TITLE, ACTION, WHEREORD) LOCAL SAVESEL := SELECT() //** P3N - 7/12/00 LOCAL SAVESCR, MTITLE, SVORD := 1, M1, M2, M3, OPT, MARR := {} PRIVATE ORD_PARMS, GL_ARR, GL_OVR, GLALLOC_OVR := .F. PRIVATE PRNTSOURCE := ACTION, MCUST_ID, MUSER_ID, OUT_ARR //** ADDRESS LINDS DELIVERY TICKET PRINT ANOMALY //** P3N - 7/12/00 IF SELECT(CONTROL) = 0 //** P3N - 7/12/00 DBOPEN('CONTROL') //** P3N - 7/12/00 ENDIF //** P3N - 7/12/00 MLMAR := SPACE(LMAR) //** P3N - 7/12/00 MTMAR := TMAR //** P3N - 7/12/00 MBODY_LEN := BODY_LEN //** P3N - 7/12/00 MHEAD_LEN := HEAD_LEN //** P3N - 7/12/00 MSING_SHEET := UPPER(SING_SHEET) //** P3N - 7/12/00 CLOSE CONTROL //** P3N - 7/12/00 SELECT(SAVESEL) //** P3N - 7/12/00 IF !EMPTY(WHEREORD) //SELECTIVE PRINT FROM THE MENU SYSTEM(FUNC-OPEN2100) _WHEREORD := WHEREORD ENDIF IF _WHEREORD = '2' // SECOND TIME THRU - END RECURSIVE CALLS _WHEREORD := '1' // RESET TO be first time thru RETURN .T. ENDIF IF LASTKEY() == 27 // ABORT ORDER ENTRY - PRINT MENU RETURN ENDIF *************************************************************** * THIS IS THE MENU AT THE END OF ORDER ENTRY PROCESS * DETERMINE WHAT COPY OF THE ORDER TO PRINT *************************************************************** IF TITLE = NIL IF CUR_MAST = 'QUOTE' TITLE = 'PRINT Quotes' ELSE TITLE = 'PRINT Orders' ENDIF ENDIF CLS IF ACTION == 'OE' // ACTION OE = FROM ORDER ENTRY TITLE := TITLE + ' ' + ALLTRIM( (CUR_MAST)->ORDER_NUM) SAYTITLE(TITLE, 'PR020') MORDER_NUM := (CUR_MAST)->ORDER_NUM ORD_PROCESS(MORDER_NUM) ELSE // MAIN MENU DBOPEN(CUR_OL) DBOPEN(CUR_MISC) DBOPEN('MISC_ITEMS',,,{1}) ORD_PARMS := DBOPEN(CUR_MAST) SAYTITLE(TITLE, 'PR020') @ 2,0 CLEAR SAVESCR := SAVESCREEN() // INDIVIDUALLY SELECTED FROM GET_KEY IF ACTION = 'MM' DO WHILE .T. RESTSCREEN(,,,,SAVESCR) MORDER_NUM := GET_KEY(ORD_PARMS) IF EMPTY(MORDER_NUM) SELECT(CUR_OL) USE RETURN ENDIF MTITLE := TITLE + ' ' + ALLTRIM( (CUR_MAST)->ORDER_NUM) SAYTITLE(MTITLE, 'PR020') IF !NEED_CALC$'N' ERR_BOX(' *** THIS ORDER MUST BE RECALCULATED ***', ; ' Because SOMETHING HAS CHANGED.',; ' Go to the ORDER ENTRY SCREEN and ',; ' SAVE THE ORDER AGAIN (F10 key)') LOOP ENDIF MCUST_ID = CUST_ID MUSER_ID = USER_ID ORD_PROCESS(MORDER_NUM) ENDDO ELSE // PRINT ALL ORDERS UNPRINTED MTITLE := TITLE + ' - ALL UNPRINTED' SAYTITLE(MTITLE, 'PR020') ??CHR(7) IF MPRTBYINIT == 'Y' //** P3N - 01/07/02 OPT := PICKLIST({'ALL Unprinted', 'All Unprinted by User('+TRIM(M->USER)+')'}, 13, 25, ' Print Unprinted Orders' ) IF LASTKEY() = 27 //** P3N - 01/07/02 ELSE //** P3N - 01/07/02 IF OPT = 1 //** P3N - 01/07/02 MPRTBYINIT := '' //** P3N - 01/07/02 M1 := 'About to Print ALL Unprinted Orders' //** P3N - 01/07/02 M2 := 'Do You Want to Continue?' //** P3N - 01/07/02 M3 := '' //** P3N - 01/07/02 ELSEIF OPT = 2 //** P3N - 01/07/02 M1 := 'About to Print ALL Unprinted Orders' //** P3N - 01/07/02 M2 := 'For User - '+ M->USER //** P3N - 01/07/02 M3 := 'Do You Want to Continue?' //** P3N - 01/07/02 MTITLE := MTITLE + ' for - '+M->USER //** P3N - 01/07/02 SAYTITLE(MTITLE, 'PR020') //** P3N - 01/07/02 ENDIF //** P3N - 01/07/02 IF PROMPT_BOX(M1, M2, M3) //** P3N - 01/07/02 MORDER_NUM := NIL //** P3N - 01/07/02 MCUST_ID = NIL //** P3N - 01/07/02 MUSER_ID = M->USER //** P3N - 01/07/02 ORD_PROCESS(MORDER_NUM) //** P3N - 01/07/02 ENDIF //** P3N - 01/07/02 ENDIF //** P3N - 01/07/02 ELSE //** P3N - 01/07/02 IF PROMPT_BOX('About to Print ALL Unprinted Orders' , ; 'Do You Want to Continue?', ' ' ) MORDER_NUM := NIL MCUST_ID = NIL MUSER_ID = NIL ORD_PROCESS(MORDER_NUM) ENDIF ENDIF //** P3N - 01/07/02 ENDIF ENDIF RETURN //** P3N - 3/7/00 *************************************************************** ** PRINT menu *************************************************************** FUNCTION ORD_PROCESS(MORDER_NUM) LOCAL SAVESCR := SAVESCREEN(),CALL_MENU, SVCOLOR, WHATHOTKEY := {' ', ' '} //** P3N - 3/8/00 IF SELECT( CUR_MAST ) > 0 //** AT PRINT ORDER TIME SVORD := (CUR_MAST)->(DONSETORD(1)) //** ENSURE YOU ARE ON THE ENDIF //** ORDER_NUM ( INDEX ORDER1 ) //** P3N - 3/8/00 DBOPEN('ALTSHIPADR') //** P3N - 11/13/98 IF CUR_MAST = 'QUOTE' CALL_MENU := 'ORDERS022' WHATHOTKEY:= {'F7 - Quote Entry', 'F12- Invoice Msg'} ELSE //** IF EMPTY( (CUR_MAST)->ORDER_ORG ) //** P3N - 10/21/99 IF EMPTY( (CUR_MAST)->ORDER_ORG ) .OR. EMPTY(MORDER_NUM) //** P3N - 10/21/99 CALL_MENU := 'ORDERS020' ELSE CALL_MENU := 'ORDERS024' ENDIF WHATHOTKEY:= {'F7 - Order Entry', 'F12- Invoice Msg'} ENDIF @ 2,0 CLEAR IF MORDER_NUM <> NIL OUT_ARR := BLD_ORDER(MORDER_NUM) ENDIF IF EMPTY(OUT_ARR) .AND. MORDER_NUM <> NIL @ 2,0 CLEAR ERR_BOX('NO Line Items for Order - ' + ALLTRIM(MORDER_NUM)) ELSE SVCOLOR := SETCOLOR(HREV) @ 0,0 SAY WHATHOTKEY[1] // Order or Quote entry????? @ 1,0 SAY WHATHOTKEY[2] // Invoice Solicitation msg. entry????? SETCOLOR(SVCOLOR) SETKEY( -6, {||CHG_REV_HOTKEY( )} ) //ORDER CHG/REV SETKEY( -41,{||EDIT_INVNOTES( )} ) //EDIT INVOICE/SOLICITATION MSG DO WHILE .T. @ 2,0 CLEAR CLEAR TYPEAHEAD CALLMENU(CALL_MENU) //DISPLAY ORDER/QUOTE PRINT MENU-MENU SYSTEM IF LASTKEY() = 27 EXIT ENDIF ENDDO SETKEY( -6 , NIL) SETKEY( -41, NIL) ENDIF CLOSE ALTSHIPADR //** P3N - 11/13/98 RETURN ******************************************************************** ******************************************************************** ******************************************************************** FUNCTION PRNT_ORDER(OPTION, TITLE, WHCHORDER) LOCAL XLAST, LASTDATEX, LASTDATE, SEEKKEY, LASTONEPRNT, PARR,CHOICE LOCAL OUTMODE := 'BROWSE', CHG_WHAT, CMD, WORKTXT, GL_INBAL LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') LOCAL SV_SCREEN, ITEMIZE, OPT, SCRNUM, P1, P2, P3, SVSCRN LOCAL COD_CNTR := 0, PRINT_ORDER := .T., PRTORDER := .T. LOCAL PRTCNTR := 0 //** P3N - 01/07/02 LOCAL PRT_COD_ONLY := .F., DEL_COD := 0, ESCKEY := .F. //** P3N - 7/20/98 LOCAL MPORT DBOPEN('ORD_SHIP') //** P3N - 5/13/98 PRIVATE BKOSCRNS := 0 //** P3N - 8/12/98 (HAPPY B-DAY JEFF) IF MORDER_NUM = NIL // PRINT ALL UNPRINTED ORDERS SELECT (CUR_MAST) DO CASE CASE WHCHORDER = 'PROD' SEEKKEY := MP_ALLPRNT XLAST := 'PDATE_LAST' CASE WHCHORDER = 'DEL' DEL_COD := PICKLIST({'ALL Tickets', 'COD Tickets'}, 13, 55, ' Print Delivery' ) IF DEL_COD == 1 //** P3N - 7/20/98 PRT_COD_ONLY := .F. //** P3N - 7/20/98 ELSEIF DEL_COD == 2 //** P3N - 7/20/98 PRT_COD_ONLY := .T. //** P3N - 7/20/98 ELSE ESCKEY := .T. ENDIF //** P3N - 7/20/98 SEEKKEY := MD_ALLPRNT XLAST := 'DDATE_LAST' IF ESCKEY ELSE P1 := '*** Are you sure you want to Print Delivery tickets? *** ' P2 := ' ' P3 := ' ' IF PROMPT_BOX(P1,P2,P3,1) //Default to YES - print ELSE ESCKEY := .T. ENDIF ENDIF CASE WHCHORDER = 'INV' SEEKKEY := MI_ALLPRNT XLAST := 'IDATE_LAST' CASE WHCHORDER = 'OD' SEEKKEY := MO_ALLPRNT XLAST := 'ODATE_LAST' CASE WHCHORDER = 'PO' SEEKKEY := MPO_ALLPRNT XLAST := 'XDATE_LAST' CASE WHCHORDER = 'PREBILL' SEEKKEY := MPB_ALLPRNT XLAST := 'BDATE_LAST' CASE WHCHORDER = 'PRECOST' SEEKKEY := MPC_ALLPRNT XLAST := 'CDATE_LAST' CASE WHCHORDER = 'GOLDEN' SEEKKEY := MGR_ALLPRNT XLAST := 'GDATE_LAST' CASE WHCHORDER = 'BACKORD' //** P3N - 4/30/98 SEEKKEY := MBO_ALLPRNT XLAST := 'BODATE_LST' ENDCASE SET SOFTSEEK ON SEEK SEEKKEY SET SOFTSEEK OFF IF (CUR_MAST)->ORDER_NUM = SEEKKEY // THE "LAST" ORDER PRINTED SKIP 1 // SO GO TO THE NEXT ONE ENDIF IF EOF() IF ESCKEY ELSE ERR_BOX('** NO DOCUMENTS TO PRINT ** ') ENDIF ELSEIF ESCKEY //** P3N - 7/20/98 ESCAPE ON DELIVERY PRINT ELSE LASTDATEX := MAKE_BLOCK( XLAST ) PRTCNTR := 0 //** P3N - 01/07/02 DO WHILE !EOF() PRTORDER := .T. //** P3N - 01/07/02 IF MPRTBYINIT == 'Y' //** P3N - 01/07/02 IF ALLTRIM((CUR_MAST)->USER_ID) == ALLTRIM(M->USER) //** P3N - 01/07/02 ELSE //** P3N - 01/07/02 PRTORDER := .F. //** P3N - 01/07/02 ENDIF //** P3N - 01/07/02 ENDIF //** P3N - 01/07/02 LASTDATE := EVAL(LASTDATEX) //** IF EMPTY(LASTDATE) IF EMPTY(LASTDATE) .AND. PRTORDER //** P3N - 01/07/02 PRTCNTR := PRTCNTR + 1 //** P3N - 01/07/02 MCUST_ID := CUST_ID MUSER_ID := USER_ID MORDER_NUM := ORDER_NUM PRINT_ORDER := .T. //** P3N - 4/14/98 IF (CUR_MAST)->TERMS = '98' // CREDIT MEMO //** P3N - 4/14/98 //** P3N 4/14/98 DO NOT PRINT CREDIT MEMOS FOR PROD OR IC! PRINT_ORDER := PRT_ORDER(WHCHORDER) //** P3N - 4/14/98 ENDIF IF PRINT_ORDER //** P3N - 4/14/98 IF WHCHORDER = 'PREBILL' CUST_MAST->(DBSEEK(MCUST_ID)) IF CUST_MAST->PRE_BILL$'Y' OUT_ARR := BLD_ORDER(MORDER_NUM) MPORT := PRNT_THIS_ORDER( OPTION, TITLE, WHCHORDER, 1) ENDIF ELSEIF PRT_COD_ONLY //** P3N - 7/20/98 IF (CUR_MAST)->TERMS = '30' // C.O.D. //** P3N - 7/20/98 OUT_ARR := BLD_ORDER(MORDER_NUM) //** P3N - 7/20/98 MPORT := PRNT_THIS_ORDER( OPTION, TITLE, WHCHORDER, 1) COD_CNTR := COD_CNTR + 1 ENDIF ELSEIF WHCHORDER == 'DEL' //** P3N - 7/20/98 IF EMPTY((CUR_MAST)->DDATE_LAST) OUT_ARR := BLD_ORDER(MORDER_NUM) MPORT := PRNT_THIS_ORDER( OPTION, TITLE, WHCHORDER, 1) ENDIF ELSE OUT_ARR := BLD_ORDER(MORDER_NUM) MPORT := PRNT_THIS_ORDER( OPTION, TITLE, WHCHORDER, 1) ENDIF ENDIF ENDIF SELECT (CUR_MAST) SKIP 1 ENDDO GOTO BOTTOM IF MPRTBYINIT == 'Y' //** P3N - 01/07/02 IF EMPTY(PRTCNTR) //** P3N - 01/07/02 ERR_BOX('** NO DOCUMENTS TO PRINT ** ') //** P3N - 01/07/02 ENDIF //** P3N - 01/07/02 //** DO NOT UPDATE THE LAST ORDER PRINTED WHEN PRINTING BY INITIALS ELSE //** P3N - 01/07/02 DBOPEN('CONTROL') REC_LOCK(1) DO CASE CASE WHCHORDER = 'PROD' REPLACE P_ALLPRNT WITH (CUR_MAST)->ORDER_NUM MP_ALLPRNT := P_ALLPRNT CASE WHCHORDER = 'DEL' IF PRT_COD_ONLY //** P3N - 7/20/98 IF EMPTY(COD_CNTR) //** P3N - 7/20/98 ERR_BOX('** NO DOCUMENTS TO PRINT ** ') //** P3N - 7/20/98 ENDIF //** P3N - 7/20/98 ELSE //** P3N - 7/20/98 REPLACE D_ALLPRNT WITH (CUR_MAST)->ORDER_NUM MD_ALLPRNT := D_ALLPRNT ENDIF CASE WHCHORDER = 'INV' REPLACE I_ALLPRNT WITH (CUR_MAST)->ORDER_NUM MI_ALLPRNT := I_ALLPRNT CASE WHCHORDER = 'OD' REPLACE O_ALLPRNT WITH (CUR_MAST)->ORDER_NUM MO_ALLPRNT := O_ALLPRNT CASE WHCHORDER = 'PO' REPLACE PO_ALLPRNT WITH (CUR_MAST)->ORDER_NUM MPO_ALLPRNT := PO_ALLPRNT CASE WHCHORDER = 'PREBILL' REPLACE PB_ALLPRNT WITH (CUR_MAST)->ORDER_NUM MPB_ALLPRNT := PB_ALLPRNT CASE WHCHORDER = 'PRECOST' REPLACE PC_ALLPRNT WITH (CUR_MAST)->ORDER_NUM MPC_ALLPRNT := PC_ALLPRNT CASE WHCHORDER = 'GOLDEN' REPLACE GR_ALLPRNT WITH (CUR_MAST)->ORDER_NUM MGR_ALLPRNT := GR_ALLPRNT CASE WHCHORDER = 'BACKORD' //** P3N - 4/30/98 REPLACE BO_ALLPRNT WITH (CUR_MAST)->ORDER_NUM MBO_ALLPRNT := BO_ALLPRNT ENDCASE ENDIF //** P3N - 01/07/02 ENDIF MCUST_ID = NIL MUSER_ID = NIL MORDER_NUM := NIL ELSE // PRINT SELECTED ORDERS GLALLOC_OVR := .F. //USE THE GL ARRAY ALLOCATIONS - NOT THE OVERRIDES! // INVOICE PRINTING???? IF WHCHORDER == 'INV' .OR. WHCHORDER = 'PREBILL' .OR. WHCHORDER = 'PRECOST' ITEMIZE := PICKLIST({'Itemize Amounts', 'NO Amount Itemization'}, 16, 55, '' ) IF LASTKEY() = 27 RETURN ENDIF IF EMPTY(GL_OVR) //** NO GL OVERRIDES EXIST FOR THIS ORDER - USE GL_ARR FOR ALLOC. ELSE P1 := '*** GL Allocation Overrides exist for this order! *** ' P2 := ' YES - Use GL Allocation Overrides! ' P3 := ' NO - RE-ALLOCATE GL and DELETE GL Overrides!' IF PROMPT_BOX(P1,P2,P3, 1) //Default to YES - Use GL OVERRIDES! GLALLOC_OVR := .T. //USE THE GL OVERRIDES FOR THIS ORDER ELSE IF LASTKEY() = 27 // ABORT THE USE OF THE EITHER ALLOCATION RETURN ELSE SVSCRN := SAVESCREEN() OUT_ARR := BLD_ORDER(MORDER_NUM) // EXEC. TO REALLOC GL ARR RESTSCREEN(,,,,SVSCRN) GLALLOC_OVR := .F. //USE THE GL ARRAY ALLOCATIONS DEL_GLALLOC(MORDER_NUM) ENDIF ENDIF ENDIF ELSE ITEMIZE := 1 ENDIF SV_SCREEN := SAVESCREEN() DO WHILE .T. // ONLY THIS GUY GETS THE PREVIEW / CHANGE OPTION IF CUR_MAST == 'ORD_MAST' IF _OC_CAPABLE WORKTXT := 'CHANGE Order' ELSE WORKTXT := 'REVIEW Order Screens' ENDIF PARR = {'BROWSE Order Form', WORKTXT , 'PRINT Order'} CHG_WHAT := 'ORDER' SCRNUM := '2120' // ORDER PROCESSING SCREEN ELSE IF _OC_CAPABLE WORKTXT := 'CHANGE Quote' ELSE WORKTXT := 'REVIEW Quote Screens' ENDIF PARR = {'BROWSE Quote Form', WORKTXT , 'PRINT Quote'} CHG_WHAT := 'QUOTE' SCRNUM := '2220' // QUOTE PROCESSING SCREEN ENDIF IF WHCHORDER == 'INV' .OR. WHCHORDER = 'PREBILL' .OR. WHCHORDER = 'PRECOST' AADD(PARR, 'OVERRIDE GL Alloc.') ENDIF CHOICE := PICKLIST(PARR,18,55) //Select what ACTION to take????? IF LASTKEY() == 27 .OR. CHOICE == 0 EXIT ELSEIF CHOICE == 1 //BROWSE THE ORDER OUTMODE := 'BROWSE' ELSEIF CHOICE == 2 //CHANGE THE ORDER IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' //** OPT := 2 //** P3N - 02/02/07 //** OPT := 1 //** P3N - 02/02/07 //** Changed back - per Darlene OPT := 1 //** P3N - 02/20/07 CMD := 'ADD' ELSE OPT := 3 CMD := 'REV' ENDIF IF CUR_MAST = 'QUOTE_MAST' ACD_ORDERS (OPT,'CHANGE Quote',{ CUR_MAST, CUR_OL, .T., 2, CMD ,,,,,, .F.,,SCRNUM,.F.,, }, '2') ELSE ACD_ORDERS (OPT,'CHANGE Sales Order',{ CUR_MAST, CUR_OL, .T., 2, CMD ,,,,,, .F.,,SCRNUM,.F.,, }, '2') ENDIF SVSCRN := SAVESCREEN() OUT_ARR := BLD_ORDER(MORDER_NUM) // EXEC. TO REBUILD OUT_ARR //AFTER UPDATES!! RESTSCREEN(,,,,SVSCRN) LOOP ELSEIF CHOICE == 3 //PRINT THE ORDER IF WHCHORDER = 'INV' .OR. WHCHORDER = 'PRE' // ONLY CHECK FOR GL OVERRIDES FOR INVOICE OR PREBILL/PRECOST IF AT('_ARCH', WHCHORDER) > 0 // ARCHIVE COPIES - DO NOT UPDATE // BYPASS GL OVERRIDE EDIT FOR ARCHIVED INVOICE OR PREBILL/PRECOST ELSE IF GLALLOC_OVR //USE THE GL OVERRIDES FOR THIS ORDER GL_INBAL := BAL_GLALLOC(MORDER_NUM, GL_OVR) ELSE GL_INBAL := BAL_GLALLOC(MORDER_NUM, GL_ARR) DEL_GLALLOC(MORDER_NUM) ENDIF IF GL_INBAL //THE ORDER AND GL ARE IN BALANCE ALLOW INVOICE PRINT TO OCCUR!!! ELSE RETURN // RETURN DO NOT ALLOW PRINT WHEN OUT OF BALANCE!!! ENDIF ENDIF ENDIF IF WHCHORDER == 'INV' //** CHECK SHIPPING AT INVOICE PRINT TIME! //** P3N - 11/24/98 IF CUR_MAST = 'ORD_MAST' //** ONLY CHECK SHIPPING FOR ORDERS IF EMPTY((CUR_MAST)->SHIP_DATE) CLEAR TYPEAHEAD //** P3N - 12/22/98 ERR_BOX('**** This Order has NOT been Shipped! ****', ; 'CONTACT SUPERVISOR TO PRINT THIS INVOICE!!') IF LASTKEY() <> 126 //SHIFT + "~" //** P3N - 12/22/98 LOOP //** P3N - 12/22/98 ENDIF //** P3N - 12/22/98 ENDIF IF ORD_SHIP->(DBSEEK(MORDER_NUM)) // ORDER ALREADY SHIPPED DO NOT SHIP @ INV TIME **P3N 5/14/98 ELSE SHIP_TOTQTY(,,CUR_MAST ,.F.) SVSCRN := SAVESCREEN() OUT_ARR := BLD_ORDER(MORDER_NUM) // EXEC. TO APPLY UPDATES FROM ORDER CONTROL RESTSCREEN(,,,,SVSCRN) ENDIF ENDIF ENDIF OUTMODE := 'PRINT' ELSEIF CHOICE == 4 //UPDATE \ OVERRIDE GL ALLOCATIONS GL_OVR := UPD_GLALLOC(MORDER_NUM, GL_ARR) IF LASTKEY() = 27 IF EMPTY(GL_OVR) GLALLOC_OVR := .F. //USE THE GL_ARR VALUES AT PRINT TIME!!! ELSE GLALLOC_OVR := .T. //USE THE OVERRIDE VALUES AT PRINT TIME!!! ENDIF ELSE GLALLOC_OVR := .T. //USE THE OVERRIDE VALUES AT PRINT TIME!!! ENDIF LOOP ENDIF MPORT := PRNT_THIS_ORDER( OPTION, TITLE, WHCHORDER, ITEMIZE , OUTMODE) ****IF WHCHORDER == 'INV' //** P3N - 6/9/98 IF BO NOT PRINTED **** //** FORCE BACKORDER AFTER INVOICE **** IF OUTMODE == 'PRINT' //** WHEN PRINTING **** IF (CUR_MAST)->(FIELDPOS('BODATE_FST')) > 0 **** IF EMPTY((CUR_MAST)->BODATE_FST) .AND. ; **** EMPTY((CUR_MAST)->BODATE_LST) **** //** TURNED OFF UNTIL PRINTER AVAILABLE - PER ELLEN 6/11/98 P3N **********PRNT_THIS_ORDER( OPTION, TITLE, 'BACKORD', ITEMIZE , OUTMODE) **** ENDIF **** ENDIF **** ENDIF ****ENDIF RESTSCREEN(,,,,SV_SCREEN) ENDDO ENDIF RETURN MPORT ************************************************************** * P3N - 4/14/98 * IF THE ORDER IS A PRODUCTION OR INTERCOMPANY ORDER * DO NOT PRINT ************************************************************** FUNCTION PRT_ORDER(WHCHORDER) LOCAL RETVAL := .T. IF WHCHORDER = 'PROD' .OR. WHCHORDER = 'PO' .OR. ; WHCHORDER = 'GOLDEN' RETVAL := .F. ENDIF RETURN RETVAL ************************************************************** ************************************************************** ************************************************************** FUNCTION PRNT_THIS_ORDER(OPTION, TITLE, WHCHORDER, ITEMPARM, OUTMODE) LOCAL MPORT LOCAL OL_ARR := {}, I, SAVESEL := SELECT() LOCAL SS2, CORR, CUSTNAME:='', OUTFILE LOCAL MORDER_NUM := (CUR_MAST)->ORDER_NUM LOCAL M1, M2, M3, MSG, PARR, CHOICE, PROG, QUOTE_PROCESS := .F. LOCAL PIM1 := 'Order '+ (CUR_MAST)->ORDER_NUM +' is NOT entirely SHIPPED! Do you want to: ' LOCAL PIM2 := ' NO - Invoice Entire Order? - (ALL Items will be Billed.)' LOCAL PIM3 := ' YES - PARTIAL Invoice? - (ONLY Shipped items will be Billed.)' LOCAL MINVOICENUM, MPO_ARR := {} LOCAL MSHIP_DATE, MIDATE_FST, PROD_CODE, ELM, PRTBOCOPY := '1' LOCAL BKOARR, ABKOSCR //** P3N - 6/30/98 LOCAL IPOARR //** P3N - 7/8/98 LOCAL TOLKEY := '', SCRNINFO := {}, SVDESC //** P3N - 9/16/98 LOCAL WKORDQTY := 0, WKSHPDQTY := 0 //** P3N -11/4/98 LOCAL ENTIRE_ORDSHIPPED := .F. //** P3N - 11/13/98 LOCAL PARTIAL_INVOICE := .F. //** P3N - 11/13/98 LOCAL REPRINT_INVOICE := .F. //** P3N - 12/3/98 LOCAL INV_ARR := {} //** P3N - 12/7/98 STATIC BKOASCR := {} //** P3N - 8/25/98 PRIVATE ITEMIZE := ITEMPARM, SAVE_DESC, SAVE_TYPE, SAVE_DESC1, SAVE_BKOPROD OUTFILE := M->_THISUSER_TEMP IF OUTMODE = NIL OUTMODE = 'PRINT' // VS. 'REVU' ENDIF IF CUR_MAST == 'ORD_MAST' MSG := 'Order # ' + ALLTRIM(MORDER_NUM) ELSEIF CUR_MAST == 'QUOTE_MAST' MSG := 'Quote # ' + ALLTRIM(MORDER_NUM) QUOTE_PROCESS := .T. //** P3N - 4/13/98 ENDIF IF WHCHORDER == 'INV' // INVOICE COPIES M1 := ' INVOICE FOR ' + MSG + ' Was Printed on ' + DTOC((CUR_MAST)->IDATE_LAST) + ' ' + (CUR_MAST)->ITIME_LAST M2 := ' It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->IDATE_FST) + ' ' + (CUR_MAST)->ITIME_FST M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' ELSEIF WHCHORDER == 'PREBILL' // PRODUCTION COPIES M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->BDATE_FST) + ' ' + (CUR_MAST)->BTIME_LAST M2 := ' ' M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' ELSEIF WHCHORDER == 'PRECOST' // PRODUCTION COPIES M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->CDATE_FST) + ' ' + (CUR_MAST)->CTIME_LAST M2 := ' ' M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' ELSEIF WHCHORDER == 'GOLDEN' // PRODUCTION COPIES M1 := 'Golden Rod for ' + MORDER_NUM + ' Was Printed on ' + DTOC((CUR_MAST)->GDATE_FST) + ' ' + (CUR_MAST)->GTIME_LAST M2 := ' ' M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' ELSEIF WHCHORDER == 'PROD' // PRODUCTION COPIES M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->PDATE_LAST) + ' ' + (CUR_MAST)->PTIME_LAST M2 := 'It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->PDATE_FST) + ' ' + (CUR_MAST)->PTIME_FST M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' ELSEIF WHCHORDER == 'DEL' // PRODUCTION COPIES M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->DDATE_LAST) + ' ' + (CUR_MAST)->DTIME_LAST M2 := 'It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->DDATE_FST) + ' ' + (CUR_MAST)->DTIME_FST M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' ELSEIF WHCHORDER == 'OD' // ORDER DESK COPIES M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->ODATE_LAST) + ' ' + (CUR_MAST)->OTIME_LAST M2 := 'It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->ODATE_FST) + ' ' + (CUR_MAST)->OTIME_FST M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' ELSEIF WHCHORDER == 'PO' // PURCHASE ORDERS M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->XDATE_LAST) + ' ' + (CUR_MAST)->XTIME_LAST M2 := 'It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->XDATE_FST) + ' ' + (CUR_MAST)->XTIME_FST M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' ELSEIF WHCHORDER == 'BACKORD' // BACK ORDERS - **P3N - 4/30/98 M1 := 'BACK' + MSG + ' Was Printed on ' + DTOC((CUR_MAST)->BODATE_LST) + ' ' + (CUR_MAST)->BOTIME_LST M2 := 'It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->BODATE_FST) + ' ' + (CUR_MAST)->BOTIME_FST M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' ENDIF CLS SAYTITLE(TITLE, 'PR010') IF OUTMODE = 'PRINT' IF WHCHORDER == 'PROD' IF !EMPTY((CUR_MAST)->PDATE_LAST) // PRODUCTION CLEAR TYPEAHEAD ERR_BOX(M1,M2,M3) IF LASTKEY() <> 126 // "~" RETURN ENDIF ENDIF ELSEIF WHCHORDER == 'INV' .OR. WHCHORDER = 'PREBILL' .OR. WHCHORDER = 'PRECOST' IF !EMPTY((CUR_MAST)->IDATE_LAST) .AND. WHCHORDER = 'INV' // INVOICE CLEAR TYPEAHEAD ERR_BOX(M1,M2,M3) IF LASTKEY() <> 126 // "~" RETURN ENDIF ENDIF IF !EMPTY((CUR_MAST)->BDATE_FST) .AND. WHCHORDER = 'PREBILL' // INVOICE CLEAR TYPEAHEAD ERR_BOX(M1,M2,M3) IF LASTKEY() <> 126 // "~" RETURN ENDIF ENDIF IF !EMPTY((CUR_MAST)->CDATE_FST) .AND. WHCHORDER = 'PRECOST' CLEAR TYPEAHEAD ERR_BOX(M1,M2,M3) IF LASTKEY() <> 126 // "~" RETURN ENDIF ENDIF ELSEIF WHCHORDER == 'OD' IF !EMPTY((CUR_MAST)->ODATE_LAST) // ORDER DESK CLEAR TYPEAHEAD ERR_BOX(M1,M2,M3) IF LASTKEY() <> 126 // "~" RETURN ENDIF ENDIF ELSEIF WHCHORDER == 'GOLDEN' IF !EMPTY((CUR_MAST)->GDATE_LAST) // GOLDEN ROD CLEAR TYPEAHEAD ERR_BOX(M1,M2,M3) IF LASTKEY() <> 126 // "~" RETURN ENDIF ENDIF ELSEIF WHCHORDER == 'DEL' IF !EMPTY((CUR_MAST)->DDATE_LAST) // DELIVERY COPY CLEAR TYPEAHEAD M3 := 'Delivery Tickets can NOT be REPRINTED - ' ERR_BOX(M1,M2, ' ',M3,'they MUST be TYPED to be recreated!') IF MHOME_LOC_CODE = 'KC' //** P3N - 6/17/99 RETURN //** P3N - 6/2/99 DO NOT ALLOW THE DELIVERY //** TICKET TO BE RE-PRINTED - PER ARNIE ELSE //** P3N - 6/17/99 IF LASTKEY() <> 126 // "~" //** PER LAURA MAE @ PAWNEE RETURN //** ALLOW DELIVERY TO BE ENDIF //** REPRINTED ENDIF //** P3N - 6/17/99 ENDIF ELSEIF WHCHORDER == 'GOLDEN' IF !EMPTY((CUR_MAST)->GDATE_LAST) CLEAR TYPEAHEAD ERR_BOX(M1,M2,M3) IF LASTKEY() <> 126 // "~" RETURN ENDIF ENDIF ELSEIF WHCHORDER == 'PO' IF !EMPTY((CUR_MAST)->XDATE_LAST) // ORDER DESK CLEAR TYPEAHEAD ERR_BOX(M1,M2,M3) IF LASTKEY() <> 126 // "~" RETURN ENDIF ENDIF ELSEIF WHCHORDER == 'BACKORD' //** P3N - 4/30/98 IF !EMPTY((CUR_MAST)->BODATE_LST) // BACKORDER CLEAR TYPEAHEAD ERR_BOX(M1,M2,M3) IF LASTKEY() <> 126 // "~" RETURN ENDIF ENDIF ENDIF ENDIF WAIT_BOX('*** Processing ' + MSG , ; '*** Please Wait ****' ) IF PRNTSOURCE = 'OE' // END OF ORDER ENTRY ALREADY HAVE KEY ELSE SELECT(CUR_MAST) MCUST_ID = CUST_ID MUSER_ID = USER_ID ENDIF //** P3N - 11/13/98 CHECK FOR A PARTIAL INVOICE HERE IF WHCHORDER = 'INV' .AND. CUR_MAST == 'ORD_MAST' //** P3N - 11/13/98 IF POSTED_ORDER(MORDER_NUM) //** ORDER HAS BEEN POSTED - REPRINT INVOICE REPRINT_INVOICE := .T. ELSEIF ( EMPTY( (CUR_MAST)->IDATE_FST) .AND. EMPTY( (CUR_MAST)->ITIME_FST) ) ; .OR. (CUR_MAST)->IDATE_FST >= CURDATE IF (CUR_MAST)->IDATE_FST == CURDATE //** P3N - 12/9/98 REPRINT_INVOICE := .T. //** P3N - 12/9/98 ELSEIF ORDER_SHIPPED(OUT_ARR[2,1], MORDER_NUM, WHCHORDER) //** P3N - 12/7/98 ENTIRE_ORDSHIPPED := .T. ELSE PARTIAL_INVOICE := PROMPT_BOX(PIM1, PIM2, PIM3) IF LASTKEY() == 27 //** USER REQUESTED TO ABORT THE INVOICE PROCESS RETURN ENDIF ENDIF ELSE //** ORDER HAS BEEN PRINTED - REPRINT INVOICE REPRINT_INVOICE := .T. ENDIF ENDIF //** THIS LOGIC WILL ENSURE THAT ALL INVOICES CREATED PRIOR TO //** THE PARTIAL INVOICE INSTALL WILL BE RECALLED AS IS - WITHOUT //** ANY PARTIAL INVOICE LOGIC. IF EMPTY((CUR_MAST)->IDATE_FST) //** P3N - 12/10/98 ELSEIF DTOC((CUR_MAST)->IDATE_FST) < '12/21/98' .AND. MHOME_LOC_CODE = 'KC' //** P3N - 12/10/98 PARTIAL_INVOICE := .F. //** P3N - 12/10/98 REPRINT_INVOICE := .F. //** P3N - 12/10/98 ELSEIF DTOC((CUR_MAST)->IDATE_FST) < '01/20/99' .AND. MHOME_LOC_CODE = 'IOLA' //** P3N - 1/20/99 PARTIAL_INVOICE := .F. //** P3N - 12/10/98 REPRINT_INVOICE := .F. //** P3N - 12/10/98 ELSEIF DTOC((CUR_MAST)->IDATE_FST) < '06/14/99' .AND. MHOME_LOC_CODE = 'LINDS' //** P3N - 1/20/99 PARTIAL_INVOICE := .F. //** P3N - 12/10/98 REPRINT_INVOICE := .F. //** P3N - 12/10/98 ELSEIF DTOC((CUR_MAST)->IDATE_FST) < '02/04/99' .AND. MHOME_LOC_CODE = 'PAWNEE' //** P3N - 1/20/99 PARTIAL_INVOICE := .F. //** P3N - 12/10/98 REPRINT_INVOICE := .F. //** P3N - 12/10/98 ENDIF IF QUOTE_PROCESS //** P3N -12/7/98 //** P3N - 11/18/02 - USE THE ACTUAL SIZE ON THE QUOTES - PER LINDA LINDS INV_ARR := ACLONE(OUT_ARR[1,8]) //** P3N - 11/18/02 ELSEIF WHCHORDER = 'INV' .OR. WHCHORDER = 'PREBILL' .OR. ; WHCHORDER = 'PRECOST' .OR. DO_WE_PRT_AMT(WHCHORDER, ' ' ) //** FOR INVOICE / PREBILL / PRECOST //** CALC ORDER TOTALS, AND ITEM DISCOUNTS - AND REBUILD OUT_ARR / GL_ARR MISCP_PAINT(.T., PARTIAL_INVOICE, REPRINT_INVOICE, CUR_OL) OUT_ARR := BLD_ORDER(MORDER_NUM, ,PARTIAL_INVOICE, REPRINT_INVOICE) //** P3N -12/7/98 INV_ARR := ACLONE(OUT_ARR[2,1]) //** P3N - 12/7/98 ENDIF PRTBOCOPY := '1' //** P3N - 12/21/98 IF WHCHORDER = 'BACKORD' //** P3N - 12/21/98 OUT_ARR := BLD_ORDER(MORDER_NUM, ,PARTIAL_INVOICE, REPRINT_INVOICE) //** P3N -12/7/98 IF (CUR_MAST)->(FIELDPOS('BODATE_FST')) > 0 //** P3N - 12/21/98 IF EMPTY((CUR_MAST)->BODATE_FST) //** P3N - 12/21/98 //** FIRST TIME BO PRINTED - PRINT ALL BO COPIES PRTBOCOPY := '1' ELSE //** P3N - 12/21/98 PRTBOCOPY := PICKLIST({'1. ALL Backorders ', '2. Primary','3. Screen', '4. Storm'}, 4, 30, 'Select Backorder' ) IF LASTKEY() = 27 //** P3N - 12/21/98 PRTBOCOPY := '0' //** P3N - 12/21/98 ELSEIF PRTBOCOPY = 1 //** P3N - 12/21/98 PRTBOCOPY := '1' //** P3N - 12/21/98 ELSEIF PRTBOCOPY = 2 //** P3N - 12/21/98 PRTBOCOPY := '2' //** P3N - 12/21/98 ELSEIF PRTBOCOPY = 3 //** P3N - 12/21/98 PRTBOCOPY := '3' //** P3N - 12/21/98 ELSEIF PRTBOCOPY = 4 //** P3N - 12/21/98 PRTBOCOPY := '4' //** P3N - 12/21/98 ENDIF //** P3N - 12/21/98 ENDIF //** P3N - 12/21/98 ENDIF //** P3N - 12/21/98 ENDIF //** P3N - 12/21/98 //** P3N - 6/4/99 MOVED HERE FROM BELOW IF OUTMODE == 'PRINT' //** IF PRINT TIME-CHECK FOR PARTIAL INVOICE? IF WHCHORDER = 'INV' .AND. CUR_MAST == 'ORD_MAST' //** P3N - 6/4/99 IF PARTIAL_INVOICE //** P3N - 6/4/99 IF EMPTY(ORD_MAST->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! PARTIALINVOICE() //** CREATE A NEW INVOICE ONE TIME! SHIP_REST(ORD_MAST->ORDER_NUM, 'SCREENS' ) //** SHIP ALL REMAINING ITEMS ON ORDER ENDIF ENDIF ENDIF ENDIF // SETUP THE PRINTER INFO SET_P_ON() IF OUTMODE = 'PRINT' // Print the ORDER PORTFLAG := .T. ELSE // Browse the ORDER in a userfile IF FILE(OUTFILE) //PROG := 'DEL ' + OUTFILE //CALL_OLAY(,,PROG, 0, '', '') FERASE( OUTFILE ) ENDIF SET PRINTER TO (OUTFILE) PORTFLAG := .F. ENDIF IF WHCHORDER = 'INV' .OR. WHCHORDER = 'PREBILL' .OR. WHCHORDER = 'PRECOST' IF QUOTE_PROCESS //** P3N - 4/13/98 MPORT := SET_PORT('_PORT_QUOTE', PORTFLAG, OUTFILE ) ELSEIF WHCHORDER = 'PREBILL' //** P3N - 4/13/98 MPORT := SET_PORT('_PORT_PREBILL', PORTFLAG, OUTFILE ) ELSE MPORT := SET_PORT('_PORT_INVOICE', PORTFLAG, OUTFILE ) ENDIF IF WHCHORDER = 'INV' .AND. CUR_MAST == 'ORD_MAST' //** P3N - 11/24/98 IF PARTIAL_INVOICE //** P3N - 11/24/98 PRNT_THE_ORDER('INV', INV_ARR, 'INV', 'ALL' , , .T., ; PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) //** P3N -12/3/98 ELSE PRNT_THE_ORDER('INV', INV_ARR, 'INV', 'ALL' , , .T., ; PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) //** P3N -12/3/98 ENDIF //** FOR LINDS PRINT THE PREBILL INVOICE WITH EXACT SIZE INFORMATION - PER LINDA - P3N 7/19/00 ELSEIF WHCHORDER == 'PREBILL' //** P3N - 7/19/00 IF MHOME_LOC_CODE = 'LINDS' //** P3N - 7/19/00 PRNT_THE_ORDER('INV', OUT_ARR[1,8], 'INV', 'ALL' , WHCHORDER, .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ELSE //** P3N - 7/19/00 PRNT_THE_ORDER('INV', OUT_ARR[2,1], 'INV', 'ALL' , WHCHORDER, .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ENDIF //** P3N - 7/19/00 ELSEIF QUOTE_PROCESS ; //** P3N -11/18/02 .AND. MHOME_LOC_CODE = 'LINDS' //** P3N -11/18/02 //** P3N - 11/18/02 - USE INV_ARR FOR QUOTES - SHOULD BE SET TO PROPER VALUE //** P3N - 11/18/02 THIS WILL PRINT THE ACTUAL SIZE ON THE QUOTES - PER LINDA @ LINDS PRNT_THE_ORDER('INV', INV_ARR, 'INV', 'ALL' , WHCHORDER, .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ELSE PRNT_THE_ORDER('INV', OUT_ARR[2,1], 'INV', 'ALL' , WHCHORDER, .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ENDIF ELSEIF WHCHORDER = 'PROD' .AND. !EMPTY(OUT_ARR) // IT IS A PRODUCTION REQUEST MPORT := SET_PORT('_PORT_PROD', PORTFLAG, OUTFILE) FOR I = 1 TO LEN(OUT_ARR[1]) DO CASE CASE I = 2 // PRODUCTION FRAME MADE AT HOME LOCATION IF LEN(OUT_ARR[1,I]) > 0 PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'FRAME', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) // TRUE FOR PRINT THE CUTTING SPECS ENDIF IF LEN(OUT_ARR[1,I]) > 0 PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'STDFRAME', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) // TRUE FOR PRINT THE CUTTING SPECS ENDIF CASE I = 3 // PRODUCTION SASH MADE AT HOME LOCATION IF LEN(OUT_ARR[1,I]) > 0 PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'SASH', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ENDIF CASE I = 4 // PRODUCTION GLASS MADE AT HOME LOCATION IF LEN(OUT_ARR[1,I]) > 0 PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'GLASS', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ENDIF CASE I = 5 // PRODUCTION SCREEN MADE AT HOME LOCATION IF LEN(OUT_ARR[1,I]) > 0 PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'SCREEN', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ENDIF CASE I = 6 // PRODUCTION STORM MADE AT HOME LOCATION IF LEN(OUT_ARR[1,I]) > 0 PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'STORM', MHOME_LOC_CODE, ,.T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) ENDIF CASE I = 7 // EXPANDERS MADE AT HOME LOCATION (SEVENTH ELEMENT IN PROD ARRARY) IF LEN(OUT_ARR[1,I]) > 0 PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'EXPANDER', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ENDIF ENDCASE NEXT ELSEIF WHCHORDER = 'OD' // ORDER DESK CONTROL COPY MPORT := SET_PORT('_PORT_ORDER', PORTFLAG, OUTFILE) // USE 2,1(INVOICE) FORMAT-NO ADDL PRODUCTS ON ORDER DESK COPY // 8-21-95 - PRINT THE CONTROL COPY AND CALL IT A SPINDLE COPY FOR ALL PRNT_THE_ORDER('OD', OUT_ARR[2,1], 'CTRL', MHOME_LOC_CODE, 'ORDERDESK', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) ELSEIF WHCHORDER = 'PO' // PRINT INTERCOMPANY PO'S IF APPLICABLE MPORT := SET_PORT('_PORT_IC', PORTFLAG, OUTFILE) SAVESEL := SELECT() IPOARR := {} //** P3N - 7/8/98 FOR I := 1 TO LEN(OUT_ARR[2,1]) //** P3N - 7/8/98 AADD(IPOARR, OUT_ARR[2,1,I]) //** P3N - 7/8/98 NEXT //** P3N - 7/8/98 FOR I := 1 TO LEN(OUT_ARR[1,10]) //** P3N - 7/8/98 IPO_PROD := OUT_ARR[1,10,I,10] //** P3N - 9/14/98 IPO_LINE := OUT_ARR[1,10,I,9] //** P3N - 9/14/98 IF ASCAN(IPOARR, {|X| X[10] + X[9] == IPO_PROD + IPO_LINE }) > 0 ELSE AADD(IPOARR, OUT_ARR[1,10,I]) //** P3N - 7/8/98 ENDIF NEXT //** P3N - 7/8/98 SELECT MFG_LOC GOTO TOP DO WHILE !EOF() IF LOC_CODE == MHOME_LOC_CODE SKIP 1 LOOP ENDIF // CONTENTS OF THE "CTRL" COPY PRNT_THE_ORDER('OD', IPOARR, 'PO', MFG_LOC->LOC_CODE, 'PO', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) SELECT MFG_LOC SKIP 1 ENDDO ELSEIF WHCHORDER = 'DEL' SELECT(SAVESEL) SAVE_DESC := NIL MPORT := SET_PORT('_PORT_DELIVERY', PORTFLAG, OUTFILE) IF MHOME_LOC_CODE = 'LINDS' PRNT_THE_ORDER('OD', OUT_ARR[1,8], 'CTRL', MHOME_LOC_CODE, 'DELIVERY', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ELSE // INVOICE INFO PRNT_THE_ORDER('OD', OUT_ARR[2,1], 'CTRL', MHOME_LOC_CODE, 'DELIVERY', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ENDIF ELSEIF WHCHORDER = 'GOLDEN' SELECT(SAVESEL) SAVE_DESC := NIL MPORT := SET_PORT('_PORT_GOLDEN', PORTFLAG, OUTFILE) PRNT_THE_ORDER('PROD', OUT_ARR[1,8], 'CTRL', MHOME_LOC_CODE, WHCHORDER, .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ELSEIF WHCHORDER = 'BACKORD' //** P3N - 4/30/98 SELECT(SAVESEL) SAVE_DESC := NIL MPORT := SET_PORT('_PORT_BO', PORTFLAG, OUTFILE) //** PRINT PRIMARY PRODUCT BACKORDERS - (IE: C500 SINGLE HUNG...) BKOARR := {} IF PRTBOCOPY $ '12' //** PRINT PRIMARY BACKORDER COPY FOR I := 1 TO LEN(OUT_ARR[2,1]) IF GET_CATCODE(OUT_ARR[2,1,I,10]) == 'SCREENS' //** BYPASS SCREENS ON THIS PASS OF THE BACKORDER PRINTING ELSEIF GET_CATCODE(OUT_ARR[2,1,I,10]) == 'STORMS ' //** BYPASS STORMS ON THIS PASS OF THE BACKORDER PRINTING ELSE WKORDQTY := OUT_ARR[2,1,I,7] //** P3N -11/4/98 WKSHPDQTY := OUT_ARR[2,1,I,11] //** P3N -11/4/98 IF WKORDQTY - WKSHPDQTY <= 0 //** P3N -11/4/98 ELSEIF EMPTY((CUR_MAST)->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! AADD(BKOARR, OUT_ARR[2,1,I]) ENDIF ENDIF NEXT ENDIF IF PRTBOCOPY $ '13' //** PRINT SCREEN BACKORDER COPY //** PRINT SCREEN BACKORDERS - COMBINE SCREENS AT ALL LOC'S. ABKOSCR := {} //* SCREENS NOT AT MFG. LOC. FOR I := 1 TO LEN(OUT_ARR[1,9]) //* SCREENS NOT AT MFG. LOC. WKORDQTY := OUT_ARR[1,9,I,7] //** P3N -11/4/98 WKSHPDQTY := OUT_ARR[1,9,I,11] //** P3N -11/4/98 IF WKORDQTY - WKSHPDQTY <= 0 //** P3N -11/4/98 ELSEIF EMPTY((CUR_MAST)->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! AADD(ABKOSCR, OUT_ARR[1,9,I]) ENDIF NEXT FOR I := 1 TO LEN(OUT_ARR[1,5]) //*SCREENS AT MFG. LOC. WKORDQTY := OUT_ARR[1,5,I,7] //** P3N -11/4/98 WKSHPDQTY := OUT_ARR[1,5,I,11] //** P3N -11/4/98 IF WKORDQTY - WKSHPDQTY <= 0 //** P3N -11/4/98 ELSEIF EMPTY((CUR_MAST)->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! AADD(ABKOSCR, OUT_ARR[1,5,I]) ENDIF IF OUT_ARR[1,5,I,8] == 'OL' //** LINE_NUM PROD_CODE TOLKEY := MORDER_NUM + OUT_ARR[1,5,I,9] + OUT_ARR[1,5,I,10] + 'SCREENS' SCRNINFO := TOL_SCREENS(, TOLKEY) IF EMPTY(SCRNINFO[2]) ELSEIF EMPTY(ABKOSCR) ELSE ABKOSCR[LEN(ABKOSCR),2] := SCRNINFO[2] //**TOL LINE DESC FOR SCREEN ENDIF ENDIF NEXT SAVE_DESC := NIL ENDIF IF PRTBOCOPY $ '14' //** PRINT STORM BACKORDER COPY //** PRINT STORM BACKORDERS - COMBINE STORMS AT ALL LOC'S. SAVE_DESC := NIL //**BKOARR := {} FOR I := 1 TO LEN(OUT_ARR[1,6]) //** STORMS @ MFG. LOC. IF OUT_ARR[1,6,I,10] = 'PWS' //** DO NOT PRINT A BACKORDER FOR ELSE //** PWS STORMS WKORDQTY := OUT_ARR[1,6,I,7] //** P3N -11/4/98 WKSHPDQTY := OUT_ARR[1,6,I,11] //** P3N -11/4/98 IF WKORDQTY - WKSHPDQTY <= 0 //** P3N -11/4/98 ELSEIF EMPTY((CUR_MAST)->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! AADD(BKOARR, OUT_ARR[1,6,I]) ENDIF ENDIF NEXT FOR I := 1 TO LEN(OUT_ARR[1,10]) //** STORMS NOT @ MFG. LOC. IF OUT_ARR[1,10,I,10] = 'PWS' //** DO NOT PRINT A BACKORDER FOR ELSE //** PWS STORMS WKORDQTY := OUT_ARR[1,10,I,7] //** P3N -11/4/98 WKSHPDQTY := OUT_ARR[1,10,I,11] //** P3N -11/4/98 IF WKORDQTY - WKSHPDQTY <= 0 //** P3N -11/4/98 ELSEIF EMPTY((CUR_MAST)->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! AADD(BKOARR, OUT_ARR[1,10,I]) ENDIF ENDIF NEXT ENDIF IF EMPTY(BKOARR) //** P3N - 12/3/98 - PRINT BACKORDER IF ONLY MISC/NONTX ITEMS SAVE_BKOPROD := ' ' //** P3N - 2/2/99 PRNT_THE_ORDER('BACKORD', {} , 'BACKORD', 'ALL','BACKORD', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ELSE BKOARR := ASORT(BKOARR,,, {|X,Y| X[2] + X[9] < Y[2] + Y[9] }) SAVE_BKOPROD := ' ' //** P3N - 2/2/99 PRNT_THE_ORDER('BACKORD', BKOARR, 'BACKORD', 'ALL','BACKORD', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) ENDIF IF EMPTY(ABKOSCR) BKOASCR := {} //** P3N - 5/25/99 BKOSCRNS := 0 //** P3N - 5/25/99 ELSEIF EMPTY(BKOSCRNS) //** ONLY SUMMARIZE SCREENS THE FIRST TIME BKOASCR := SUM_BKO_SCREENS(ABKOSCR) BKOASCR := ASORT(BKOASCR,,, {|X,Y| STR(X[7],5)+X[2]+X[9] < STR(Y[7],5)+Y[2]+Y[9] }) //** //** P3N - 9/22/98 //** SORT BACKORDER SCREENS BY THE PRODUCT & DESCR & QTY BKOASCR := ASORT(BKOASCR,,, {|X,Y| X[10]+X[2]+STR(X[7],5) < Y[10]+Y[2]+STR(Y[7],5) }) ENDIF SAVE_BKOPROD := ' ' //** P3N - 2/2/99 PRNT_THE_ORDER('BACKORD', BKOASCR, 'BACKORD', 'ALL','SCREENS', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) ENDIF SET_P_OFF() IF EMPTY(WIDEON) //PRINTER SELECTION INVALID - GET OUT!!! RETURN ENDIF IF OUTMODE = 'PRINT' //IF the user requests to PRINT // .OR. OUTMODE = 'BROWSE' IF OUTMODE = 'PRINT' LPREVIEW := .F. ELSE LPREVIEW := .T. ENDIF IF QUOTE_PROCESS CGW_PRNT_FROM_FILE( 'QUOTE', OUTFILE, LPREVIEW ) // 9-10-20 ELSE CGW_PRNT_FROM_FILE( WHCHORDER, OUTFILE, LPREVIEW ) ENDIF (CUR_MAST)->(DBSEEK(MORDER_NUM)) // 6/9/20 IF OUTMODE = 'PRINT' //* SELECT ORD_MAST //UPDATE dates to indicate a PRINT has occured IF AT('_ARCH', WHCHORDER) > 0 // ARCHIVE COPIES - DO NOT UPDATE // CONTINUE FOR PRINTING ARCHIVED ORDERS ELSE SELECT(CUR_MAST) REC_LOCK(1) IF WHCHORDER == 'INV' // INVOICE COPIES //** P3N - 11/24/98 - PARTIAL INVOICING CUTINVOICE(MORDER_NUM, GL_ARR, PARTIAL_INVOICE) //** P3N - 6/4/99 MOVED ABOVE - TIMING ISSUES REGARDING INVOICE PRINT //** P3N - THE 'BACKORDER TO' WAS NOT PRINTING ON INVOICE-FIRST PRINT ELSEIF WHCHORDER == 'PREBILL' // PREBILL IF EMPTY(BDATE_FST) REPLACE BDATE_FST WITH CURDATE REPLACE BTIME_FST WITH TIME() ENDIF REPLACE BDATE_LAST WITH CURDATE REPLACE BTIME_LAST WITH TIME() ELSEIF WHCHORDER == 'PRECOST' // PRECOST IF EMPTY(CDATE_FST) REPLACE CDATE_FST WITH CURDATE REPLACE CTIME_FST WITH TIME() ENDIF REPLACE CDATE_LAST WITH CURDATE REPLACE CTIME_LAST WITH TIME() ELSEIF WHCHORDER == 'GOLDEN' // GOLDEN ROD IF EMPTY(GDATE_FST) REPLACE GDATE_FST WITH CURDATE REPLACE GTIME_FST WITH TIME() ENDIF REPLACE GDATE_LAST WITH CURDATE REPLACE GTIME_LAST WITH TIME() ELSEIF WHCHORDER == 'PROD' // PRODUCTION COPIES IF EMPTY(PDATE_FST) REPLACE PDATE_FST WITH CURDATE REPLACE PTIME_FST WITH TIME() ENDIF REPLACE PDATE_LAST WITH CURDATE REPLACE PTIME_LAST WITH TIME() ELSEIF WHCHORDER == 'DEL' // DELIVERY COPIES IF EMPTY(DDATE_FST) REPLACE DDATE_FST WITH CURDATE REPLACE DTIME_FST WITH TIME() ENDIF REPLACE DDATE_LAST WITH CURDATE REPLACE DTIME_LAST WITH TIME() ELSEIF WHCHORDER == 'OD' // ORDER DESK COPIES IF EMPTY(ODATE_FST) REPLACE ODATE_FST WITH CURDATE REPLACE OTIME_FST WITH TIME() ENDIF REPLACE ODATE_LAST WITH CURDATE REPLACE OTIME_LAST WITH TIME() ELSEIF WHCHORDER == 'PO' // ORDER DESK COPIES IF EMPTY(XDATE_FST) REPLACE XDATE_FST WITH CURDATE REPLACE XTIME_FST WITH TIME() ENDIF REPLACE XDATE_LAST WITH CURDATE REPLACE XTIME_LAST WITH TIME() ELSEIF WHCHORDER == 'BACKORD' //BACKORDER //** P3N - 4/30/98 IF EMPTY(BODATE_FST) REPLACE BODATE_FST WITH CURDATE REPLACE BOTIME_FST WITH TIME() ENDIF REPLACE BODATE_LST WITH CURDATE REPLACE BOTIME_LST WITH TIME() ELSE ? ABENDPRNT_THIS ENDIF ENDIF ENDIF ELSE // BROWSE ORDER and do not UPDATE dates SHELLEXECUTE(,'OPEN', OUTFILE,'',, SW_SHOW) // WAITRUN( 'NOTEPAD ' + OUTFILE ) // 1/20/20 //PROG := 'BROWSE ' + OUTFILE //CALL_OLAY(,,PROG, 0, '', '') ENDIF UNLOCK RETURN MPORT ************************************************************* * P3N - 11/12/98 CUT AN INVOICE AND APPROPRIATE BILLING * * TRANSACTIONS AS NECESSARY. * ************************************************************* FUNCTION CUTINVOICE(MORDER_NUM, GL_ARR, PARTIAL_INVOICE) DBOPEN('SALEHIST') //** P3N - 8/13/98 - ADDRESS POSTING LOCKOUT SELECT(CUR_MAST) REC_LOCK(3) REPLACE IDATE_LAST WITH CURDATE //** P3N - 11/11/98 REPLACE ITIME_LAST WITH TIME() //** P3N - 11/11/98 IF EMPTY(IDATE_FST) REPLACE IDATE_FST WITH CURDATE REPLACE ITIME_FST WITH TIME() CUT_BILLTRAN( (CUR_MAST)->ORDER_NUM , GL_ARR, PARTIAL_INVOICE ) ELSE IF POSTED_ORDER(MORDER_NUM) //** ORDER HAS BEEN POSTED TO THE AS/400 - CAN NOT SEND AGAIN!!! ERR_BOX('** Order - ' + ALLTRIM(MORDER_NUM) + ; ' has already been POSTED to the AS/400! **', ; ' To ENSURE both Systems are in BALANCE ALL CHANGES ' , ; ' MUST be made to BOTH Systems!!!') ELSE //** P3N - 11/11/98 PER ELLEN - REPRINT ORDER WITH EARLIER DATE //** P3N - ALLOW THE INVOICE TO SHOW ON THE SALES REPORT IN THE //** P3N - PROPER PERIOD. IF IDATE_FST > CURDATE //** P3N - 11/11/98 REPLACE IDATE_FST WITH CURDATE //** P3N - 11/11/98 REPLACE ITIME_FST WITH TIME() //** P3N - 11/11/98 ENDIF //** P3N - 11/11/98 CUT_BILLTRAN( (CUR_MAST)->ORDER_NUM , GL_ARR, PARTIAL_INVOICE ) ENDIF ENDIF (CUR_MAST)->(DBUNLOCK()) CLOSE SALEHIST //** P3N - 8/13/98 - ADDRESS POSTING LOCKOUT RETURN .T. ******************************************************************** * //** P3N - 8/5/98 * SUMMARIZE THE BACKORDER SCREENS FOR PRINTING PURPOSES * TO THE ( PRODUCT / ENTRY SIZE ) LEVEL * (IE: ALL C500 / 3050'S) ******************************************************************** FUNCTION SUM_BKO_SCREENS(PASSARR) LOCAL RETARR := {}, I, MSIZE, MPROD, MHOWMEAS, DUPLSCRNS := {}, RARR := {} LOCAL WKARR := {}, SUMQTY := 0, SVARR := {}, SVPRD, SVSIZ, REMOVSCRN := .F. LOCAL BKOARR := ACLONE(PASSARR), SVLINE := '', SVQTY := 0, ELM := 0, SCRTYP := '' FOR I := 1 TO LEN(BKOARR) //** P3N - 1/28/99 SVLINE := BKOARR[I,9] //** P3N - 1/28/99 SVQTY := BKOARR[I,7] //** P3N - 1/28/99 IF AT('UNIT', BKOARR[I,10] ) > 0 .OR. ; //** P3N - 1/28/99 AT('UNT' , BKOARR[I,10] ) > 0 //** P3N - 1/28/99 IF BKOARR[I,8] == 'OL' //** P3N - 1/28/99 SVLINE := BKOARR[I,9] //** P3N - 1/28/99 SVQTY := BKOARR[I,7] //** P3N - 1/28/99 AADD(DUPLSCRNS,{ SVLINE, SVQTY } ) //** P3N - 1/28/99 ENDIF //** P3N - 1/28/99 ENDIF //** P3N - 1/28/99 NEXT //** P3N - 1/28/99 FOR I := 1 TO LEN(BKOARR) //** ORDER QTY SHIPPED QTY IF EMPTY( BKOARR[I,7] - BKOARR[I,11] ) //** NO BACKORDER STUFF TO SUMMARIZE ELSE //** P3N - 1/28/99 - REMOVE DUPLICATE SCREENS FROM BACKORDERS //** P3N - FOR 'UNIT' MODELS WITH FLANKERS REMOVSCRN := .F. //** P3N - 1/28/99 IF BKOARR[I,8] == 'XL' //** P3N - 1/28/99 SVLINE := BKOARR[I,9] //** P3N - 1/28/99 SVQTY := BKOARR[I,7] //** P3N - 1/28/99 ELM := ASCAN(DUPLSCRNS, {|X| X[1] == SVLINE .AND. ; X[2] = SVQTY }) IF EMPTY(ELM) //** P3N - 1/28/99 ELSE //** P3N - 1/28/99 REMOVSCRN := .T. //** P3N - 1/28/99 ENDIF //** P3N - 1/28/99 ENDIF //** P3N - 1/28/99 IF REMOVSCRN //** P3N - 1/28/99 ELSE //** P3N - 1/28/99 MPROD := MPROD_SUMMARY(BKOARR[I,10]) //** PRODUCT CODE MSIZE := BKOARR[I,5,3] //** ENTRY SIZE MHOWMEAS := BKOARR[I,5,4] //** HOW MEASURE IF MHOWMEAS == 'NS' //** P3N - 2/02/99 MSIZE := SUBSTR(MSIZE, 1, 5) //** P3N - 2/02/99 ENDIF //** P3N - 2/02/99 AADD(WKARR, {MPROD,MHOWMEAS+MSIZE, BKOARR[I] } ) ENDIF //** P3N - 1/28/99 ENDIF NEXT IF EMPTY(WKARR) ELSE WKARR := ASORT(WKARR,,, {|X,Y| X[1] + X[2] < Y[1] + Y[2] }) MPROD := WKARR[1,1] MSIZE := WKARR[1,2] SVPRD := MPROD SVSIZ := MSIZE SVARR := {MPROD+MSIZE, WKARR[1,3]} FOR I := 1 TO LEN(WKARR) SCRTYP := WKARR[I,3,8] //** OL/XL - TYPE OF SCREEN MPROD := WKARR[I,1] MSIZE := WKARR[I,2] //**P3N - SUMMARIZE SCREENS TO MODEL LEVEL //** (IE: 500 AND 500SCR (XL) ARE SUMMARIZED TOGETHER) //**IF (SVPRD = MPROD) .AND. (SVSIZ = MSIZE) //** P3N - 1/28/99 IF ((SVPRD = MPROD) .OR. (SCRTYP == 'XL' .AND. AT(SVPRD, MPROD)>0 )) ; //** P3N - 1/28/99 .AND. (SVSIZ = MSIZE) //** P3N - 1/28/99 SUMQTY := SUMQTY + WKARR[I,3,7] LOOP ELSE BKOSCRNS := BKOSCRNS + SUMQTY //** P3N - 8/12/98 (HAPPY BDAY JEFF) ELM := ASCAN(RETARR,{|X| X[1] = MPROD+MSIZE } ) IF EMPTY(ELM) SVARR[2,7] := SUMQTY AADD( RETARR, SVARR) ELSE RETARR[ELM, 2,7] := RETARR[ELM, 2,7] + SUMQTY ENDIF SUMQTY := WKARR[I,3,7] SVPRD := MPROD SVSIZ := MSIZE SVARR := {MPROD+MSIZE, WKARR[I,3]} ENDIF NEXT BKOSCRNS := BKOSCRNS + SUMQTY //** P3N - 8/12/98 (HAPPY BDAY JEFF) ELM := ASCAN(RETARR,{|X| X[1] = MPROD+MSIZE } ) IF EMPTY(ELM) SVARR[2,7] := SUMQTY AADD( RETARR, SVARR) ELSE RETARR[ELM, 2,7] := RETARR[ELM, 2,7] + SUMQTY ENDIF ENDIF FOR I := 1 TO LEN(RETARR) AADD( RARR, RETARR[I, 2]) NEXT RETURN RARR ******************************************************************** //** P3N - 1/29/99 - GET THE SUMMARY CODE FOR SCREEN BACKORDERS //** SUMMARIZE SCREENS TO MODEL LEVEL //** (IE: 500, 500UNIT AND 500SCR ARE ALL SUMMARIZED TOGETHER) ******************************************************************** FUNCTION MPROD_SUMMARY(PPROD) LOCAL MPROD := PPROD, ENDPROD, I LOCAL SUMARR := { 'UNIT', 'UNT', 'SCR', 'SCP','SCF', 'SCA' } FOR I := 1 TO LEN(SUMARR) ENDPROD := AT(SUMARR[I], MPROD) IF EMPTY(ENDPROD) ELSE MPROD := SUBSTR(MPROD,1, ENDPROD-1) EXIT ENDIF NEXT RETURN MPROD ******************************************************************** * HAS THE ORDER BEEN POSTED TO THE AS/400?? * (IE: IS ORDER HISTORY REC POST DATE EMPTY??) ******************************************************************** FUNCTION POSTED_ORDER(MORDER_NUM) LOCAL RETVAL, CLOSEHST := .T., SVSEL := SELECT() IF SELECT('SALEHIST') > 0 //** P3N - 12/3/98 CLOSEHST := .F. //** P3N - 12/3/98 ELSE DBOPEN('SALEHIST') //** P3N - 8/13/98 - ADDRESS POSTING LOCKOUT CLOSEHST := .T. //** P3N - 12/3/98 ENDIF IF SALEHIST->(DBSEEK(MORDER_NUM)) IF EMPTY(SALEHIST->POST_DATE) .AND. EMPTY(SALEHIST->POST_TIME) RETVAL := .F. ELSE RETVAL := .T. ENDIF ELSE RETVAL := .F. ENDIF IF CLOSEHST //** P3N - 12/3/98 CLOSE SALEHIST //** P3N - 12/3/98 ENDIF //** P3N - 12/3/98 SELECT(SVSEL) //** P3N - 12/3/98 RETURN RETVAL ******************************************************************** * GET THE INVOICE SHIP DATE ******************************************************************** FUNCTION GET_INV_SHPDT() LOCAL SV_SCREEN := SAVESCREEN(), SAVESEL := SELECT() SELECT (CUR_MAST) IF EMPTY(INVOICENUM) REC_LOCK(1) REPLACE INVOICENUM WITH ORDER_NUM UNLOCK ENDIF MINVOICENUM := (CUR_MAST)->INVOICENUM MSHIP_DATE := (CUR_MAST)->SHIP_DATE MIDATE_FST := (CUR_MAST)->IDATE_FST IF EMPTY(MIDATE_FST) MIDATE_FST := CURDATE ENDIF @ 5,01 CLEAR TO 22,80 // print all unprinted - ignore ship date pauses // if invoice only DO WHILE .T. @ 11,17 SAY ' Customer :' SETCOLOR(HNOR) @ 11,32 SAY (CUR_MAST)->CUST_ID ; + '-' + (CUR_MAST)->BILL_NAME SETCOLOR(LNOR) @ 13,17 SAY 'Invoice Date :' SETCOLOR(HNOR) @ 13,32 SAY DTOC(MIDATE_FST) SETCOLOR(LNOR) IF MHOME_LOC_CODE = 'IOLA' @ 15,20 SAY 'Invoice # :' + MINVOICENUM + ':' ELSE @ 15,20 SAY 'Invoice # :' + MINVOICENUM + ':' ENDIF @ 17,20 SAY 'Ship Date ' GET MSHIP_DATE READ() IF LASTKEY() = 27 SELECT (SAVESEL) RESTSCREEN(,,,,SV_SCREEN) RETURN .F. ENDIF IF EMPTY(MSHIP_DATE) ERR_BOX('You can NOT ship an Order without a Ship Date !') LOOP ENDIF CORR := CORRCHEK() IF CORR$'N' LOOP ENDIF IF CORR$'X' .OR. LASTKEY() = 27 SELECT (SAVESEL) RESTSCREEN(,,,,SV_SCREEN) RETURN .F. ENDIF SELECT (CUR_MAST) REC_LOCK(3) REPLACE (CUR_MAST)->SHIP_DATE WITH MSHIP_DATE UNLOCK EXIT ENDDO SELECT(SAVESEL) RESTSCREEN(,,,,SV_SCREEN) RETURN .T. ******************************************************************** * GET ALL DATA FOR THE SELECTED ORDER INTO AN ARRAY AND FORMAT THE * ARRAY INTO A FORMAT USABLE FOR PRINTING ******************************************************************** FUNCTION BLD_ORDER( MORDER_NUM, POSTGL, PARTIAL_INVOICE, REPRINT_INVOICE ) LOCAL I, II, OL_ARR := {}, XL_ARR, P1, P2, P3 LOCAL OUT_ARR := { {}, {} }, NUM_ELEM := 8 // FOR NOW! LOCAL M1, M2, M3, NOTAX1, NOTAX2, NOTAX3, SVSEL := SELECT() LOCAL TAX_ARR := STAX_RATE( (CUR_MAST)->TAXSCH ) // GET THE TAX ARRAY LOCAL TAX_DESC := TAX_ARR[3] // DESCRIPTION LOCAL TAX_DET := TAX_ARR[4] // ALL COMPONENTS {RATE, DESC, GL_NUM} LOCAL TOTTAX := 0, CURTAX := 0, PLUG := 0, SAVESEL := SELECT() LOCAL GL312AMT, SHIP_STATE, BILL_STATE, WK_STATE, POST_ORDER := .F. LOCAL SM1 := 0, SM2 := 0, SM3 := 0, IM1 := 0, IM2 := 0, IM3 := 0 LOCAL ST1 := 0, ST2 := 0, ST3 := 0, IT1 := 0, IT2 := 0, IT3 := 0 LOCAL MISC_ARR := {}, MSALE := 0, MISCKEY := '' //** P3N - 12/9/98 LOCAL QTYARR := {}, SHPQTY := 0, INVQTY := 0 //** P3N - 12/9/98 //DEFAULT PARTIAL_INVOICE := .F. //DEFAULT REPRINT_INVOICE := .F. If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) IF PARTIAL_INVOICE = NIL PARTIAL_INOICE := .F. //** P3N -12/7/98 ENDIF //** P3N -12/7/98 IF REPRINT_INVOICE = NIL REPRINT_INVOICE := .F. //** P3N -12/7/98 ENDIF //** P3N -12/7/98 DBOPEN('ORD_SHIP') //** P3N - 5/1/98 IF _WHEREORD == '2' //ORDER ENTRY FROM THE HOTKEY - F7 CLS //CLEAR THE MISC. ITEMS SCREEN BEFORE PRINT MSG'S TITLE := 'Print Order ' + ALLTRIM( (CUR_MAST)->ORDER_NUM) SAYTITLE(TITLE, 'PR020') ENDIF IF EMPTY(POSTGL) //** P3N - 6/5/98 POST_ORDER := .F. //** P3N - 6/5/98 ELSE //** P3N - 6/5/98 POST_ORDER := POSTGL //** P3N - 6/5/98 ENDIF //** P3N - 6/5/98 WAIT_BOX( '*** Processing Order # ' + ALLTRIM(MORDER_NUM), ; '*** Please Wait ****' ) // EXPECTING A 8 ELEMENT ARRAY BACK // 1. entire set of data for a particular line // 1. LOCATION CODE // 2. DESCRIPTION FOR THAT LINE // 3. 60 BYTE ITEM PRINT LINE // 4. SALE PRICE // 5. DISCOUNT AMOUNT // 6. MEMO // 7. QUANTITY // 8. WHERE_FROM (IE: 'OL' / 'XL') // 9. LINE_NUM // 10. PROD_CODE // 11. SHP_QTY //** ORDER SHIPPING TRANSACTION QTY //INITIALIZE THE GL ARRAY GL_ARR := {} //LOAD THE GL ALLOCATION OVERRIDE ARRAY FROM THE GL_ALLOC DBF GL_OVR := GET_GLALLOC(MORDER_NUM) SELECT (CUR_MISC) SEEK MORDER_NUM MTOT := 0 // PRODUCT SALES FROM (CUR_MISC) DO WHILE ORDER_NUM == MORDER_NUM .AND. !EOF() IF EMPTY( (CUR_MISC)->ALT_SPRICE) //** P3N - 2/20/98 MSALE := (CUR_MISC)->SALE_PRICE ELSE M1 := MSALE := (CUR_MISC)->ALT_SPRICE //** P3N-2/20/98 ENDIF MISCKEY := (CUR_MISC)->ORDER_NUM MISCKEY := MISCKEY + (CUR_MISC)->LINE_NUM MISCKEY := MISCKEY + 'MISCITM' QTYARR := GET_OSTQTY(CUR_OL, MISCKEY, PARTIAL_INVOICE, REPRINT_INVOICE) IF EMPTY(QTYARR) //** P3N - 12/9/98 SHPQTY := 0 //** P3N - 12/9/98 INVQTY := 0 //** P3N - 12/9/98 ELSE //** P3N - 12/9/98 SHPQTY := QTYARR[1] //** P3N - 12/9/98 INVQTY := QTYARR[2] //** P3N - 12/9/98 ENDIF //** P3N - 12/9/98 IF PARTIAL_INVOICE //** P3N - 12/9/98 M1 := SHPQTY * MSALE //** P3N - 12/9/98 ELSEIF REPRINT_INVOICE //** P3N - 12/9/98 M1 := INVQTY * MSALE //** P3N - 12/9/98 ELSE //** P3N - 12/9/98 M1 := (CUR_MISC)->QUANTITY * MSALE ENDIF MISC_ITEMS->(DBSEEK ( (CUR_MISC)->PARTNUM )) ELEM := ASCAN(GL_ARR, {|X| X[1] = MISC_ITEMS->GL_NUM } ) IF ELEM > 0 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( M1 ) ELSE AADD(GL_ARR, { MISC_ITEMS->GL_NUM , M1 } ) ENDIF MTOT := MTOT + M1 SKIP 1 ENDDO SELECT (CUR_MAST) ************************************************************* * Capture the Installation amount paid per order ************************************************************* GL312AMT := (CUR_MAST)->INST_PAID IF GL312AMT <> 0 ELEM := ASCAN(GL_ARR, {|X| X[1] = '312 '} ) IF ELEM > 0 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+ GL312AMT ELSE // EXCLUDE FROM TAX ALLOC AADD(GL_ARR, {'312 ', GL312AMT, ,'X' } ) ENDIF ENDIF ************************************************************* * Capture the MISC ITEMS FROM SCREEN 2115 ************************************************************* MISC_ARR := GETQTYMISC(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) FOR I := 1 TO LEN(MISC_ARR[1]) IF MISC_ARR[1,I,5] == 'ORDMISC1' SM1 := MISC_ARR[1,I,3] //** SHIP QTY IM1 := MISC_ARR[1,I,6] //** INV QTY ELSEIF MISC_ARR[1,I,5] == 'ORDMISC2' SM2 := MISC_ARR[1,I,3] //** SHIP QTY IM2 := MISC_ARR[1,I,6] //** INV QTY ELSEIF MISC_ARR[1,I,5] == 'ORDMISC3' SM3 := MISC_ARR[1,I,3] //** SHIP QTY IM3 := MISC_ARR[1,I,6] //** INV QTY ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX1' ST1 := MISC_ARR[1,I,3] //** SHIP QTY IT1 := MISC_ARR[1,I,6] //** INV QTY ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX2' ST2 := MISC_ARR[1,I,3] //** SHIP OR INV QTY IT2 := MISC_ARR[1,I,6] //** INV QTY ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX3' ST3 := MISC_ARR[1,I,3] //** SHIP OR INV QTY IT3 := MISC_ARR[1,I,6] //** INV QTY ENDIF NEXT IF PARTIAL_INVOICE //** SHIPPED QTYS M1 := SM1 * (CUR_MAST)->MISC_AMT1 M2 := SM2 * (CUR_MAST)->MISC_AMT2 M3 := SM3 * (CUR_MAST)->MISC_AMT3 ELSEIF REPRINT_INVOICE //** INVOICED QTYS M1 := IM1 * (CUR_MAST)->MISC_AMT1 M2 := IM2 * (CUR_MAST)->MISC_AMT2 M3 := IM3 * (CUR_MAST)->MISC_AMT3 ELSE M1 := (CUR_MAST)->MISC_QTY1 * (CUR_MAST)->MISC_AMT1 M2 := (CUR_MAST)->MISC_QTY2 * (CUR_MAST)->MISC_AMT2 M3 := (CUR_MAST)->MISC_QTY3 * (CUR_MAST)->MISC_AMT3 ENDIF MTOT := MTOT + M1 + M2 + M3 IF M1 <> 0 ELEM := ASCAN(GL_ARR, {|X| X[1] = MISC_GL1} ) IF ELEM > 0 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( M1 ) ELSE AADD(GL_ARR, { MISC_GL1, M1 } ) ENDIF ENDIF IF M2 <> 0 ELEM := ASCAN(GL_ARR, {|X| X[1] = MISC_GL2} ) IF ELEM > 0 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( M2 ) ELSE AADD(GL_ARR, { MISC_GL2, M2 } ) ENDIF ENDIF IF M3 <> 0 ELEM := ASCAN(GL_ARR, {|X| X[1] = MISC_GL3} ) IF ELEM > 0 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( M3 ) ELSE AADD(GL_ARR, { MISC_GL3, M3 } ) ENDIF ENDIF ************************************************************* * Capture the NON-TAX ITEMS FROM SCREEN 2115 * Perry Nichols 7/31/97 ************************************************************* IF PARTIAL_INVOICE //** SHIPPED QTYS NOTAX1 := ST1 * (CUR_MAST)->NOTX_AMT1 NOTAX2 := ST2 * (CUR_MAST)->NOTX_AMT2 NOTAX3 := ST3 * (CUR_MAST)->NOTX_AMT3 ELSEIF REPRINT_INVOICE //** INVOICED QTYS NOTAX1 := IT1 * (CUR_MAST)->NOTX_AMT1 NOTAX2 := IT2 * (CUR_MAST)->NOTX_AMT2 NOTAX3 := IT3 * (CUR_MAST)->NOTX_AMT3 ELSE NOTAX1 := (CUR_MAST)->NOTX_QTY1 * (CUR_MAST)->NOTX_AMT1 NOTAX2 := (CUR_MAST)->NOTX_QTY2 * (CUR_MAST)->NOTX_AMT2 NOTAX3 := (CUR_MAST)->NOTX_QTY3 * (CUR_MAST)->NOTX_AMT3 ENDIF IF NOTAX1 <> 0 ELEM := ASCAN(GL_ARR, {|X| X[1] = NOTX_GL1} ) IF ELEM > 0 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( NOTAX1 ) ELSE // EXCLUDE FROM TAX ALLOC AADD(GL_ARR, { NOTX_GL1, NOTAX1,,'X' } ) ENDIF ENDIF IF NOTAX2 <> 0 ELEM := ASCAN(GL_ARR, {|X| X[1] = NOTX_GL2} ) IF ELEM > 0 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( NOTAX2 ) ELSE // EXCLUDE FROM TAX ALLOC AADD(GL_ARR, { NOTX_GL2, NOTAX2,,'X' } ) ENDIF ENDIF IF NOTAX3 <> 0 ELEM := ASCAN(GL_ARR, {|X| X[1] = NOTX_GL3} ) IF ELEM > 0 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( NOTAX3 ) ELSE // EXCLUDE FROM TAX ALLOC AADD(GL_ARR, { NOTX_GL3, NOTAX3,,'X' } ) ENDIF ENDIF SELECT (SAVESEL) IF TAX_ARR[2] <> 0 // TOTAL RATE FOR I := 1 TO LEN(TAX_DET) CURTAX := VAL(STR(TAX_DET[I,1] * ; ( (CUR_MAST)->ORD_L_TTL - ; (CUR_MAST)->ORD_BO_TTL - ; //** P3N - 11/19/98 (CUR_MAST)->ORD_D_TTL + MTOT), 9, 2)) CURTAX := MIN( (CUR_MAST)->SALES_TAX - TOTTAX, CURTAX) IF CURTAX <> 0 // GL ACCT# TAXAMT TAX DESC EXCLUDE FROM ALLOC. AADD(GL_ARR, { TAX_DET[I,3] + ' ', CURTAX, TAX_DET[I,2], 'X' } ) TOTTAX := TOTTAX + CURTAX ENDIF NEXT // IS THE PLUG AMOUNT BASED ON THE total or the quote? IF TOTTAX <> (CUR_MAST)->SALES_TAX PLUG := (CUR_MAST)->SALES_TAX - TOTTAX IF LEN(GL_ARR) > 0 //** P3N - 01/14/09 GL_ARR[LEN(GL_ARR),2] := GL_ARR[LEN(GL_ARR),2] + PLUG ENDIF ENDIF ENDIF IF (CUR_MAST)->( FIELDPOS('FREIGHT') ) > 0 IF (CUR_MAST)->FREIGHT <> 0 //EXCLUDE FROM TAX - ALLOC. AADD(GL_ARR, { 'FREIGHT', (CUR_MAST)->FREIGHT, , 'X' } ) ENDIF ENDIF IF POST_ORDER //** BUILD THE GL_ARR FOR POSTING - NO NEED TO GET_ORD_DATA()! ELSE OL_ARR := GET_ORD_DATA(MORDER_NUM, CUR_OL, PARTIAL_INVOICE, REPRINT_INVOICE) SELECT (CUR_XL) DONSETORD(3) // ORDER + LINE# XL_ARR := GET_ORD_DATA(MORDER_NUM, CUR_XL, PARTIAL_INVOICE, REPRINT_INVOICE) SELECT (CUR_XL) DONSETORD(1) * DISECT THE OL_ARR AND PUT THE CTRL, FRAME, GLASS, SASH, INV * STUFF INTO THE OUT_ARR IN THE PROPER HIERARCHY * NOTICE, EACH ELEMENT OF THE OL_ARR IS SIMPLY AN 80 BYTE TEXT PRINT LINE FOR I = 1 TO LEN(OL_ARR) IF I = 7 // customer invoice copy AADD(OUT_ARR[2], OL_ARR[I]) // 8 ELEMENT ARRAY WITH LOC_CODE, HEADING, ITEM, ELSE // GROSS SALE PRICE, DISCOUNT AMT AADD(OUT_ARR[1], OL_ARR[I]) ENDIF NEXT FOR I = 1 TO LEN(XL_ARR) IF I = 7 // customer invoice copy // NO XL ITEMS ON CUSTOMER COPIES // 8 ELEMENT ARRAY WITH LOC_CODE, HEADING, ITEM, ELSE // GROSS SALE PRICE, DISCOUNT AMT FOR II := 1 TO LEN(XL_ARR[I]) IF I < 7 AADD(OUT_ARR[1,I], XL_ARR[I, II]) ELSE AADD(OUT_ARR[1,I-1], XL_ARR[I, II]) ENDIF NEXT ENDIF NEXT //* SORT SUB ARRAY'S IN LINE_NUM + OL/XL + PROD_CODE FOR PRINTING //* (IE: SUB ARRAY'S ARE - CTRL, FRAME, SASH, GLASS, SCREEN, STORM) // IF A SEQUENCE NUMBER, PUT THAT ONE AT THE BOTTOM OR SOMETHING ///***///***///***\\\***\\\***\\\ FOR I := 1 TO LEN(OUT_ARR[1]) * OUT_ARR[1,I] := ASORT(OUT_ARR[1,I],,, {|X,Y| X[9] + X[8] + X[10] < Y[9] + Y[8] + Y[10] }) IF EMPTY(OUT_ARR[1,I]) //** P3N - 5/17/99 ELSE //** P3N - 5/17/99 OUT_ARR[1,I] := ASORT(OUT_ARR[1,I],,, {|X,Y| X[2] + X[9] < Y[2] + Y[9] }) ENDIF //** P3N - 5/17/99 NEXT // INVOICE PARTS OUT_ARR[2,1] := ASORT(OUT_ARR[2,1],,, {|X,Y| X[2] + X[9] < Y[2] + Y[9] }) ENDIF //**IF (CUR_MAST)->TERMS = '90' .OR. ; //** NO CHARGE //**P3N - 6/16/98 //** (CUR_MAST)->TERMS = '96' //** CANCELLATION //**P3N - 6/16/98 IF ZERO_ORDER() //** NO CHARGE //**P3N - 3/05/99 GL_ARR := {} //** P3N - 6/16/98 FORCE GL ALLOC. TO ZERO GL_OVR := {} //** P3N - 6/16/98 FORCE GL ALLOC. TO ZERO ENDIF IF EMPTY(OUT_ARR[1]) .AND. EMPTY(OUT_ARR[2]) RETURN {} ELSE RETURN OUT_ARR ENDIF ***************************************************************** * CALC TOTAL MISC ITEMS / NOTX ITEMS ***************************************************************** FUNCTION CALC_TOTMISC( CUR_MAST , MORDER_NUM, INCLD_NOTX) LOCAL RETVAL := ( (CUR_MAST)->MISC_QTY1 * (CUR_MAST)->MISC_AMT1 ) ; + ( (CUR_MAST)->MISC_QTY2 * (CUR_MAST)->MISC_AMT2 ) ; + ( (CUR_MAST)->MISC_QTY3 * (CUR_MAST)->MISC_AMT3 ) ; + (CUR_MAST)->ORD_M_TTL IF EMPTY(INCLD_NOTX) //** P3N - 1/11/99 ELSEIF INCLD_NOTX //** P3N - 1/11/99 RETVAL := RETVAL + ( (CUR_MAST)->NOTX_QTY1 * (CUR_MAST)->NOTX_AMT1 ) ; + ( (CUR_MAST)->NOTX_QTY2 * (CUR_MAST)->NOTX_AMT2 ) ; + ( (CUR_MAST)->NOTX_QTY3 * (CUR_MAST)->NOTX_AMT3 ) ENDIF //** P3N - 1/11/99 RETURN RETVAL //** P3N - 1/11/99 ***************************************************************** * GET THE GL ALLOCATIONS FOR A GIVEN ORDER! IF NONE EXIST RET EMPTY ARRAY ***************************************************************** FUNCTION GET_GLALLOC(MORDER_NUM) //** GL_ARR-1 = GL_NUM //** GL_ARR-2 = GL_AMT //** GL_ARR-3 = GL_TAX_DESC //** GL_ARR-4 = GL_TAX_IND - "X" EXCLUDE FROM TAX ALLOC //** "I" INCLUDE IN TAX ALLOC //** "P" PRODUCT ALLOCATION LOCAL RET_ARR := {}, GL_AMT LOCAL SV_SEL := SELECT() DBOPEN('GL_ALLOC') IF DBSEEK(MORDER_NUM) DO WHILE .T. IF GL_ALLOC->(EOF()) EXIT ENDIF IF GL_ALLOC->ORDER_NUM == MORDER_NUM GL_AMT := AMOUNT + ADJ_AMT AADD(RET_ARR, {GL_NUM, GL_AMT, TAX_DESC, TAX_ALLOC}) ELSE EXIT ENDIF DBSKIP(+1) ENDDO ENDIF USE SELECT(SV_SEL) RETURN RET_ARR ***************************************************************** * PRINT COMPLETE ORDER-(IE: PROD CTRL, OR PROD FRAME, OR PROD SASH...) ***************************************************************** FUNCTION PRNT_THE_ORDER(WHCHORDER, PRN_ARR, WHICH_TYPE, WHCH_LOCATION, ; SUBTYPE, DO_CUT_SPECS, PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) LOCAL MORDER_NUM := (CUR_MAST)->ORDER_NUM, I, LI_TOTALS := 0, ELM LOCAL DO_LINES := .T., PAMTS := {}, III, WORKARR := {} LOCAL LI_AMTDON, LASTDESC, TOTPRNT := 0, SUBPRNT := 0, NUMPRNT := 0 LOCAL NUMBRK := 0, THESE_ITEMS := 0, LAST_PAMT, THIS_NUM, DIDFST := .F. LOCAL PHEAD_ARR := {}, PRT_AMT := .F., BKOMODEL, LASTBKOM LOCAL PBODY_ARR := {}, LASTMODEL, DISC_ARR, PAMTS_ARR := {}, PTAIL_ARR := {} LOCAL RETARR := {}, NUMX := 0, PRT_GL_INFO LOCAL L1:=0, L2:=0, L3:=0, M1:=0, M2:=0, M3:=0, MTOT:=0, PRINTFRAME := .F. LOCAL B1:=0, B2:=0, B3:=0, S1:=0, S2:=0, S3:=0, A1:=0, A2:=0, A3:=0, STOT := 0 LOCAL I1:=0, I2:=0, I3:=0, ITOT := 0, INCL_ALL_LINES, RET_ARR, PRT_DISC_ARR LOCAL CNT_LI_DISC := 0, LI_DISC_PRNT := .F., WORKPRICE := 0 LOCAL MISCITM_OSTQTY := 0, MISC_ARR := {}, PRT_BO := .F., SUPPRESS_TOT := .F. LOCAL MPORT PRIVATE FORMTYPE := GET_FORMTYPE(WHCHORDER, WHICH_TYPE, SUBTYPE) //DEFAULT PARTIAL_INVOICE := .F. //DEFAULT REPRINT_INVOICE := .F. If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) IF EMPTY(REPRINT_INVOICE) //** P3N - 12/3/98 REPRINT_INVOICE := .F. //** P3N - 12/3/98 ENDIF //** P3N - 12/3/98 IF EMPTY(PARTIAL_INVOICE) //** P3N - 11/13/98 PARTIAL_INVOICE := .F. //** P3N - 11/13/98 ENDIF //** P3N - 11/13/98 IF DO_CUT_SPECS = NIL DO_CUT_SPECS := .F. ENDIF /* ************************************************************ 1. WHCHORDER - TELLS WHETHER INVOICE/PRODUCTION/ORDER DESK (DEFINES WHAT COPIES TO PRINT) 2. PRN_ARR - TELLS WHAT IS AVAIL TO PRINT IN THE LINE ITEM BODY 3. WHICH_TYPE- TELLS WHAT HEADING TO PRINT ON THE ORDER HEADING 4. WHCH_LOCAT- TELLS WHICH LOCATION WE ARE CONCERNED WITH 1. "ALL" MEANS PRINT EVERYTHING IN THE PRN_ARR THIS IS SENT FOR "ORDER CONTROL COPY" AND "CUSTOMER INVOICES" 2. IF NOT "ALL", IT WILL REPRESENT A SPECIFIC LOCATION CODE -IF THE CODE IS THE MHOME_LOC_CODE, THE ORDER WILL FILTER OUT ONLY ITEMS TO BE PRODUCED ON THE FRAME, SASH, GLASS,STORMS COPY -IF THE CODE IS !MHOME_LOC_CODE, THE ORDER WILL PRINT AS A "INTERCOMPANY PURCHASE ORDER" CTRL DATA. DON'T WORRY ABOUT IT, JUST FYI. WHICH_TYPE WILL BE "PO" OR "MANIFEST", ETC. THE PRN_ARR WILL ALREADY CONTAIN THE "CTRL" INFO SINCE THAT DATA CAN ALSO BE USED AS PURCHASE ORDER LINE DATA. 5. SUBTYPE - TELLS IF IT IS AN ORDER DESK DELIVERY COPY 6. DO_CUT_SPECS - TELLS IF WE SHOULD PRINT ITEMS FROM THE CUT_SPEC_ARR ( CURRENTLY ONLY DONE ON FRAME COPY ) ************************************************************ */ (CUR_MAST)->(DBSEEK(MORDER_NUM)) //**IF EMPTY(PRN_ARR) .AND. EMPTY( (CUR_MAST)->NOTES ) IF EMPTY(PRN_ARR) //** P3N - 12/2/98 CHECK FOR MISC ITEMS BACKORDERED IF ( WHCHORDER == 'BACKORD' .AND. SUBTYPE == 'BACKORD' ) IF EMPTY((CUR_MAST)->ORDER_NEW) //** P3N - 12/9/98 ELSE RETURN //** PARTIAL INVOICE - NO BACKORDER ENDIF IF EMPTY( CALC_TOTMISC( CUR_MAST, MORDER_NUM,.T.) ) //** P3N - 1/11/99 RETURN //** P3N - 1/11/99 ENDIF //** P3N - 1/11/99 ELSEIF WHCHORDER == 'INV' IF MISCSHIPPED(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) RETURN ENDIF ELSEIF EMPTY( (CUR_MAST)->NOTES ) RETURN ENDIF ENDIF IF EMPTY(WIDEON) SET_P_OFF() ERR_BOX('Printer is NOT properly set!',' ', ; 'Please SETUP Printer through Utility MENU - PRINTER Selection!' ) RETURN ENDIF IF WHCH_LOCATION = NIL ? ABEND ENDIF // SCAN THE BODY OF THE ORDER TO ENSURE THAT A LOCATION ITEM EXISTS HERE // IF NOT 'ALL' ITEMS IF WHCHORDER = 'PROD' .OR. WHCHORDER = 'OD' DO CASE CASE WHICH_TYPE = 'CTRL' DO_LINES := .T. OTHERWISE DO_LINES := SCAN_PRNARR(PRN_ARR, WHCH_LOCATION) ENDCASE IF WHICH_TYPE == 'SCREEN' DO_LINES := .T. // DO SCREEN regardless of the MFG. location. ENDIF ELSE DO_LINES := .T. ENDIF // SO FAR, HAVE DATA FOR THIS LOCATION // SCAN THE BODY OF THE ORDER TO ENSURE THAT QTY > 0 (NOT CREDIT MEMO) // IF NOT 'ALL' ITEMS //**TOTMISC := CALC_TOTMISC( CUR_MAST, MORDER_NUM ) TOTMISC := CALC_TOTMISC( CUR_MAST, MORDER_NUM , .T.) //** P3N - 1/11/99 IF !EMPTY( (CUR_MAST)->NOTES ) DO_LINES := .T. ENDIF IF WHCHORDER <> 'INV' .AND. DO_LINES IF TOTMISC <> 0 .AND. ; (SUBTYPE = 'DELIVERY' .OR. SUBTYPE = 'ORDERDESK' ) //** P3N - 1/15/99 //** (SUBTYPE = 'DELIVERY' .OR. SUBTYPE = 'ORDERDESK' .OR. SUBTYPE = 'BACKORD') ELSEIF !EMPTY(TOTMISC) .AND. SUBTYPE = 'BACKORD' //** P3N - 1/15/99 IF MISCSHIPPED(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) //** P3N - 1/15/99 CHECK FOR MISC ORDER LINES ITEMS ON BACKORDER MISC_ARR := BLD_MISCORD('TORD_LINES', {}, {}, 0, ; .F., .F., .F., WHCHORDER, , , .T., SUBTYPE ) IF EMPTY(MISC_ARR[4]) //** P3N - 1/15/99 DO_LINES := .F. //** P3N - 12/04/01 FOR I := 1 TO LEN(PRN_ARR) //** P3N - 12/04/01 // DO BKO COPY IF NO MISC BUT BKO QTY > 0 IF PRN_ARR[I,7] > 0 .OR. !EMPTY(PRN_ARR[I,13]) //** ONLY PRINT BKO IF QTY > 0 DO_LINES := .T. //** OR CUT SPECS EXIT //** P3N - 12/04/01 ENDIF //** P3N - 12/04/01 NEXT //** P3N - 12/04/01 IF DO_LINES //** P3N - 12/04/01 //** NO MISC BKO ITMS BUT WE HAVE OTHER BKO ITEMS TO PROCESS ELSE //** P3N - 12/04/01 RETURN //** P3N - 12/04/01 ENDIF //** P3N - 12/04/01 ENDIF //** P3N - 1/15/99 ENDIF //** P3N - 1/15/99 ELSE //** P3N - 1/15/99 DO_LINES := .F. FOR I := 1 TO LEN(PRN_ARR) // ONLY PRINT PRODUCTION,ETC IF QTY > 0 IF PRN_ARR[I,7] > 0 .OR. !EMPTY(PRN_ARR[I,13]) // ONLY PRINT PRODUCTION,ETC IF QTY > 0 DO_LINES := .T. // NOT A CREDIT MEMO OR CUT SPECS EXIT ENDIF NEXT ENDIF ENDIF IF !DO_LINES RETURN ENDIF // INVOICE SHOULD NOT PRINT ANY ITEMS // WHICH CAME FROM THE 'ADDL_LINES' FILE. // ARE THERE ANY PRODUCTION ITEMS TO PRINT AT THIS LOCATION ??? IF WHCHORDER == 'PROD' .AND. WHICH_TYPE <> 'CTRL' IF EMPTY(ASCAN(PRN_ARR,{|X| X[1] == WHCH_LOCATION })) RETURN ENDIF ENDIF // ARE THERE ANY IC ORDER ITEMS TO PRINT AT THIS LOCATION ??? IF WHCHORDER == 'OD' .AND. WHICH_TYPE == 'PO' IF EMPTY(ASCAN(PRN_ARR,{|X| X[1] == WHCH_LOCATION })) RETURN ENDIF ENDIF // ARE THERE ANY PRODUCTION FRAME ITEMS TO PRINT ??? IF AT('FRAME', WHICH_TYPE) > 0 FOR I := 1 TO LEN(PRN_ARR) IF PRT_FRAME(WHICH_TYPE, PRN_ARR[I,10]) PRINTFRAME := .T. ENDIF NEXT IF PRINTFRAME // FRAME COPY FOUND TO PRINT - CONTINUE PROCESSING! ELSE RETURN ENDIF ENDIF PHEAD_ARR := BLD_HEAD(MORDER_NUM, WHICH_TYPE, WHCH_LOCATION, ; WHCHORDER, SUBTYPE ) IF (WHICH_TYPE == 'INV' .AND. CUR_MAST == 'ORD_MAST') .OR. ; //**P3N - 11/24/98 WHICH_TYPE == 'BACKORD' //**P3N - 2/23/99 //** P3N -11/19/98 - INVOICE PROCESSING? IF EMPTY((CUR_MAST)->ORDER_ORG) //** P3N -11/19/98 THIS ORDER WAS NOT CREATED FROM A PARTIAL INVOICE? ELSE DIDFST := .T. //** THIS ORDER WAS CREATED FROM A PARTIAL INVOICE? AADD(PBODY_ARR, '^' + SPACE(14) + 'BACKORDER FROM ORDER# ' + (CUR_MAST)->ORDER_ORG ) AADD(PAMTS_ARR, NIL) ENDIF IF EMPTY((CUR_MAST)->ORDER_NEW) //** P3N -11/19/98 THIS ORDER IS NOT A PARTIAL INVOICE? ELSE DIDFST := .T. //** THIS ORDER IS A PARTIAL INVOICE? AADD(PBODY_ARR, '^' + SPACE(14) + 'BACKORDERED ITEMS ON ORDER# ' + (CUR_MAST)->ORDER_NEW ) AADD(PAMTS_ARR, NIL) ENDIF ENDIF // ONCE FOR EACH LINE ITEM RECORD LAST_PAMT := 0 FOR I := 1 TO LEN(PRN_ARR) IF EMPTY(PRN_ARR[I,2]) LOOP ENDIF //** IF THIS IS A FRAME COPY ARE THERE ANY STORM DOORS(STD) OR PIN-ONS(PWS)? IF AT('FRAME', WHICH_TYPE) > 0 IF PRT_FRAME(WHICH_TYPE, PRN_ARR[I,10]) ELSE LOOP ENDIF ENDIF INCL_ALL_LINES := .T. IF (WHICH_TYPE == 'INV' .OR. WHICH_TYPE == 'CTRL') .AND. WHCHORDER <> 'PROD' //** LET INVOICE AND CTRL COPIES PRINT REGARDLESS OF MFG. LOC ELSEIF WHCHORDER == 'BACKORD' //** P3N - 5/1/98 - LET BACKORDERS PRINT REGARDLESS OF MFG. LOC ELSEIF PRN_ARR[I,1] == WHCH_LOCATION // FOR ALL COPIES EXCEPT "INV" & "CTRL" // ONLY PRINT ITEMS FOR GIVEN LOCATION ELSEIF PRN_ARR[I,15] //DO_SCRNS_ONLY regardless of the MFG location IF MHOME_LOC_CODE = 'KC' //FOR KANSAS CITY(KC) ONLY !!!!!!! 6-18-97 LOOP ENDIF ELSEIF WHICH_TYPE == 'CTRL' .AND. WHCHORDER == 'PROD' INCL_ALL_LINES := .T. ELSE LOOP ENDIF IF LASTDESC = NIL LASTDESC := PRN_ARR[I,2] ENDIF IF EMPTY(LASTMODEL) LASTMODEL := PRN_ARR[I,10] //SAVE THE PRODUCT MODEL LASTBKOM := MPROD_SUMMARY(LASTMODEL) //** P3N - 2/02/99 ENDIF BKOMODEL := MPROD_SUMMARY(PRN_ARR[I,10]) //** P3N - 2/02/99 //** DISCOUNT MODIFICATIONS - 10-7-97 IF (WHICH_TYPE == 'INV' .OR. WHICH_TYPE == 'CTRL') IF LASTMODEL == PRN_ARR[I,10] ELSEIF PRINT_DISC(PRN_ARR, LASTMODEL) //PRINT A DISCOUNT% DISC_ARR := GETDISCTOT(PRN_ARR, I-1) PRT_DISC_ARR := PRNT_DISCOUNTS( DISC_ARR, WHCHORDER, SUBTYPE) FOR ELM := 1 TO LEN(PRT_DISC_ARR) AADD(PBODY_ARR, PRT_DISC_ARR[ELM] ) AADD(PAMTS_ARR, {}) CNT_LI_DISC := CNT_LI_DISC + 1 NEXT ENDIF ENDIF //** P3N - 2/02/99 IF ( INCL_ALL_LINES .AND. !(LASTBKOM == BKOMODEL) .AND. ; //** P3N - 2/02/99 WHCHORDER == 'BACKORD' .AND. SUBTYPE == 'SCREENS' ) //** P3N - 2/02/99 NUMBRK ++ IF NUMPRNT > 1 .AND. MHOME_LOC_CODE <> 'IOLA' ; // DARLENE 8-21-96 .AND. MHOME_LOC_CODE <> 'LINDS' // LINDA 8-23-96 IF WHCHORDER == 'BACKORD' //** P3N - 9/22/98 HAPPY BDAY CINDY IF MHOME_LOC_CODE = 'PAWNEE' //** P3N 2-23-99 AADD(PBODY_ARR,SPACE(5)+'-----') //** P3N - 2/23/99 AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 AADD(PBODY_ARR,SPACE(5)+STR(SUBPRNT,4)) AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 ELSE //** P3N - 2/23/99 AADD(PBODY_ARR,SPACE(9)+'-----') //** P3N - 9/22/98 HAPPY BDAY CINDY AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY AADD(PBODY_ARR,SPACE(9)+STR(SUBPRNT,4)) AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY ENDIF //** P3N - 2/23/99 ELSE //** P3N - 9/22/98 HAPPY BDAY CINDY AADD(PBODY_ARR, '-----' ) AADD(PAMTS_ARR, {}) AADD(PBODY_ARR, STR(SUBPRNT,4) ) AADD(PAMTS_ARR, {}) AADD(PBODY_ARR, '-----' ) AADD(PAMTS_ARR, {}) ENDIF //** P3N - 9/22/98 HAPPY BDAY CINDY ENDIF SUBPRNT := 0 NUMPRNT := 0 //**IF !(LASTDESC == PRN_ARR[I,2]) .AND. INCL_ALL_LINES ELSEIF ( INCL_ALL_LINES .AND. !(LASTDESC == PRN_ARR[I,2]) .AND. ; (WHCHORDER == 'BACKORD' .AND. SUBTYPE <> 'SCREENS' .OR. ; //** P3N - 2/02/99 WHCHORDER <> 'BACKORD' ) ) //** P3N - 2/02/99 NUMBRK ++ IF NUMPRNT > 1 .AND. MHOME_LOC_CODE <> 'IOLA' ; // DARLENE 8-21-96 .AND. MHOME_LOC_CODE <> 'LINDS' // LINDA 8-23-96 IF WHCHORDER == 'BACKORD' //** P3N - 9/22/98 HAPPY BDAY CINDY IF MHOME_LOC_CODE = 'PAWNEE' //** P3N 2-23-99 AADD(PBODY_ARR,SPACE(5)+'-----') //** P3N - 2/23/99 AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 AADD(PBODY_ARR,SPACE(5)+STR(SUBPRNT,4)) AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 ELSE //** P3N - 2/23/99 AADD(PBODY_ARR,SPACE(9)+'-----') //** P3N - 9/22/98 HAPPY BDAY CINDY AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY AADD(PBODY_ARR,SPACE(9)+STR(SUBPRNT,4)) AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY ENDIF //** P3N - 2/23/99 ELSE //** P3N - 9/22/98 HAPPY BDAY CINDY AADD(PBODY_ARR, '-----' ) AADD(PAMTS_ARR, {}) AADD(PBODY_ARR, STR(SUBPRNT,4) ) AADD(PAMTS_ARR, {}) AADD(PBODY_ARR, '-----' ) AADD(PAMTS_ARR, {}) ENDIF //** P3N - 9/22/98 HAPPY BDAY CINDY ENDIF SUBPRNT := 0 NUMPRNT := 0 ENDIF RETARR := BLD_BODY(PRN_ARR[I], WHICH_TYPE, WHCH_LOCATION, ; PBODY_ARR, PAMTS_ARR, WHCHORDER, SUBTYPE, ; INCL_ALL_LINES, DO_CUT_SPECS, PARTIAL_INVOICE, REPRINT_INVOICE ) LI_AMTDON := RETARR[1] PBODY_ARR := RETARR[2] PAMTS_ARR := RETARR[3] IF INCL_ALL_LINES LI_TOTALS := LI_TOTALS + LI_AMTDON NUMX := PRN_ARR[I,12] + 1 // TOTAL WINDOWS PER UNIT (XTRA WIND + 1) // LINE ITEM QUANTITY LAST_PAMT ++ THIS_NUM := 0 FOR III := LAST_PAMT TO LEN(PAMTS_ARR) IF WHCHORDER == 'BACKORD' //** P3N - 9/22/98 HAPPY BDAY CINDY IF EMPTY(PAMTS_ARR[III]) //** P3N - 9/22/98 HAPPY BDAY CINDY ELSEIF EMPTY(PAMTS_ARR[III,3]) ELSE THIS_NUM := THIS_NUM + (PAMTS_ARR[III,3]) ENDIF ELSE IF EMPTY(PAMTS_ARR[III]) ELSEIF EMPTY(PAMTS_ARR[III,1]) ELSE THIS_NUM := THIS_NUM + (PAMTS_ARR[III,1]) ENDIF ENDIF NEXT LAST_PAMT := LEN(PAMTS_ARR) NUMPRNT := NUMPRNT + THIS_NUM // ACTUAL WINDOWS QUANTITY ( 1 TWIN = 2 WINDOWS TOTAL ) SUBPRNT := SUBPRNT + (THIS_NUM * NUMX) TOTPRNT := TOTPRNT + (THIS_NUM * NUMX) ENDIF LASTDESC := PRN_ARR[I,2] LASTMODEL := PRN_ARR[I,10] //SAVE THE PRODUCT MODEL - 10-7-97 LASTBKOM := BKOMODEL //** P3N - 2/02/99 NEXT //** DISCOUNT MODIFICATIONS - 10-7-97 IF (WHICH_TYPE == 'INV' .OR. WHICH_TYPE == 'CTRL') IF PRINT_DISC(PRN_ARR, LASTMODEL) //PRINT A DISCOUNT% DISC_ARR := GETDISCTOT(PRN_ARR, I-1) PRT_DISC_ARR := PRNT_DISCOUNTS( DISC_ARR, WHCHORDER, SUBTYPE) FOR ELM := 1 TO LEN(PRT_DISC_ARR) AADD(PBODY_ARR, PRT_DISC_ARR[ELM] ) AADD(PAMTS_ARR, {}) CNT_LI_DISC := CNT_LI_DISC + 1 NEXT ENDIF ENDIF IF NUMPRNT > 1 .AND. SUBPRNT <> 0 .AND. MHOME_LOC_CODE <> 'IOLA' ; // DARLENE 8-21-96 .AND. MHOME_LOC_CODE <> 'LINDS' // LINDA 8-23-96 IF WHCHORDER == 'BACKORD' //** P3N - 9/22/98 HAPPY BDAY CINDY IF MHOME_LOC_CODE = 'PAWNEE' //** P3N 2-23-99 AADD(PBODY_ARR,SPACE(5)+'-----') //** P3N - 2/23/99 AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 AADD(PBODY_ARR,SPACE(5)+STR(SUBPRNT,4)) AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 ELSE //** P3N - 2/23/99 AADD(PBODY_ARR,SPACE(9)+'-----') //** P3N - 9/22/98 HAPPY BDAY CINDY AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY AADD(PBODY_ARR,SPACE(9)+STR(SUBPRNT,4)) AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY ENDIF //** P3N - 2/23/99 ELSE //** P3N - 9/22/98 HAPPY BDAY CINDY AADD(PBODY_ARR, '-----' ) AADD(PAMTS_ARR, {}) AADD(PBODY_ARR, STR(SUBPRNT,4) ) AADD(PAMTS_ARR, {}) ENDIF //** P3N - 9/22/98 HAPPY BDAY CINDY NUMBRK ++ ENDIF // MISC PRINTING IF WHCHORDER = 'BACKORD' .AND. SUBTYPE == 'BACKORD' //** P3N - 7/7/98 PRT_BO := .T. //** P3N - 9/24/98 //** ORDER MISC(CGW0OMI) MISC ORDER LINE ITEMS BO PRINT MISC_ARR := BLD_MISCORD('TORD_LINES', PBODY_ARR, PAMTS_ARR, LI_TOTALS, ; PRT_AMT, DIDFST, PRT_BO, WHCHORDER, ; PARTIAL_INVOICE, REPRINT_INVOICE, ,SUBTYPE ) PBODY_ARR := MISC_ARR[1] PAMTS_ARR := MISC_ARR[2] LI_TOTALS := MISC_ARR[3] //** ORDER MASTER(CGW0OM) MISC ITEMS (SCREEN 2115) BO PRINT MISC_ARR := BLD_ORDMISC( PBODY_ARR, PAMTS_ARR, LI_TOTALS, PRT_AMT, PRT_BO, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE ) PBODY_ARR := MISC_ARR[1] PAMTS_ARR := MISC_ARR[2] LI_TOTALS := MISC_ARR[3] MISC_ARR := {{}} //** P3N - 12/2/98 ELSEIF WHCHORDER = 'INV' ; //INVOICE .OR. (WHCHORDER = 'OD' .AND. WHICH_TYPE = 'CTRL'); //OD CTRL & DELIVERY .OR. (WHCHORDER = 'PROD' .AND. WHICH_TYPE = 'CTRL') //GOLDEN ROD PRT_BO := .F. //** P3N - 9/24/98 IF WHCHORDER = 'INV' .AND. CUR_MAST = 'ORD_MAST' //** P3N - 9/24/98 PRT_BO := .T. //** P3N - 9/24/98 ENDIF //** P3N - 9/24/98 PRT_AMT := DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) MISC_ARR := BLD_MISCORD(CUR_MISC, PBODY_ARR, PAMTS_ARR, LI_TOTALS, ; PRT_AMT, DIDFST, PRT_BO, WHCHORDER, ; PARTIAL_INVOICE, REPRINT_INVOICE, ,SUBTYPE ) PBODY_ARR := MISC_ARR[1] PAMTS_ARR := MISC_ARR[2] LI_TOTALS := MISC_ARR[3] //** P3N -11/25/98 - INVOICE PROCESSING M1 := (CUR_MAST)->MISC_QTY1 M2 := (CUR_MAST)->MISC_QTY2 M3 := (CUR_MAST)->MISC_QTY3 L1 := (CUR_MAST)->MISC_AMT1 L2 := (CUR_MAST)->MISC_AMT2 L3 := (CUR_MAST)->MISC_AMT3 MTOT := (M1*L1) + (M2*L2) + (M3*L3) //** PARTIAL / REPRINT INVOICE //** IF PARTIAL INVOICE S1, S2, S3 ARE SHIP QTYS //** IF REPRINT INVOICE I1, I2, I3 ARE INV QTYS MISC_ARR := GETQTYMISC(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) FOR I := 1 TO LEN(MISC_ARR[1]) IF MISC_ARR[1,I,5] == 'ORDMISC1' S1 := MISC_ARR[1,I,3] //** SHIP QTY I1 := MISC_ARR[1,I,6] //** INV QTY A1 := MISC_ARR[1,I,4] //** ITEM PRICE ELSEIF MISC_ARR[1,I,5] == 'ORDMISC2' S2 := MISC_ARR[1,I,3] //** SHIP QTY I2 := MISC_ARR[1,I,6] //** INV QTY A2 := MISC_ARR[1,I,4] //** ITEM PRICE ELSEIF MISC_ARR[1,I,5] == 'ORDMISC3' S3 := MISC_ARR[1,I,3] //** SHIP QTY I3 := MISC_ARR[1,I,6] //** INV QTY A3 := MISC_ARR[1,I,4] //** ITEM PRICE ENDIF NEXT //** STOT CONTAINS THE TOTAL AMOUNT OF SHIPPED ITEMS STOT := (S1*A1) + (S2*A2) + (S3*A3) //** ITOT CONTAINS THE TOTAL AMOUNT OF INVOICED ITEMS ITOT := (I1*A1) + (I2*A2) + (I3*A3) //** CALC BO AMTS B1 := M1 - S1 //** P3N - 11/25/98 B2 := M2 - S2 //** P3N - 11/25/98 B3 := M3 - S3 //** P3N - 11/25/98 IF (CUR_MAST)->MISC_QTY1 <> 0 .OR. ; (CUR_MAST)->MISC_QTY2 <> 0 .OR. ; (CUR_MAST)->MISC_QTY3 <> 0 IF PARTIAL_INVOICE LI_TOTALS := LI_TOTALS + STOT ELSEIF REPRINT_INVOICE LI_TOTALS := LI_TOTALS + ITOT ELSE LI_TOTALS := LI_TOTALS + MTOT ENDIF IF NUMPRNT > 1 .AND. SUBPRNT <> 0 .AND. MHOME_LOC_CODE <> 'IOLA' ; // PER DARLENE 8-22-96 .AND. MHOME_LOC_CODE <> 'LINDS' // PER LINDA 8-23-96 AADD(PBODY_ARR, '-----' ) AADD(PAMTS_ARR, {}) ENDIF //**P3N - 11/24/98 ALREADY EXECUTED ABOVE - 40 or 45 LINES //**PRT_AMT := DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) //** P3N - 11/25/98 IF (CUR_MAST)->MISC_QTY1 <> 0 PAMTS := { M1,B1,S1, L1, PRT_AMT, PRT_BO, 0, , I1 } AADD(PBODY_ARR, '^' + (CUR_MAST)->MISC_ITEM1) AADD(PAMTS_ARR, PAMTS ) ENDIF IF (CUR_MAST)->MISC_QTY2 <> 0 AADD(PBODY_ARR, ' ' ) //*DBL SPACE MISC ITEMS ON ORDER - PER ELLEN 7-31-97 AADD(PAMTS_ARR, {}) PAMTS := { M2,B2,S2, L2, PRT_AMT, PRT_BO, 0, , I2 } AADD(PBODY_ARR, '^' + (CUR_MAST)->MISC_ITEM2 ) AADD(PAMTS_ARR, PAMTS ) ENDIF IF (CUR_MAST)->MISC_QTY3 <> 0 AADD(PBODY_ARR, ' ' ) //*DBL SPACE MISC ITEMS ON ORDER - PER ELLEN 7-31-97 AADD(PAMTS_ARR, {}) PAMTS := { M3,B3,S3, L3, PRT_AMT, PRT_BO, 0, , I3 } AADD(PBODY_ARR, '^' + (CUR_MAST)->MISC_ITEM3 ) AADD(PAMTS_ARR, PAMTS ) ENDIF ENDIF ENDIF IF TOTPRNT <> 0 .AND. MHOME_LOC_CODE <> 'XXXX' ; // darlene 8-22-96 .AND. MHOME_LOC_CODE <> 'KC' // EDNA on 3-28-96 IF PRODUCT->(FIELDPOS('ORD_TOTALS')) > 0 //** P3N - 4/7/99 IF AT('S', PRODUCT->ORD_TOTALS) > 0 .AND. ; //** P3N - 4/7/99 WHICH_TYPE == 'STORM' //** P3N - 4/7/99 SUPPRESS_TOT := .T. //** P3N - 4/7/99 ENDIF //** P3N - 4/7/99 ENDIF //** P3N - 4/7/99 IF SUPPRESS_TOT //** P3N - 4/7/99 ELSEIF INT(TOTPRNT) = TOTPRNT AADD(PBODY_ARR, '=====' ) AADD(PAMTS_ARR, {}) AADD(PBODY_ARR, STR(TOTPRNT,4) + ' Total' ) AADD(PAMTS_ARR, {}) AADD(PBODY_ARR, '=====' ) ELSE AADD(PBODY_ARR, '========' ) AADD(PAMTS_ARR, {}) AADD(PBODY_ARR, STR(TOTPRNT,7,2) + ' Total' ) AADD(PAMTS_ARR, {}) AADD(PBODY_ARR, '========' ) ENDIF AADD(PAMTS_ARR, {}) ENDIF IF EMPTY(CNT_LI_DISC) LI_DISC_PRNT := .F. ELSE LI_DISC_PRNT := .T. ENDIF PTAIL_ARR := BLD_TAIL(MORDER_NUM, WHCHORDER, LI_TOTALS, WHICH_TYPE, ; SUBTYPE, LI_DISC_PRNT, PARTIAL_INVOICE, MISC_ARR, ; PRT_BO, REPRINT_INVOICE ) //** PAMTS_ARR := RETVARARR[2] IF WHCHORDER = 'BACKORD' //** P3N - 9/2/98 //** PRINT THE TAIL(ORD_MAST->BO_NOTES) INFO FOR BACKORDERS ELSEIF PRT_AMT ELSE //DO NOT PRINT AMOUNTS NO PTAIL_ARR - EXEC BLD_TAIL TO UPD GL_ARR IF (CUR_MAST)->QUOTE_PRIC = 0 //NOT A QUOTED ORDER!! IF WHCHORDER = 'INV' .OR. WHCHORDER = 'OD' .OR. ; (WHCHORDER = 'PROD' .AND. WHICH_TYPE = 'CTRL') //** P3N - 12/3/98 **//** ADDED THE "OD" CHECK 9-30-97 // ON AN INVOICE / OD / DEL / GOLDEN ROD PRINT // TOTALS OR NONTX ITEMS - IF PRESENT. ELSE PTAIL_ARR := {} ENDIF ENDIF ENDIF IF EMPTY(PBODY_ARR) AADD(PBODY_ARR, '^' ) AADD(PBODY_ARR, ' ' ) AADD(PAMTS_ARR, NIL) AADD(PAMTS_ARR, NIL) ENDIF PRT_GL_INFO := PRNT_ACCT_INFO( WHCHORDER, WHICH_TYPE, SUBTYPE ) PROCESS_OO(PHEAD_ARR, PBODY_ARR, PTAIL_ARR, PAMTS_ARR, SUBTYPE, ; PRT_GL_INFO, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) RETURN **************************************************************** * Format the line item discount pct and amount **************************************************************** //** DISCOUNT MODIFICATIONS - 10-7-97 FUNCTION PRNT_DISCOUNTS(DISC_ARR , WHCHORDER, SUBTYPE) LOCAL DISC_PCT, I, DISC_TOTAL, RETARR := {}, RETVAL LOCAL SP4 := SPACE(07)+'(', SP5 := SPACE(06)+'(' LOCAL SP6 := SPACE(05)+'(', SP7 := SPACE(04)+'(' LOCAL SP9 := SPACE(02)+'(', SP8 := SPACE(03)+'(' FOR I := 1 TO LEN(DISC_ARR) DISC_PCT := DISC_ARR[I,2] //** RETVAL := SPACE(10) + STR(DISC_PCT, 3,0) + '% ' //** P3N - 09/27/11 RETVAL := SPACE(08) + STR(DISC_PCT, 5,2) + '% ' //** P3N - 09/27/11 IF LEN(DISC_ARR) = 1 RETVAL := RETVAL + 'Total Discount' + SPACE(19) ELSE RETVAL := RETVAL + 'Discount for ' + DISC_ARR[I,4] //ENTRY SIZE ENDIF RETVAL := PADL(TRIM(RETVAL), 48, ' ') DISC_TOTAL := DISC_ARR[I,3] IF DISC_TOTAL < 0 //** P3N - 4/3/98 DISCOUNT CHARGE BACK RETVAL := RETVAL + STR(DISC_TOTAL * -1, 12, 2) ELSEIF DISC_TOTAL > 99999.99 RETVAL := RETVAL + SP9 + STR(DISC_TOTAL, 9,2) + ')' ELSEIF DISC_TOTAL > 9999.99 RETVAL := RETVAL + SP8 + STR(DISC_TOTAL, 8,2) + ')' ELSEIF DISC_TOTAL > 999.99 RETVAL := RETVAL + SP7 + STR(DISC_TOTAL, 7,2) + ')' ELSEIF DISC_TOTAL > 99.99 RETVAL := RETVAL + SP6 + STR(DISC_TOTAL, 6,2) + ')' ELSEIF DISC_TOTAL > 9.99 RETVAL := RETVAL + SP5 + STR(DISC_TOTAL, 5,2) + ')' ELSE RETVAL := RETVAL + SP4 + STR(DISC_TOTAL, 4,2) + ')' ENDIF IF MHOME_LOC_CODE = 'KC' RETVAL := SPACE(22) + RETVAL ELSEIF MHOME_LOC_CODE = 'IOLA' RETVAL := SPACE(19) + RETVAL ELSEIF MHOME_LOC_CODE = 'LINDS' RETVAL := SPACE(21) + RETVAL ELSEIF MHOME_LOC_CODE = 'PAWNEE' RETVAL := SPACE(19) + RETVAL ENDIF AADD(RETARR, RETVAL) NEXT IF DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) // IF AMOUNTS TO PRINT; RETURN THE DISCOUNT ARRAY! ELSE RETARR := {} ENDIF RETURN RETARR **************************************************************** **************************************************************** **************************************************************** FUNCTION IS_COD( TERMCODE ) IF ASCAN( MCOD_ARR, { |X| ALLTRIM( X ) == ALLTRIM( TERMCODE ) } ) > 0 RETURN .T. ELSE RETURN .F. ENDIF **************************************************************** * FIND IF ANY ELEMENTS FOR LOCATION TO PRINT **************************************************************** FUNCTION SCAN_PRNARR(PRN_ARR, WHCH_LOCATION) LOCAL ELEM := ASCAN (PRN_ARR, {|X| ALLTRIM(X[1]) == ALLTRIM(WHCH_LOCATION) } ) IF ELEM > 0 RETURN .T. ELSE RETURN .F. ENDIF **************************************************************** * READ THE LINE FILE( ORD_LINES/ADDL_LINES) AND PUT ALL APPLICABLE * DATA INTO AN ARRAY FOR LATER USE AND PRINTING **************************************************************** FUNCTION GET_ORD_DATA( MORDER_NUM, SELFILE, PARTIAL_INVOICE, REPRINT_INVOICE ) LOCAL DATA_ARR := {}, DISC_ARR, ITEM_LINE, MLOC_CODE, PRNT_ARR, DISC_PCT LOCAL PRNT_DESARR, PRNT_DESC, PROD_MEMO, RAN_SLID := .F., MGL_LINE_DESC := '' LOCAL ITEM_CAT_CODE, CALC_VAR, AMTVAR, GLASS_COPY, ADDL_MODE LOCAL PAR_CAT_CODE, SCRNSIZE,I, WHERE_FROM, PROD_CAT_CODE, EQL_PRNT LOCAL SV_SEL := SELECT(), MLINE, MLOC_FILE, SEEKKEY, OPTFILE LOCAL FULL_HT, FULL_WD, HALF_HT, HALF_WD, FULL_ITEM, HALF_ITEM LOCAL PROD_LINE, GLASS_LINE, EXP_LINE, PO_LINE, SASH_LINE, SCREEN_LINE LOCAL FACT, HS_PRNT, PRNT_EXP, GLASS_PRNT, STORM_PRNT, FSARR := {} LOCAL OR_TOP := 0, OR_BOT := 0, OR_ARR := {}, OR_VAL, OR_DEC := 0 LOCAL OR_SCR := 0, EX_DESC:= '', DEFAULT_ORIEL := .F., BALANCE_SIZE LOCAL OR_DESC:= '', ODD_ORIEL, ELEM, OR_GLASS := 0, O_GLASS_DESC := '' LOCAL MGL_NUM, MGL_AMT, EXP_REQ, ADDIT, SEEKPROD, SIZE_ARR, MNUM_GLASS LOCAL MULL_REQ := .F., MULL_TYPE, MULL_ARR, S_REC, NUMMULLS, WKL_AMT := 0 LOCAL EXP_WK_WIDTH := 0, ADJ_WK_WIDTH := 0, ADJ_WK_HEIGHT := 0 LOCAL DEL_CHG := 0, WORKVAR, IS_ALWAYS_SLID := .F., STDADJ := 0 LOCAL XFACTOR := 0, _DISC_INFO, THIS_DISC, FLANKSCR := {.F., ''} LOCAL GB_CHUNK := '', GLT_WD, GLT_HT, DO_GLASS_PRNT, GLB_WD, GLB_HT LOCAL GLT_QTY, GLB_QTY, WK_QTY, OR_REASON, PR_CUSTID, MLINE_DESC LOCAL BAL_INFO, TOTWIND, CUT_SPEC_ARR, WORKSPECS, RETVAL := {} LOCAL G_ARR := {}, MCODE, MLINE_NUM, MNUM_SCREEN, PAR_LOC_CODE LOCAL MWORK_DESC := '', GL311AMT, FRENCHDOOR, ADJ_HT, GETFLANK LOCAL DO_SCRNS_ONLY := .F., BYPASS_SCREEN_PAR := .F., WKSPRICE := 0 LOCAL MPWHERE := 'U' //DEFAULT Line Notes to print UNDER the line item! LOCAL SHP_QTY := 0, INV_QTY := 0, QTYARR := {}, BO_ITEM := '' LOCAL CK_BKO_SCRNS := .F., SCRNINFO := {} //** P3N - 6/30/98 LOCAL FLNKSPECS := {}, PARORD, PARLINE //** P3N - 7/21/99 HAPPY BDAY DANIEL STATIC PARGARR := {}, PARPROD, PARELM //** P3N - 7/21/99 HAPPY BDAY DANIEL IF SELFILE == CUR_OL WHERE_FROM := 'OL' ADDL_MODE := .F. OPTFILE := CUR_OO ELSEIF SELFILE == CUR_XL WHERE_FROM := 'XL' ADDL_MODE := .T. OPTFILE := CUR_XO ENDIF FOR I := 1 TO 11 // 11 TYPES OF OUTPUT FORMS AADD(DATA_ARR, {}) // 1-Production NEXT // 2-frame // 3-sash // 4-glass // 5-screen // 6-storms // 7-invoice (customer) // 8-expander // 9-control desk //10-SCREENS(when NOT at mfg. loc) //11-storms (when NOT at mfg. loc) // FILL ARRAY WITH 14-ELEMENTS CONTAINING // 1. LOC CODE MLOC_CODE // 2. DESCRIPTION PRNT_DESC // 3. ITEM LINE PRINT VALUE - NO $ AMOUNTS ITEM_LINE // 4. SALE PRICE // 5. DISCOUNT PCT/AMOUNT ARRAY // 6. MEMO NOTES PROD_MEMO // 7. QUANTITY // 8. WHERE DID ALL THE INFO COME FROM (IE: "OL" OR "XL") // 9. LINE_NUM //10. PROD_CODE //11. SHP_QTY // ORDER SHIP QTY //12. EXTRA WINDOWS //13. cut spec array //14. line_desc FOR USE ON GLASS / SCREEN COPIES at kansas city //15. flag indicating print SCREEN ONLY regardless of the MFG Location //16. flag indicating print notes above size prod_line(item_line) // Print-'U ' = UNDER LINE, 'A' = ABOVE LINE, 'B' = Beside the LINE //17. INV_QTY // ORDER INVOICE QTY // SELECT (SELFILE) SEEK MORDER_NUM DO WHILE ORDER_NUM = MORDER_NUM .AND. !EOF() IF ADDL_MODE // POINT TO PARENT ORDER LINE RECORD (CUR_OL)->(DBSEEK( (SELFILE)->ORDER_NUM + STR((SELFILE)->LINE_NUM,3) ) ) PAR_LOC_CODE := (CUR_OL)->LOC_CODE ELSE PAR_LOC_CODE := NIL IF EMPTY(PRT_NOTES) MPWHERE := 'U' // DEFAULT - print the notes under the line item ELSE MPWHERE := PRT_NOTES // Print the Line Item notes where ????? // "A" print ABOVE line item // "B" print BESIDE line item // "U" print UNDER line item ENDIF ENDIF MLINE := STR(LINE_NUM,3) MLINE := TRIM(MLINE) // NUMBER OF XTRA WINDOWS MULLED IF ADDL_MODE XFACTOR := 0 ELSE XFACTOR := CK_XTRAWIND( SELFILE, OPTFILE, ADDL_MODE ) QTYARR := GET_OSTQTY(SELFILE, , PARTIAL_INVOICE, REPRINT_INVOICE) //** P3N - 5/1/98 IF EMPTY(QTYARR) //** P3N - 12/3/98 SHP_QTY := 0 //** P3N - 12/3/98 INV_QTY := 0 //** P3N - 12/3/98 ELSE //** P3N - 12/3/98 SHP_QTY := QTYARR[1] //** P3N - 12/3/98 INV_QTY := QTYARR[2] //** P3N - 12/3/98 ENDIF //** P3N - 12/3/98 ENDIF IF !EMPTY(ALT_SPRICE) // WAS ALTERNATE PRICE USED? AMTVAR := ALT_SPRICE WKSPRICE := (SELFILE)->ALT_SPRICE //** P3N -08/17/11 ELSE WKSPRICE := (SELFILE)->SALE_PRICE //** P3N -08/17/11 AMTVAR := SALE_PRICE IF !ADDL_MODE // GET ANY AMTS DUE FOR NON STD ADDL ITEMS SELECT (CUR_XL) DONSETORD(3) SEEK (SELFILE)->ORDER_NUM + STR((SELFILE)->LINE_NUM,3) IF FOUND() //** P3N - 11/24/98 ADDRESS ADDL LINE PRICING FOR MULTI QTY PRODS //** AMTVAR := AMTVAR + SALE_PRICE AMTVAR := AMTVAR + ( SALE_PRICE * XFACTOR ) ENDIF DONSETORD(1) SELECT (CUR_OL) ENDIF ENDIF //** USE THE QUOTED PRICE FOR DEL CHARG CALCS BELOW IF EMPTY((CUR_MAST)->QUOTE_PRIC) //** P3N - 08/17/11 //** NO QUOTED PRICE - CONTINUE W/LINE ITEM AMT IN WKSPRICE ELSE //** P3N - 08/17/11 WKSPRICE := (CUR_MAST)->QUOTE_PRIC //** P3N - 08/17/11 ENDIF _DISC_INFO := ITEMDISC(PARTIAL_INVOICE, REPRINT_INVOICE, SELFILE) // P3N - PER ELLEN - 6/3/98 **IF EMPTY( (SELFILE)->ALT_SPRICE ) // DO NOT APPLY A DISCOUNT ON ALT PRICE! DISC_PCT := (SELFILE)->DISCOUNT //LINE ITEM DISCOUNT PCT - USER ENTERED IF EMPTY(DISC_PCT) DISC_PCT := (SELFILE)->SYS_DISC //LINE ITEM DISCOUNT PCT - SYSTEM GENERATED ENDIF **ELSE ** DISC_PCT := 0 ** _DISC_INFO[2] := 0 **ENDIF DISC_ARR := {DISC_PCT, ; //LINE ITEM DISCOUNT PCT _DISC_INFO[2], ; //LINE ITEM DISCOUNT AMT (SELFILE)->ENTRY_SIZE, ; //ENTRY SIZE OF DISCOUNT ITEM (SELFILE)->HOW_MEAS } //HOW MEASURE SELECT PRODUCT SEEK (SELFILE)->PROD_CODE MGL_NUM := GL_NUM MLOC_CODE := (SELFILE)->LOC_CODE CUST_MAST->(DBSEEK((CUR_MAST)->CUST_ID )) IF !EMPTY(CUST_MAST->GL_CODE) MGL_NUM := ALLTRIM(MGL_NUM)+CUST_MAST->GL_CODE //** P3N - 02/01/07 ABW GL FOR INTER COMPANY //**MGL_NUM := SUBS(MGL_NUM,1,2) + TRIM(SUBS(MGL_NUM,4)) + ' '+ CUST_MAST->GL_CODE ENDIF ITEM_CAT_CODE = GET_CATCODE( (SELFILE)->PROD_CODE) PAR_CAT_CODE = GET_CATCODE( (SELFILE)->PAR_PROD) SELECT (SELFILE) PRNT_DESC := ALLTRIM((SELFILE)->ITEM_DESC) IF AT('EXPANDER' , PRNT_DESC) > 0 ; .AND. AT('NO~EXPANDER' , PRNT_DESC) = 0 ; .AND. ( ITEM_CAT_CODE = 'STORMS' .OR. ITEM_CAT_CODE = 'STPW' .OR. ITEM_CAT_CODE = 'EXPANDR' ) //** P3N - 9/29/99 //**.AND. ( ITEM_CAT_CODE = 'STORMS' .OR. ITEM_CAT_CODE = 'STPW' ) //** P3N - 9/29/99 EXP_REQ := .T. ELSE EXP_REQ := .F. ENDIF // HEADER LINE FROM OPTIONS SELECTED IF SELFILE = CUR_XL (CUR_OL)->(DBSEEK( (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) ) ) ELSE // IF ORDER LINES, CHECK IF ANY NON-STD OPTION ADDL_LINES //** P3N - 5/17/99 REDUNDANT OPTION INFORMATION PRINTING WHEN NOT NEEDED //** COMMENTED OUT PER SCOTT IN KC //**SELECT (CUR_XL) //**SEEKKEY = (SELFILE)->ORDER_NUM //**SEEK SEEKKEY //**DO WHILE ORDER_NUM == (SELFILE)->ORDER_NUM .AND. !EOF() //** IF LINE_NUM == (SELFILE)->LINE_NUM .AND. STD_OPTS$'N' //** PRNT_DESC := PRNT_DESC + CHR(13) + CHR(10) //** PRNT_DESC := PRNT_DESC + '**~(' + ; //** ALLTRIM(ITEM_DESC) + ')~**' //** ENDIF //** SKIP 1 //**ENDDO //**SELECT (SELFILE) ENDIF GLASS_COPY := IF( (SELFILE)->GLASSORDER='Y', .T., .F.) SELECT (SELFILE) ITEM_LINE := '' IF ( (SELFILE)->HOW_MEAS = 'NS' .AND. EMPTY((SELFILE)->PAR_PROD)); .OR. (SELFILE)->HOW_MEAS = 'BW' .OR. ; (SELFILE)->HOW_MEAS = 'WO' .OR. (SELFILE)->IN_STOCK$'Y' ITEM_LINE := ITEM_LINE + ' ' + STRTRAN( ALLTRIM( (SELFILE)->ENTRY_SIZE ), ' ','~') ELSE ITEM_LINE := ITEM_LINE + SPACE(11) ENDIF IF (SELFILE)->(FIELDPOS('GLINE_DESC')) > 0 //** P3N - 6/7/99 MGL_LINE_DESC := TRIM((SELFILE)->GLINE_DESC) //** P3N - 6/7/99 ENDIF //** P3N - 6/7/99 SASH_LINE := ' ' //** P3N - 5/25/00 IF !EMPTY( (SELFILE)->LINE_DESC ) MLINE_DESC := ALLTRIM( (SELFILE)->LINE_DESC ) //** P3N - 5/2/00 CHANGED BACK FOR LINE ATTRIB OPTS IF AT('I', (SELFILE)->LDESC_COPY ) > 0 //** P3N - 5/2/00 SASH COPY DESC SASH_LINE := MLINE_DESC //** P3N - 5/2/00 ENDIF //** P3N - 5/2/00 //**MLINE_DESC := ALLTRIM( (SELFILE)->LINE_DESC )+' '+MGL_LINE_DESC //** P3N - 6/7/99 ITEM_LINE := ITEM_LINE + ' ' // 12-4-96 - SAVE LINE_DESC UNTIL LATER PER LINDA AT LINDS ?? ITEM_LINE := ITEM_LINE + '~' + MLINE_DESC + ' ' MLINE_DESC := '' ELSE //** P3N - 6/7/99 IF EMPTY(ITEM_LINE) //** P3N - 6/9/99 ITEM_LINE := MGL_LINE_DESC //** P3N - 6/7/99 ELSE //** P3N - 6/9/99 //** ITEM_LINE := ITEM_LINE + MGL_LINE_DESC //** P3N - 6/9/99 ITEM_LINE := ITEM_LINE +'~~'+ MGL_LINE_DESC //** P3N -10/19/99 ENDIF //** P3N - 6/9/99 ENDIF IF EMPTY( (SELFILE)->LINE_NOTES) PROD_MEMO := NIL ELSE PROD_MEMO := (SELFILE)->LINE_NOTES ENDIF IF AMTVAR = 0 .AND. (CUR_MAST)->QUOTE_PRIC <> 0 //** P3N - 7/28/98 - PRINT THE CODING ON QUOTED ORDERS //**MGL_AMT := (SELFILE)->QUANTITY * (SELFILE)->CALC_PRICE MGL_AMT := (CUR_MAST)->QUOTE_PRIC //** P3N - 12/7/98 PARTIAL INVOICE PROCESSING ELSEIF PARTIAL_INVOICE //** P3N - 12/7/98 MGL_AMT := SHP_QTY * AMTVAR //** P3N - 12/7/98 ELSEIF REPRINT_INVOICE //** P3N - 12/7/98 MGL_AMT := INV_QTY * AMTVAR //** P3N - 12/7/98 ELSE MGL_AMT := (SELFILE)->QUANTITY * AMTVAR ENDIF // CALC THE SYSTEM DEALER PICKUP DISCOUNT // FILL THE GL_ARR WITH ALLOCATION INFORMATION // 09-5-95 - EXCLUDE INTERCOMPANY LINES FROM DELIVERY CHARGE // 09-5-95 - SHOULD ANY OTHERS BE EXCLUDED? // 03-31-97 - EXCLUDE KC BUILD TO STOCK ITEMS. IF MHOME_LOC_CODE = 'IOLA' IF (CUR_MAST)->PICK_DEL$'D' ; .AND. !(SELFILE)->PRICE_SHT$'I' ; .AND. (CUR_MAST)->CUST_ID <> '20187000' //** KC LOCATION CATEGORY->(DBSEEK( ITEM_CAT_CODE )) IF EMPTY(CATEGORY->FRT_AMT) //** P3N - 08/08/11 //** USE THE CATEGORY PCT TO CALC DELIVERY CHARGE ON ORDER SUBTOTAL //**DEL_CHG := (CATEGORY->FRT_PCT / 100 ) * (SELFILE)->SALE_PRICE //**WKL_AMT := (SELFILE)->SALE_PRICE / (1+(CATEGORY->FRT_PCT / 100 )) //**WKL_AMT := (SELFILE)->SALE_PRICE - WKL_AMT //** SINGLE ITEM DEL CHG WKL_AMT := WKSPRICE / (1+(CATEGORY->FRT_PCT / 100 )) //** P3N - 08/17/11 WKL_AMT := WKSPRICE - WKL_AMT //** SINGLE ITEM DEL CHG //** P3N - 08/17/11 DEL_CHG := WKL_AMT * (SELFILE)->QUANTITY ELSE DEL_CHG := CATEGORY->FRT_AMT * (XFACTOR+1) * (SELFILE)->QUANTITY ENDIF ELSE DEL_CHG := 0 ENDIF ELSEIF MHOME_LOC_CODE = 'KC' IF (CUR_MAST)->PICK_DEL$'D' ; .AND. !(SELFILE)->PRICE_SHT$'I' ; .AND. IS_DELIVERED() //IS THIS ORDER ASSESSED A DELIVERY CHARGE??? CATEGORY->(DBSEEK( ITEM_CAT_CODE )) IF EMPTY(CATEGORY->FRT_AMT) //** P3N - 08/08/11 //** USE THE CATEGORY PCT TO CALC DELIVERY CHARGE ON ORDER SUBTOTAL //** DEL_CHG := (CATEGORY->FRT_PCT / 100 ) * (SELFILE)->SALE_PRICE //**WKL_AMT := (SELFILE)->SALE_PRICE / (1+(CATEGORY->FRT_PCT / 100 )) //**WKL_AMT := (SELFILE)->SALE_PRICE - WKL_AMT //** SINGLE ITEM DEL CHG WKL_AMT := WKSPRICE / (1+(CATEGORY->FRT_PCT / 100 )) //** P3N - 08/17/11 WKL_AMT := WKSPRICE - WKL_AMT //** SINGLE ITEM DEL CHG //** P3N - 08/17/11 DEL_CHG := WKL_AMT * (SELFILE)->QUANTITY ELSE DEL_CHG := CATEGORY->FRT_AMT * (XFACTOR+1) * (SELFILE)->QUANTITY ENDIF ELSE DEL_CHG := 0 ENDIF ELSEIF (CUR_MAST)->PICK_DEL$'D' ; .AND. !(SELFILE)->PRICE_SHT$'I' CATEGORY->(DBSEEK( ITEM_CAT_CODE )) IF EMPTY(CATEGORY->FRT_AMT) //** P3N - 08/08/11 //** USE THE CATEGORY PCT TO CALC DELIVERY CHARGE ON ORDER SUBTOTAL //**DEL_CHG := (CATEGORY->FRT_PCT / 100 ) * (SELFILE)->SALE_PRICE //**WKL_AMT := (SELFILE)->SALE_PRICE / (1+(CATEGORY->FRT_PCT / 100 )) //**WKL_AMT := (SELFILE)->SALE_PRICE - WKL_AMT //** SINGLE ITEM DEL CHG WKL_AMT := WKSPRICE / (1+(CATEGORY->FRT_PCT / 100 )) //** P3N - 08/17/11 WKL_AMT := WKSPRICE - WKL_AMT //** SINGLE ITEM DEL CHG //** P3N - 08/17/11 DEL_CHG := WKL_AMT * (SELFILE)->QUANTITY ELSE DEL_CHG := CATEGORY->FRT_AMT * (XFACTOR+1) * (SELFILE)->QUANTITY ENDIF ELSE DEL_CHG := 0 ENDIF ********************************************************** * GL 521 IS THE DELIVERY CHARGE - LineItem category calc [$ frt_amt or % frt_pct] ********************************************************** IF ADDL_MODE // NO DELIVERY CHARGE ON ADDL LINE ITEM (XL) ELSEIF EMPTY( (CUR_MAST)->FUEL_CHRG ) //** P3N - 08/08/11 IF DEL_CHG <> 0 .AND. MGL_AMT <> 0 ELEM := ASCAN(GL_ARR, {|X| X[1] = '521 '} ) IF ELEM > 0 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+ DEL_CHG ELSE //INCLUDE FOR ALLOC. AADD(GL_ARR, { '521 ', DEL_CHG, , 'I' } ) ENDIF ENDIF ELSE DEL_CHG := 0 //** P3N - 08/08/11 ENDIF ********************************************************** * GL 311 IS THE INSTALLATION ADJ. * GL 361 IS THE INSTALLATION ADJ (as of 02/01/07) ********************************************************** GL311AMT := (SELFILE)->GL311_AMT + (SELFILE)->GL311_ADJ IF GL311AMT <> 0 .AND. MGL_AMT <> 0 ELEM := ASCAN(GL_ARR, {|X| X[1] = '361 '} ) //** P3N - 01/30/07 //**ELEM := ASCAN(GL_ARR, {|X| X[1] = '311 '} ) //** P3N - 01/30/07 IF ELEM > 0 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+ GL311AMT ELSE //INCLUDE FOR ALLOC. AADD(GL_ARR, { '361 ', GL311AMT, , 'I' } ) //** P3N - 01/30/07 //** AADD(GL_ARR, { '311 ', GL311AMT, , 'I' } ) //** P3N - 01/30/07 ENDIF ENDIF //* AMOUNT ALREADY ALLOCATED TO THE GL ACCT. FOR THE PRIMARY LINE ITEM! IF ADDL_MODE MGL_AMT := 0 ENDIF //* AMOUNT ALLOCATED TO THE GL ACCT. FOR THE LINE ITEM IF MGL_AMT <> 0 ELEM := ASCAN(GL_ARR, {|X| X[1] = MGL_NUM} ) // CHECK FOR USER LINE DISCOUNTS OR SYSTEM CALC DISCOUNTS //** P3N - 11/24/98 - COMMENTED OUT BECAUSE IT IS ALREADY //** EXECUTED ABOVE //**_DISC_INFO := ITEMDISC() THIS_DISC := _DISC_INFO[2] IF ELEM > 0 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2] + MGL_AMT - THIS_DISC - DEL_CHG - GL311AMT ELSE // PRODUCT ALLOC. AADD(GL_ARR, { MGL_NUM + ' ' , MGL_AMT - THIS_DISC - DEL_CHG - GL311AMT , , 'P'} ) ENDIF ENDIF **** CHECK IF RANCH SLIDER, BECAUSE THE WIDTH/HEIGHT WILL BE REVERSED **** FOR PRODUCTION PROCESSING **** IF ALWAYS SLIDER (C900) THEN DON'T REVERSE, BUT HALF SIZE WIDTH **** MAYBE don't check screens for sliders per darlene 6-23-95?? RAN_SLID := CK_SLIDER(SELFILE, OPTFILE, ADDL_MODE) IS_ALWAYS_SLID := ALWAYS_SLIDER(SELFILE, OPTFILE, ADDL_MODE) ***** SPECIAL ORIEL PROCESSING HERE ODD_ORIEL := .T. OR_DESC := '' O_GLASS_DESC := '' OR_SCR := 0 OR_ARR := CK_ORIEL(ITEM_CAT_CODE, SELFILE, OPTFILE, ADDL_MODE, RAN_SLID, IS_ALWAYS_SLID ) OR_TOP := OR_ARR[1] OR_BOT := OR_ARR[2] BALANCE_SIZE := OR_ARR[3] OR_REASON := OR_ARR[4] OR_SCR := OR_ARR[5] OR_GLASS := OR_ARR[6] ODD_ORIEL := OR_ARR[7] DEFAULT_ORIEL := OR_ARR[8] STDADJ := 0 //** P3N - 07/05/01 IF (SELFILE)->HOW_MEAS == 'NS' //** P3N - 07/05/01 //** STD SIZE ADJ FOR NOM SIZE - PAWNEE RE: DARYL //** P3N - 07/05/01 STDADJ := OR_ARR[9] //** STD SIZE ADJ - NOM SIZE ONLY ENDIF //** P3N - 07/05/01 // OR_REASON RESULTS // 'BAL ADJ' // 'NO ORIEL' // 'ATT CODE' // 'BAL ADJ' // 'DEFAULT' // EMPTY CUTTING SPECS FOR THIS LINE ITEM IF !ADDL_MODE CUT_SPEC_ARR := ACLONE(GET_CUT_SPEC( (SELFILE)->PROD_CODE ) ) CATEGORY->(DBSEEK( ITEM_CAT_CODE ) ) MCODE := (SELFILE)->PROD_CODE ELSE IF ITEM_CAT_CODE = 'EXPANDR' //** P3N - 9/29/99 CUT_SPEC_ARR := ACLONE(GET_CUT_SPEC( (SELFILE)->PROD_CODE, SELFILE, (SELFILE)->QUANTITY, XFACTOR, G_ARR)) //** P3N - 9/29/99 ELSE //** P3N - 9/29/99 CUT_SPEC_ARR := ACLONE(GET_CUT_SPEC( (SELFILE)->PAR_PROD ) ) ENDIF //** P3N - 9/29/99 CATEGORY->(DBSEEK( PAR_CAT_CODE ) ) MCODE := (SELFILE)->PAR_PROD ENDIF IF !EMPTY(CUT_SPEC_ARR) .OR. !EMPTY(CATEGORY->HS_RULE) // NEED GET_ARRAY FOR CUTTING SPEC RULE AND HALF SIZE RULE EVALUATION MLINE_NUM := STR((SELFILE)->LINE_NUM,3) RETVAL = BUILD_GETARR( MCODE, 1, MORDER_NUM, MLINE_NUM, , .F., ADDL_MODE, PR_CUSTID, .F., SELFILE ) G_ARR = RETVAL[1] // EVALUATED CUTTING SPECS FOR THIS LINE ITEM IF ITEM_CAT_CODE = 'EXPANDR' //** P3N - 9/30/99 ELSE //** P3N - 9/30/99 CUT_SPEC_ARR := ACLONE(GET_CUT_SPEC( MCODE, SELFILE, (SELFILE)->QUANTITY, XFACTOR, G_ARR )) ENDIF //** P3N - 9/30/99 IF ADDL_MODE //** P3N - 7/21/99 HAPPY BDAY DANIEL ELSE //** P3N - 7/21/99 HAPPY BDAY DANIEL PARORD := (SELFILE)->ORDER_NUM //** P3N - 7/22/99 PARPROD := (SELFILE)->PROD_CODE //** P3N - 7/22/99 PARLINE := STR((SELFILE)->LINE_NUM) //** P3N - 7/22/99 IF EMPTY(PARGARR) //** P3N - 7/21/99 HAPPY BDAY DANIEL AADD(PARGARR, {PARORD, PARPROD, PARLINE, ACLONE(G_ARR)}) //** P3N - 7/21/99 HAPPY BDAY DANIEL ELSEIF PARORD == PARGARR[1,1] //** P3N - 7/21/99 HAPPY BDAY DANIEL IF ASCAN(PARGARR,{|X| X[1] == PARORD .AND. ; X[2] == PARPROD .AND. ; X[3] == PARLINE } ) > 0 ELSE //** P3N - 7/21/99 HAPPY BDAY DANIEL AADD(PARGARR, {PARORD, PARPROD, PARLINE, ACLONE(G_ARR)}) //** P3N - 7/21/99 HAPPY BDAY DANIEL ENDIF //** P3N - 7/21/99 HAPPY BDAY DANIEL ELSE //** P3N - 7/21/99 HAPPY BDAY DANIEL PARGARR := {} //** P3N - 7/21/99 HAPPY BDAY DANIEL AADD(PARGARR, {PARORD, PARPROD, PARLINE, ACLONE(G_ARR)}) //** P3N - 7/21/99 HAPPY BDAY DANIEL ENDIF //** P3N - 7/21/99 HAPPY BDAY DANIEL ENDIF //** P3N - 7/21/99 HAPPY BDAY DANIEL ELSE PARORD := (SELFILE)->ORDER_NUM //** P3N - 7/22/99 G_ARR := {} IF EMPTY(PARGARR) //** P3N - 7/21/99 HAPPY BDAY DANIEL ELSEIF PARORD == PARGARR[1,1] //** P3N - 7/21/99 HAPPY BDAY DANIEL ELSE //** P3N - 7/21/99 HAPPY BDAY DANIEL PARGARR := {} //** P3N - 7/21/99 HAPPY BDAY DANIEL ENDIF //** P3N - 7/21/99 HAPPY BDAY DANIEL ENDIF // CHECK THE PRINTING OF HALF SIZE INFORMATION // (IN STOCK ITEMS - NO PRINT, EQUAL LITE MSG IF NORMALLY AN ORIEL.) WK_WIDTH := (SELFILE)->PRD_WIDTH WK_HEIGHT := (SELFILE)->PRD_HEIGHT EQL_PRNT := '' //** P3N - 6/7/99 HS_PRNT := '' PROD_LINE := '' IF (SELFILE)->ORIEL_SIZE$'Y' .AND. ; OR_TOP = 1 .AND. OR_BOT = 1 HS_PRNT := CK_HALF_SIZE(ITEM_CAT_CODE, SELFILE, OPTFILE, {0,0}, RAN_SLID, WK_WIDTH, WK_HEIGHT, EXP_REQ, IS_ALWAYS_SLID, G_ARR ) EQL_PRNT := TRIM(PROD_LINE) + ' ** Equal Lites ** ' ELSE HS_PRNT := CK_HALF_SIZE(ITEM_CAT_CODE, SELFILE, OPTFILE, OR_ARR, RAN_SLID, WK_WIDTH, WK_HEIGHT, EXP_REQ, IS_ALWAYS_SLID, G_ARR) IF OR_TOP <> OR_BOT HS_PRNT := CK_HALF_SIZE(ITEM_CAT_CODE, SELFILE, OPTFILE, OR_ARR, RAN_SLID, WK_WIDTH, WK_HEIGHT, EXP_REQ, IS_ALWAYS_SLID, G_ARR) ENDIF ENDIF IF (SELFILE)->HOW_MEAS = 'BW' .OR. ; (SELFILE)->HOW_MEAS = 'WO' .OR. ; ((SELFILE)->HOW_MEAS = 'NS' .AND. EMPTY((SELFILE)->PAR_PROD)).OR. ; (SELFILE)->IN_STOCK$'Y' PROD_LINE := TRIM(ITEM_LINE) //** P3N 11/27/01 - IOLA PRINT ENTRY SIZE FOR PRODUCTION FRAME FOR CATEGORY TRAP (TRAPEZOID) IF ALLTRIM( ITEM_CAT_CODE ) == 'TRAP' //** P3N - 11/27/01 PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM((SELFILE)->ENTRY_SIZE) //** P3N - 11/27/01 PROD_LINE := PROD_LINE + ' ' + ALLTRIM((SELFILE)->LINE_DESC) //** P3N - 11/27/01 ELSE //** 6/7/99 - P3N - IOLA HALF SIZE PRINT ON NOMINAL SIZE PRODUCTION FRAME IF MHOME_LOC_CODE = 'IOLA' PROD_LINE := TRIM(PROD_LINE) + ' ' + PRNT_SIZE(WK_WIDTH, WK_HEIGHT) PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM(HS_PRNT) PROD_LINE := TRIM(PROD_LINE) + ' ' + MGL_LINE_DESC //** P3N - 12/13/01 ENDIF ENDIF //** P3N - 11/27/01 ELSE //** P3N - 11/23/98 ADDRESS EXPANDER WIDTH FOR SLIDERS - IOLA EXP_WK_WIDTH := (SELFILE)->ACT_WIDTH IF RAN_SLID //** P3N - 12/11/98 ADDRESS PAWNEE REQUEST TO PRINT SIZE BEFORE ITEM //** PROD_LINE := TRIM(ITEM_LINE) + ' ' + PRNT_SIZE(WK_HEIGHT, WK_WIDTH) PROD_LINE := PRNT_SIZE(WK_HEIGHT, WK_WIDTH) //** P3N - 5/26/99 ADDRESS 1/2 SIZE PRINT FOR LINE DESC - IOLA IF !EMPTY(HS_PRNT) .AND. (SELFILE)->IN_STOCK = 'N' PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM(HS_PRNT) ENDIF PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM(ITEM_LINE) //** P3N 11/27/01 - IOLA PRINT ENTRY SIZE FOR PRODUCTION FRAME FOR CATEGORY TRAP (TRAPEZOID) ELSEIF ALLTRIM( ITEM_CAT_CODE ) == 'TRAP' //** P3N - 11/27/01 PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM((SELFILE)->ENTRY_SIZE) //** P3N - 11/27/01 PROD_LINE := PROD_LINE + ' ' + ALLTRIM((SELFILE)->LINE_DESC) //** P3N - 11/27/01 ELSE //** P3N - 12/11/98 ADDRESS PAWNEE REQUEST TO PRINT SIZE BEFORE ITEM //** PROD_LINE := TRIM(ITEM_LINE) + ' ' + PRNT_SIZE(WK_WIDTH, WK_HEIGHT) PROD_LINE := PRNT_SIZE(WK_WIDTH, WK_HEIGHT) //** P3N - 5/26/99 ADDRESS 1/2 SIZE PRINT FOR LINE DESC - IOLA IF !EMPTY(HS_PRNT) .AND. (SELFILE)->IN_STOCK = 'N' PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM(HS_PRNT) ENDIF //** P3N - 12/13/01 ADDRESS DARLENE'S PRODUCTION IF MHOME_LOC_CODE = 'IOLA' IF AT(ALLTRIM(MGL_LINE_DESC),ALLTRIM(ITEM_LINE)) > 0 //** P3N - 01/25/02 - ADDRESS DARLENE'S FRAME PRINTING PROD_LINE := TRIM(PROD_LINE)+'~'+ALLTRIM(ITEM_LINE) //** P3N - 01/25/02 ELSE //** P3N - 01/25/02 PROD_LINE := TRIM(PROD_LINE)+'~'+MGL_LINE_DESC+ '~' + ALLTRIM(ITEM_LINE) ENDIF //** P3N - 01/25/02 ELSE PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM(ITEM_LINE) ENDIF ENDIF ENDIF //* PERRY - 2-11-98 FRENCHDOOR := CK_FRENCH(SELFILE, OPTFILE, ADDL_MODE) IF (SELFILE)->IN_STOCK$'N' IF FRENCHDOOR //* PERRY - 2-11-98 // DO NOT PRINT THE (OS) SIZE FOR FRENCH DOORS - // IT WILL BE ENTERED BY THE USER IN THE OPTIONS, OR LINE MEMO ELSEIF ALLTRIM(ITEM_CAT_CODE) == 'STD'; // STORM DOORS .AND. (SELFILE)->HOW_MEAS = 'OS' PROD_LINE := TRIM(PROD_LINE) + ; STRTRAN(' (OS=' + ALLTRIM( (SELFILE)->ENTRY_SIZE) + ') ', ' ','~') ENDIF ELSE // ONLY IN_STOCK WINDOWS FIT HERE! PROD_LINE := TRIM(PROD_LINE) + ' (S)' ITEM_LINE := TRIM(ITEM_LINE) + ' (S)' ENDIF **** CHECK IF ANY MULLS - CENTER VERTICAL WILL CALC BREAKDOWN, AND **** WILL 2 PIECES GLASS / SASH **** ANY OTHER 'MULL LOC' WILL HAVE NO SASH/GLASS IF ITEM_CAT_CODE = 'STPW' .OR. PAR_CAT_CODE = 'STPW' MULL_ARR := CK_MULLS(SELFILE, OPTFILE) MULL_REQ := MULL_ARR[1] MULL_TYPE := MULL_ARR[2] ENDIF // PRINT THE ORIEL BANNER PROD_LINE := PROD_LINE + EQL_PRNT //** P3N - 6/7/99 IF (SELFILE)->ORIEL_SIZE$'Y' ; .AND. !(OR_TOP = 1 .AND. OR_BOT = 1) PROD_LINE := TRIM(PROD_LINE) + ' **~Oriel~** ' ENDIF IF BALANCE_SIZE <> NIL //**BAL_INFO := ' USE~' + ALLTRIM(BALANCE_SIZE) + '"~BALANCE ' //** P3N - 11/19/99 ADDRESSED BALANCE INFO AT PAWNEE IF MHOME_LOC_CODE = 'PAWNEE' BAL_INFO := '~' + ALLTRIM(BALANCE_SIZE) + '"~BAL ' ELSE BAL_INFO := ' USE~' + ALLTRIM(BALANCE_SIZE) + '"~BALANCE ' ENDIF ELSE BAL_INFO := '' ENDIF PROD_LINE := TRIM(PROD_LINE) + BAL_INFO IF CK_SPEC_PRICE( (CUR_MAST)->CUST_ID, (SELFILE)->PROD_CODE, (CUR_MAST)->ORDER_DATE, 'CUST_BP' ) PR_CUSTID := (CUR_MAST)->CUST_ID ELSE PR_CUSTID := NIL ENDIF // 1. SET UP THE PRODUCTION CONTROL CHUNK // IF MANUFACTURED IN HOUSE, OTHER "CHUNKS" WILL UTILIZE THIS INFO. // IF MADE IN LINDSBORG BUT STOCKED IN KC AND ORDERED IN KC, TREAT AS STOCK IF MLOC_CODE = MHOME_LOC_CODE ELSEIF IN_STOCK$'N' PROD_LINE := TRIM(PROD_LINE) + ' (' + (SELFILE)->HOW_MEAS + ')~' ; + STRTRAN( TRIM( (SELFILE)->ENTRY_SIZE), ' ','~' ) ENDIF // IF NOT ADDL MODE PUT INTO DATA_ARR[1] // IF ADDL_MODE AND MADE HERE, BUT PARENT IS MADE ELSEWHERE // PUT IT IN DATA_ARR[1] ADDIT := .F. IF !ADDL_MODE IF MLOC_CODE = MHOME_LOC_CODE ADDIT := .T. ENDIF ELSE // ADDL_MODE IF MLOC_CODE = MHOME_LOC_CODE ; .AND. PAR_LOC_CODE <> MHOME_LOC_CODE ADDIT := .T. ENDIF // IF IN STOCK ITEM BUT NEED SCREEN, ADD_IT SHOULD BE TRUE FOR SCEEN COPY IF ITEM_CAT_CODE = 'SCREENS' //Create a screen copy regardless of MFG. Loc & stock item IF (MLOC_CODE = MHOME_LOC_CODE .AND. (SELFILE)->IN_STOCK <> 'Y') ELSE DO_SCRNS_ONLY:=.T. ADDIT := .T. ENDIF ENDIF ENDIF // 1. DATA_ARR[1] IS THE PRODUCTION PART WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'C', SELFILE ) IF ADDIT AADD(DATA_ARR[1], {MLOC_CODE, PRNT_DESC, PROD_LINE, ; AMTVAR, DISC_ARR, PROD_MEMO, QUANTITY ,WHERE_FROM, MLINE, ; PROD_CODE, SHP_QTY, XFACTOR, WORKSPECS, NIL , ; DO_SCRNS_ONLY, MPWHERE, INV_QTY }) ENDIF // 9. DATA_ARR[9] IS THE PRODUCTION REPRESENTATION OF ALL DELIVERY/INVOICE ITEMS/CONTROL DESK IF !ADDL_MODE AADD(DATA_ARR[9], {MLOC_CODE, PRNT_DESC, PROD_LINE, ; AMTVAR, DISC_ARR, PROD_MEMO, QUANTITY ,WHERE_FROM, MLINE, ; PROD_CODE, SHP_QTY, XFACTOR, WORKSPECS, NIL, ; DO_SCRNS_ONLY, MPWHERE, INV_QTY }) ENDIF // 7. INV (CUSOMER INVOICE) PRINT LINES IF WHERE_FROM = 'OL' SELECT (SELFILE) ITEMPRNT1 := PRNT_SIZE(DECVAL(WIDTH), DECVAL(HEIGHT)) ITEMPRNTX := ALLTRIM( (SELFILE)->ENTRY_SIZE) ITEM_LINE := '' ITEM_LINE := ITEM_LINE + ' (' + (SELFILE)->HOW_MEAS + ') ' //** P3N - 3/5/99 REQUESTED BY LAURA @ PAWNEE IF ITEM_CAT_CODE = 'HYLIT' //** P3N - 3/5/99 IF (SELFILE)->HOW_MEAS == 'NS' //** P3N - 3/5/99 ITEM_LINE := ' Model# ' //** P3N - 3/5/99 ENDIF //** P3N - 3/5/99 ENDIF //** P3N - 3/5/99 ITEM_LINE := ITEM_LINE + ITEMPRNTX IF FRENCHDOOR // DO NOT PRINT THE OPENING SIZE ON FRENCH DOORS - PERRY 2-11-98 ITEM_LINE := '' ENDIF //** P3N - 6/17/99 ADD LINE ITEM GLASS DESC TO INV/DEL... FOR IOLA IF AT(MGL_LINE_DESC, ITEM_LINE) = 0 //** P3N - 6/17/99 ITEM_LINE := ITEM_LINE + ' ' + TRIM(MGL_LINE_DESC) //** P3N - 6/17/99 ENDIF IF !EMPTY( (SELFILE)->LINE_DESC ) ITEM_LINE := ITEM_LINE + '~' + TRIM( (SELFILE)->LINE_DESC) + ' ' //** P3N - 4/2/98 //** MOVED TO DENOTE '(S)' REGARDLESS OF THE ACTUAL SIZE! IF (SELFILE)->IN_STOCK$'Y' // ONLY IN_STOCK WINDOWS FIT HERE! ITEM_LINE := TRIM(ITEM_LINE) + '~(S)' ENDIF ENDIF ITEMPRNT2 := ALLTRIM(PRNT_SIZE(ACT_WIDTH, ACT_HEIGHT)) IF ALLTRIM(ITEMPRNT1) == ALLTRIM(ITEMPRNT2) ELSEIF (SELFILE)->IN_STOCK$'Y' // ONLY IN_STOCK WINDOWS FIT HERE! //** P3N - 4/9/98 IS '(S)' ALREADY DENOTED FOR STOCK WINDOWS! IF AT( '(S)', ITEM_LINE) = 0 //** P3N - 4/9/98 NO - INCLUDE THE '(S)' TO DENOTE STOCK! ITEM_LINE := TRIM(ITEM_LINE) + '~(S)' ENDIF ELSEIF ITEM_CAT_CODE = 'STD' IF MHOME_LOC_CODE = 'KC' // DO NOT PRINT DOOR SIZE ON THE ORDER FOR KC - 10-01-97 ELSE ITEM_LINE := TRIM(ITEM_LINE) + ' (DOOR~SIZE=~' + ITEMPRNT2 + ')' ENDIF ENDIF ITEM_LINE := ITEM_LINE + BAL_INFO // PRINT THE ORIEL BANNER IF (SELFILE)->ORIEL_SIZE$'Y' ; .AND. !(OR_TOP = 1 .AND. OR_BOT = 1) WORKVAR := HS_PRNT IF WORKVAR = NIL WORKVAR := '' ENDIF //** - P3N 2/26/98 REMOVED THE HALF-SIZE PRINTING PER SCOTT - KC //** - P3N 7/7/98 REINSTATED THE HALF-SIZE PRINTING LINDS/IOLA IC POS //** - P3N 7/24/98 REMOVED THE HALF-SIZE PRINTING PER SCOTT/ellen - KC IF MHOME_LOC_CODE = 'KC' //** - P3N 11/11/98 REINSTATED THE HALF-SIZE PRINTING AT KC FOR //** - EVERYTHING NOT PRODUCED AT KC IF AT('**Oriel**', ITEM_LINE) > 0 ELSE ITEM_LINE := TRIM(ITEM_LINE) + ' ' + ' **~Oriel~** ' ENDIF IF MHOME_LOC_CODE == MLOC_CODE ELSE ITEM_LINE := TRIM(ITEM_LINE) + ' ' + WORKVAR ENDIF ELSEIF AT('**Oriel**', ITEM_LINE) > 0 ITEM_LINE := TRIM(ITEM_LINE) + ' ' + WORKVAR ELSE ITEM_LINE := TRIM(ITEM_LINE) + ' ' + ' **~Oriel~** ' + WORKVAR ENDIF ENDIF ITEM_LINE := ITEM_LINE + SPACE( 60 - LEN(ITEM_LINE) ) WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'V' , SELFILE ) AADD(DATA_ARR[7], {MLOC_CODE, PRNT_DESC, ; ITEM_LINE, AMTVAR, DISC_ARR, PROD_MEMO, ; QUANTITY, WHERE_FROM, MLINE, PROD_CODE, ; SHP_QTY, XFACTOR, WORKSPECS, NIL, ; DO_SCRNS_ONLY, MPWHERE, INV_QTY}) ENDIF // THE FOLLOWING "CHUNKS" ONLY APPLY TO IN-HOUSE PRODUCTION ITEMS // WHICH ARE NOT IN STOCK - EXCEPT for the screens. ALL screens // will get a SCREEN copy regardless of the MFG. location or whether // it is a STOCK item. // THE SIZE AND SPECS ON HERE ARE THE PRODUCTION FRAME SAW SETTINGS // 2. SET UP THE FRAME COPY CHUNK IF ADDL_MODE ELSE // Get the cutting specs for the screen. WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'N', SELFILE ) IF EMPTY(WORKSPECS) //Create ONLY a screen copy when NOT same MFG. Loc & stock item! 7-30-97 IF (MLOC_CODE = MHOME_LOC_CODE .AND. (SELFILE)->IN_STOCK <> 'Y') ELSE DO_SCRNS_ONLY:=.T. ENDIF ENDIF ENDIF IF (MLOC_CODE = MHOME_LOC_CODE .AND. (SELFILE)->IN_STOCK <> 'Y') .OR. ; DO_SCRNS_ONLY DO CASE CASE ITEM_CAT_CODE = 'SCREENS' CASE ITEM_CAT_CODE = 'STORMS' CASE ITEM_CAT_CODE = 'EXPAND' CASE ITEM_CAT_CODE = 'STPW' OTHERWISE WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'F', SELFILE ) IF DO_SCRNS_ONLY ELSE // BYPASS THE FRAME COPY AADD(DATA_ARR[2], {MLOC_CODE, PRNT_DESC, PROD_LINE, AMTVAR, ; DISC_ARR , PROD_MEMO, QUANTITY ,WHERE_FROM, MLINE, ; PROD_CODE, SHP_QTY, XFACTOR, WORKSPECS, NIL, ; DO_SCRNS_ONLY, MPWHERE, INV_QTY }) ENDIF ENDCASE // 3. SET UP THE SASH COPY CHUNK // DON'T WORRY ABOUT RANCH SLIDERS - STORMS ONLY (NO SASH ON STROMS) WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'I', SELFILE ) IF (PRODUCT->MACH_SASHW = 0 .AND. PRODUCT->MACH_SASHH == 0) ; .AND. WORKSPECS = NIL // NO SASH ADJUSTMENT -- NO SASH COPY PRINTED ELSEIF !MULL_REQ .OR. (MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL') WK_QTY := (SELFILE)->QUANTITY IF RAN_SLID WK_HEIGHT := PRODUCT->MACH_SASHW + (SELFILE)->ACT_WIDTH WK_WIDTH := PRODUCT->MACH_SASHH + (SELFILE)->ACT_HEIGHT ELSE WK_WIDTH := PRODUCT->MACH_SASHW + (SELFILE)->ACT_WIDTH WK_HEIGHT := PRODUCT->MACH_SASHH + (SELFILE)->ACT_HEIGHT ENDIF IF MULL_REQ // ONLY CENTER VERTICAL TYPE MULLS GOT THIS FAR WK_QTY := WK_QTY * 2 WK_WIDTH := WK_WIDTH - MMULL_SASH ITEM_LINE := PRNT_SIZE(WK_WIDTH/2, WK_HEIGHT) ELSE ITEM_LINE := PRNT_SIZE(WK_WIDTH, WK_HEIGHT) ENDIF //** SET SASH LINE DESCR. PRINTING FOR ATTRIBUTES - LINDS IF EMPTY(SASH_LINE) //** P3N - 5/2/00 SASH_LINE := ITEM_LINE //** P3N - 5/2/00 ENDIF //** P3N - 5/2/00 IF DO_SCRNS_ONLY ELSE // BYPASS THE SASH COPY //**P3N5200 AADD(DATA_ARR[3], {MLOC_CODE, PRNT_DESC, ITEM_LINE, AMTVAR,; AADD(DATA_ARR[3], {MLOC_CODE, PRNT_DESC, SASH_LINE, AMTVAR, ; DISC_ARR, PROD_MEMO, (SELFILE)->QUANTITY, WHERE_FROM, ; MLINE, PROD_CODE, SHP_QTY, XFACTOR, WORKSPECS, ; NIL, DO_SCRNS_ONLY, MPWHERE, INV_QTY}) ENDIF ENDIF // 4. SET UP THE GLASS COPY CHUNK // NO RANCH SLIDER CONCERNS BECAUSE ONLY APPLICABLE TO STORMS // HOWEVER, IF ALWAYS A SLIDER, SPECIAL PROCESSING IS REQUIRED // NOTE THAT THE QUANTITY IS CHANGED TO REFLECT XTRA WINDOWS HERE // SO WE PRINT THE TOTAL REQUIRED. NO REFERENCE TO TWIN, ETC IN GLASS DESC! IF MHOME_LOC_CODE = 'KC' MWORK_DESC := MLINE_DESC ELSE MWORK_DESC := ' ' ENDIF TOTWIND := XFACTOR + 1 SELECT CATEGORY S_REC := RECNO() IF !EMPTY(PAR_CAT_CODE) SEEK PAR_CAT_CODE ELSE SEEK ITEM_CAT_CODE ENDIF MNUM_GLASS := CATEGORY->NUM_GLASS GOTO S_REC SELECT (SELFILE) GLT_WD = NIL GLT_HT = NIL GLT_QTY = 0 GLB_WD = NIL GLB_HT = NIL GLB_QTY = 0 WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'G', SELFILE ) IF (PRODUCT->MACH_GLASW = 0 .AND. PRODUCT->MACH_GLASH == 0 ; .AND. WORKSPECS = NIL) ; .OR. ( ALLTRIM(ITEM_CAT_CODE) = 'STORMS' .AND. ; MHOME_LOC_CODE <> 'IOLA' ) // NO GLASS ADJUSTMENT -- NO GLASS COPY PRINTED // STORM WINDOWS DON'T GET A GLASS ADJUSTMENT - BOXES USED IN // THE STORM COPY. FORCE TO LOGIC BELOW ELSE IF ITEM_CAT_CODE = 'STORMS' .AND. MHOME_LOC_CODE = 'IOLA' DO_GLASS_PRNT := .F. ELSE DO_GLASS_PRNT := .T. ENDIF WK_QTY := (SELFILE)->QUANTITY * TOTWIND IF !MULL_REQ .OR. (MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL') MNUM_GLASS := CATEGORY->NUM_GLASS IF MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL' MNUM_GLASS := MNUM_GLASS * 2 // SINCE A MULL, EXTRA GLASS REQUIRED ENDIF IF (GLASS_COPY .AND. CATEGORY->(DBSEEK(ITEM_CAT_CODE)) ; .AND. MNUM_GLASS > 0) .OR. ; (ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; .OR. ALLTRIM(ITEM_CAT_CODE) == 'STPW' ) WK_ADJ_WIDTH := PRODUCT->MACH_GLASW WK_ADJ_HEIGHT := PRODUCT->MACH_GLASH // WK_WIDTH/WK_HEIGHT REPRESENT ENTIRE "GLASS AREA REQUIRED" // ALL AREAS ARE 'NON SLIDER SPECIFIC NOW' //** IF RAN_SLID IF RAN_SLID .OR. IS_ALWAYS_SLID //** P3N - 2/8/99 WK_HEIGHT := WK_ADJ_WIDTH + (SELFILE)->ACT_WIDTH WK_WIDTH := WK_ADJ_HEIGHT + (SELFILE)->ACT_HEIGHT ELSE WK_WIDTH := WK_ADJ_WIDTH + (SELFILE)->ACT_WIDTH WK_HEIGHT := WK_ADJ_HEIGHT + (SELFILE)->ACT_HEIGHT ENDIF IF MULL_REQ WK_WIDTH := WK_WIDTH - MMULL_GLASS ENDIF IF (OR_TOP = 0 .AND. OR_BOT = 0) .OR. ; // EQUAL LITE WINDOW (OR_TOP = 1 .AND. OR_BOT = 1) // 2 PIECES OF GLASS AT 1/2 SIZE EACH IF MULL_REQ .OR. IS_ALWAYS_SLID WK_WIDTH := WK_WIDTH / MNUM_GLASS ELSE WK_HEIGHT := WK_HEIGHT / MNUM_GLASS ENDIF WK_QTY := WK_QTY * MNUM_GLASS GLT_QTY := WK_QTY GLB_QTY := 0 GLT_WD = WK_WIDTH GLT_HT = WK_HEIGHT GLB_WD = WK_WIDTH GLB_HT = WK_HEIGHT IF (PRODUCT->MACH_GLASW = 0 .AND. PRODUCT->MACH_GLASH == 0) GLASS_PRNT = '' IF EMPTY(BAL_INFO) // NO BALANCE SIZE INFO - NOT A STD_SASH // DETERMINE THE GLASS SIZES FOR STD_SASH ELSE GLASS_PRNT := PRNT_SIZE(GLT_WD, GLT_HT, ' x ') ENDIF ELSE GLASS_PRNT := PRNT_SIZE(WK_WIDTH, WK_HEIGHT) ENDIF IF (SELFILE)->(FIELDPOS('LDESC_COPY')) > 0 //** P3N - 5/4/99 IF AT('G', (SELFILE)->LDESC_COPY) > 0 //** P3N - 5/4/99 IF EMPTY(GLASS_PRNT) //** P3N - 5/10/99 WK_QTY := 0 //** P3N - 5/10/99 ENDIF //** P3N - 5/10/99 GLASS_PRNT := GLASS_PRNT +' '+ MGL_LINE_DESC //** P3N - 6/7/99 ENDIF //** P3N - 5/4/99 ENDIF //** P3N - 5/4/99 IF DO_SCRNS_ONLY ELSE // BYPASS THE GLASS COPY IF DO_GLASS_PRNT AADD(DATA_ARR[4], {MLOC_CODE, PRNT_DESC, GLASS_PRNT, ; AMTVAR, DISC_ARR , PROD_MEMO, ; WK_QTY ,WHERE_FROM, ; STR(VAL(MLINE)+.00,7,2), PROD_CODE, ; SHP_QTY, 0, WORKSPECS, MWORK_DESC, ; DO_SCRNS_ONLY, MPWHERE, INV_QTY }) ENDIF ENDIF ELSE // ORIEL WINDOW GLASS_LINE := '' GLT_QTY := QUANTITY GLB_QTY := QUANTITY GLT_WD = WK_WIDTH GLT_HT = WK_HEIGHT GLB_WD = WK_WIDTH GLB_HT = WK_HEIGHT IF OR_TOP > 0 // DO TOP GLASS FIRST (OR LEFT GLASS ON SLIDER) IF OR_GLASS <> 0 // PREDETERMINED SIZE FOR TOP IF IS_ALWAYS_SLID GLT_WD = OR_GLASS GLT_HT = WK_HEIGHT // ADJUSTED ABOVE FOR CUT ELSE GLT_WD = WK_WIDTH // ADJUSTED ABOVE FOR CUT GLT_HT = OR_GLASS ENDIF ELSE IF IS_ALWAYS_SLID GLT_WD = (SELFILE)->ACT_WIDTH - OR_BOT + ( WK_ADJ_WIDTH / 2 ) GLT_HT = WK_HEIGHT // ADJUSTED ABOVE FOR CUT ELSE GLT_WD = WK_WIDTH // ADJUSTED ABOVE FOR CUT GLT_HT = (SELFILE)->ACT_HEIGHT - OR_BOT + ( WK_ADJ_HEIGHT / 2 ) ENDIF IF EMPTY(BAL_INFO) //** P3N - 03/30/98 // NO BALANCE SIZE INFO - NOT A STD_SASH ELSEIF EMPTY(WORKSPECS) // NO CUTTING SPEC INFO ELSE // DETERMINE THE GLASS TOP SIZE FOR STD_SASH IF LEN(WORKSPECS) < 2 .OR. EMPTY(WORKSPECS[1,6]) .OR. EMPTY(WORKSPECS[2,6]) ERR_BOX(' Order line - ' + STR( (SELFILE)->LINE_NUM, 3) + ; ' / Model - ' + (SELFILE)->PROD_CODE + ' Contains', ; ' Invalid or missing GLASS Cutting Specs! ', ' ', ; ' PRODUCTION GLASS COPY may NOT be accurate!') ELSE GLT_WD := EVAL_MATH( WORKSPECS[1,6], G_ARR, '_CUT_SP', ; WORKSPECS[1,1], SELFILE,'CUT') ADJ_HT := EVAL_MATH( WORKSPECS[2,6], G_ARR, '_CUT_SP', ; WORKSPECS[2,1], SELFILE,'CUT') //** GLT_HT := ADJ_HT - OR_BOT //** P3N - 07/05/01 GLT_HT := ADJ_HT - OR_BOT - STDADJ //** P3N - 07/05/01 WORKSPECS[2,7] := GLT_HT ENDIF ENDIF ENDIF IF (PRODUCT->MACH_GLASW = 0 .AND. PRODUCT->MACH_GLASH == 0) GLASS_PRNT := '' IF EMPTY(BAL_INFO) //** P3N - 03/30/98 // NO BALANCE SIZE INFO - NOT A STD_SASH // DETERMINE THE GLASS SIZES FOR STD_SASH IF RAN_SLID //** P3N - 02/01/99 GLASS_PRNT := PRNT_SIZE(GLT_WD, GLT_HT, ' x ') ELSEIF IS_ALWAYS_SLID //** P3N - 02/02/99 GLASS_PRNT := PRNT_SIZE(GLT_WD, GLT_HT, ' x ') ENDIF ELSE GLASS_PRNT := PRNT_SIZE(GLT_WD, GLT_HT, ' x ') ENDIF ELSE GLASS_PRNT := GLASS_LINE + PRNT_SIZE(GLT_WD, GLT_HT) + EX_DESC ENDIF IF (SELFILE)->(FIELDPOS('LDESC_COPY')) > 0 //** P3N - 5/4/99 IF AT('G', (SELFILE)->LDESC_COPY) > 0 //** P3N - 5/4/99 IF EMPTY(GLASS_PRNT) //** P3N - 5/10/99 WK_QTY := 0 //** P3N - 5/10/99 ENDIF //** P3N - 5/10/99 //** GLASS_PRNT := GLASS_PRNT + MLINE_DESC //** P3N - 5/4/99 GLASS_PRNT := GLASS_PRNT+' '+ MGL_LINE_DESC //** P3N - 6/7/99 ENDIF //** P3N - 5/4/99 ENDIF //** P3N - 5/4/99 IF DO_SCRNS_ONLY ELSE // BYPASS THE GLASS COPY IF DO_GLASS_PRNT AADD(DATA_ARR[4], {MLOC_CODE, PRNT_DESC, GLASS_PRNT, ; AMTVAR, DISC_ARR , PROD_MEMO, ; WK_QTY ,WHERE_FROM, ; STR(VAL(MLINE)+.00,7,2), PROD_CODE, ; SHP_QTY, 0, WORKSPECS, MWORK_DESC, ; DO_SCRNS_ONLY, MPWHERE, INV_QTY}) ENDIF ENDIF // DO BOTTOM PART NEXT. IF OR_GLASS <> 0 IF IS_ALWAYS_SLID GLB_WD = WK_WIDTH - OR_GLASS GLB_HT = WK_HEIGHT ELSE GLB_WD = WK_WIDTH GLB_HT = WK_HEIGHT - OR_GLASS ENDIF ELSE IF IS_ALWAYS_SLID GLB_WD = (SELFILE)->ACT_WIDTH - OR_TOP + ( WK_ADJ_WIDTH / 2 ) GLB_HT = WK_HEIGHT // ADJUSTED ABOVE FOR CUT ELSE GLB_WD = WK_WIDTH // ADJUSTED ABOVE FOR CUT GLB_HT = (SELFILE)->ACT_HEIGHT - OR_TOP + ( WK_ADJ_HEIGHT / 2 ) ENDIF ENDIF IF EMPTY(BAL_INFO) //** P3N - 03/30/98 // NO BALANCE SIZE INFO - NOT A STD_SASH ELSEIF EMPTY(WORKSPECS) // NO CUTTING SPEC INFO ELSE // DETERMINE THE GLASS BOTT SIZE FOR STD_SASH IF LEN(WORKSPECS) < 2 .OR. EMPTY(WORKSPECS[1,6]) .OR. EMPTY(WORKSPECS[2,6]) ELSE GLB_WD := EVAL_MATH( WORKSPECS[1,6], G_ARR, '_CUT_SP', ; WORKSPECS[1,1], SELFILE,'CUT') ADJ_HT := EVAL_MATH( WORKSPECS[2,6], G_ARR, '_CUT_SP', ; WORKSPECS[2,1], SELFILE,'CUT') GLB_HT := ADJ_HT - OR_TOP WORKSPECS[2,7] := GLB_HT ENDIF ENDIF IF (PRODUCT->MACH_GLASW = 0 .AND. PRODUCT->MACH_GLASH == 0) GLASS_PRNT := '' IF EMPTY(BAL_INFO) //** P3N - 03/30/98 // NO BALANCE SIZE INFO - NOT A STD_SASH ELSE // DETERMINE THE GLASS SIZES FOR STD_SASH GLASS_PRNT := PRNT_SIZE(GLB_WD, GLB_HT, ' x ') ENDIF ELSE GLASS_PRNT := GLASS_LINE + PRNT_SIZE(GLB_WD, GLB_HT) + EX_DESC ENDIF IF (SELFILE)->(FIELDPOS('LDESC_COPY')) > 0 //** P3N - 5/4/99 IF AT('G', (SELFILE)->LDESC_COPY) > 0 //** P3N - 5/4/99 IF EMPTY(GLASS_PRNT) //** P3N - 5/10/99 WK_QTY := 0 //** P3N - 5/10/99 ENDIF //** P3N - 5/10/99 //** GLASS_PRNT := GLASS_PRNT + MLINE_DESC //** P3N - 5/4/99 GLASS_PRNT := GLASS_PRNT+' '+ MGL_LINE_DESC //** P3N - 6/7/99 ENDIF //** P3N - 5/4/99 ENDIF //** P3N - 5/4/99 IF DO_SCRNS_ONLY ELSE // BYPASS THE GLASS COPY // DON'T DO SECOND LINE IF ALL SPECS COME FROM CUT_SPEC_ARR IF DO_GLASS_PRNT .AND. ; WK_ADJ_WIDTH <> 0 .AND. ; WK_ADJ_HEIGHT <> 0 AADD(DATA_ARR[4], {MLOC_CODE, PRNT_DESC, GLASS_PRNT, ; AMTVAR, DISC_ARR , PROD_MEMO, ; WK_QTY ,WHERE_FROM, ; STR(VAL(MLINE)+.00,7,2), PROD_CODE,; SHP_QTY, 0, WORKSPECS, MWORK_DESC,; DO_SCRNS_ONLY, MPWHERE, INV_QTY }) ENDIF ENDIF ELSE // ORIEL BOTTOM IS > 0 AND ORIEL TOP = 0 // SHOULDN'T EVER GET TO HERE-ADJUSTED IN CK_ORIEL() //** P3N - 9/29/98 ERR_BOX(' Order line - ' + STR( (SELFILE)->LINE_NUM, 3) + ; ' / Model - ' + (SELFILE)->PROD_CODE + ' Contains', ; ' Invalid ORIEL Measurements - Oriel Top can NOT be 0 !', ' ', ; ' PRODUCTION BREAKDOWNS may NOT be accurate!') ENDIF ENDIF ENDIF ENDIF ENDIF // 5. PROD SCREEN PRINT LINES IF ADDL_MODE ELSE IF XL_EXISTS('SCREENS') BYPASS_SCREEN_PAR := .T. ELSE BYPASS_SCREEN_PAR := .F. ENDIF ENDIF BO_ITEM := '(' + (SELFILE)->HOW_MEAS + ') ' BO_ITEM := BO_ITEM + (SELFILE)->ENTRY_SIZE IF BYPASS_SCREEN_PAR ELSE WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'N', SELFILE ) MNUM_SCREEN := CATEGORY->NUM_SCREEN IF MNUM_SCREEN = 0 MNUM_SCREEN := 1 ENDIF IF ALLTRIM(ITEM_CAT_CODE) == 'SCREENS' ; .OR. WORKSPECS <> NIL AADD(DATA_ARR[5], SCREEN_CHUNK( SELFILE, ADDL_MODE, WORKSPECS, ; MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; AMTVAR, DISC_ARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; .F., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR) ) //** P3N - 7/21/99 ARE THERE FLANKERS TO PROCESS FOR BACKORDER IF ADDL_MODE PARORD := (SELFILE)->ORDER_NUM //** P3N - 7/22/99 PARPROD := (SELFILE)->PAR_PROD //** P3N - 7/22/99 PARLINE := STR((SELFILE)->LINE_NUM) //** P3N - 7/22/99 PARELM := ASCAN(PARGARR,{|X| X[1] == PARORD .AND. ; X[2] == PARPROD .AND. ; X[3] == PARLINE } ) IF PARELM > 0 FLNKSPECS := GET_THESE_SPECS( PARGARR[PARELM,4], CUT_SPEC_ARR, 'N', 'ORD_LINES') GETFLANK := PARGARR[PARELM,4] ELSE FLNKSPECS := {} GETFLANK := {} ENDIF FLANKSCR := BKO_FLANKSCR(GETFLANK) IF FLANKSCR[1] //**FLANKER SCREENS TO CONSIDER ON BACKORDER FSARR := ACLONE(DISC_ARR) FSARR[3] := FLANKSCR[2] //** AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, .F., WORKSPECS, ; AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, .F., FLNKSPECS, ; MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; AMTVAR, FSARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR, FLANKSCR) ) ENDIF //** P3N - 1/27/99 ENDIF //** P3N - 7/22/99 ELSE SCRNINFO := TOL_SCREENS(SELFILE) //** P3N - 9/16/98 IF EMPTY(SCRNINFO) //** P3N - 9/16/98 ELSE //** P3N - 9/16/98 IF EMPTY(SCRNINFO[1]) //TOL SCREEN QTY //** P3N - 9/16/98 ELSE //** P3N - 9/16/98 //** P3N BACKORDER SCREEN COPIES WHEN NO CUTTING SPECS AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, ADDL_MODE, WORKSPECS, ; MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; AMTVAR, DISC_ARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR) ) //** P3N - 1/27/99 ARE THERE FLANKERS TO PROCESS FOR BACKORDER FLANKSCR := BKO_FLANKSCR(G_ARR) IF FLANKSCR[1] //**FLANKER SCREENS TO CONSIDER ON BACKORDER FSARR := ACLONE(DISC_ARR) FSARR[3] := FLANKSCR[2] AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, ADDL_MODE, WORKSPECS, ; MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; AMTVAR, FSARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR, FLANKSCR) ) ENDIF //** P3N - 1/27/99 ENDIF //** P3N - 9/16/98 ENDIF //** P3N - 9/16/98 ENDIF ENDIF // 6. PROD STORMS PRINT LINES WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'S', SELFILE ) IF (ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; .OR. ALLTRIM(ITEM_CAT_CODE) == 'STPW') ; .OR. WORKSPECS <> NIL IF ADDL_MODE .AND. ALLTRIM(ITEM_CAT_CODE) == 'SCREENS' //** P3N - 3/24/99 //** DO NOT PRODUCE STORM COPY WHEN ADDL SCREEN PRODUCT ELSE WK_QTY := (SELFILE)->QUANTITY IF (SELFILE)->CLEAR_SS$'Y' .AND. MHOME_LOC_CODE = 'IOLA' GLASS_PRNT := BEST_BOX(GLT_QTY, GLT_WD, GLT_HT, GLB_QTY, GLB_WD, GLB_HT) ELSE GLASS_PRNT := '' ENDIF IF ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; .OR. ALLTRIM(ITEM_CAT_CODE) == 'STPW' STORM_PRNT := PROD_LINE + ' ' + GLASS_PRNT ELSE STORM_PRNT := '' ENDIF IF DO_SCRNS_ONLY //** P3N - 9/11/98 //** THIS IS FOR BACKORDER STORMS NOT AT THE MFG. LOC //** AADD(DATA_ARR[11], {MLOC_CODE, PRNT_DESC, STORM_PRNT, AMTVAR, ; AADD(DATA_ARR[11], {MLOC_CODE, PRNT_DESC, ITEM_LINE, AMTVAR, ; DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; WORKSPECS, NIL, DO_SCRNS_ONLY, MPWHERE, INV_QTY} ) ELSE IF !MULL_REQ .OR. (MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL') AADD(DATA_ARR[6], {MLOC_CODE, PRNT_DESC, STORM_PRNT, AMTVAR, ; DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; WORKSPECS, NIL, DO_SCRNS_ONLY, MPWHERE, INV_QTY} ) ELSE AADD(DATA_ARR[6], {MLOC_CODE, PRNT_DESC, ; PROD_LINE + ' ** MANUAL BREAKDOWN REQUIRED Due to MULLS **', ; AMTVAR, DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; WORKSPECS, NIL, DO_SCRNS_ONLY , MPWHERE, INV_QTY}) ENDIF ENDIF ENDIF ENDIF // 8. EXPANDERS REQUIRED SECTION // ONLY INCLUDE THE ORDER LINE ITEMS (EXTRAS APPEAR IN THE DESCRIPTION) WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'E', SELFILE ) IF MHOME_LOC_CODE <> 'LINDS' ; .AND. ( EXP_REQ .OR. WORKSPECS <> NIL ) // EXPANDER SIZES ARE STORED AS ACTUAL CALLED IN SIZES WK_QTY := (SELFILE)->QUANTITY IF ITEM_CAT_CODE = 'EXPANDR' //** P3N - 9/30/99 //** IF CATEGORY EXPANDER THE SIZE WILL //** P3N - 9/30/99 //** BE DEFINED IN THE CUTTING SPECS. //** P3N - 9/30/99 PRNT_EXP := '' //** P3N - 9/30/99 ELSE //** P3N - 9/30/99 PRNT_EXP := PRNT_SIZE( EXP_WK_WIDTH, NIL) ENDIF //** P3N - 9/30/99 IF DO_SCRNS_ONLY ELSE // BYPASS THE EXPANDER COPY AADD(DATA_ARR[8], {MLOC_CODE, PRNT_DESC, PRNT_EXP, AMTVAR, ; DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; WORKSPECS, NIL, DO_SCRNS_ONLY, MPWHERE, INV_QTY}) ENDIF ENDIF ELSE //** P3N BACKORDER SCREEN COPIES WHEN MFG. LOC IS NOT THE SAME BO_ITEM := '(' + (SELFILE)->HOW_MEAS + ') ' BO_ITEM := BO_ITEM + (SELFILE)->ENTRY_SIZE CK_BKO_SCRNS := .F. IF ALLTRIM(ITEM_CAT_CODE) == 'SCREENS' //** P3N 9/15/98 - HAPY BDAY MOM! IF EMPTY(DATA_ARR[5]) CK_BKO_SCRNS := .T. ELSEIF EMPTY( ASCAN(DATA_ARR[5], {|X| X[9] + X[10] == ; STR((SELFILE)->LINE_NUM, 3) + (SELFILE)->PROD_CODE}) ) CK_BKO_SCRNS := .T. ELSE CK_BKO_SCRNS := .F. ENDIF ELSE SCRNINFO := TOL_SCREENS(SELFILE) //** P3N - 9/16/98 IF EMPTY(SCRNINFO) //** P3N - 9/16/98 ELSE //** P3N - 9/16/98 IF EMPTY(SCRNINFO[1]) //TOL SCREEN QTY //** P3N - 9/16/98 ELSE //** P3N - 9/16/98 //** P3N BACKORDER SCREEN COPIES WHEN NO CUTTING SPECS AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, ADDL_MODE, WORKSPECS, ; MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; AMTVAR, DISC_ARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR) ) //** P3N - 1/27/99 ARE THERE FLANKERS TO PROCESS FOR BACKORDER FLANKSCR := BKO_FLANKSCR(G_ARR) IF FLANKSCR[1] //**FLANKER SCREENS TO CONSIDER ON BACKORDER FSARR := ACLONE(DISC_ARR) FSARR[3] := FLANKSCR[2] AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, ADDL_MODE, WORKSPECS, ; MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; AMTVAR, FSARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR, FLANKSCR) ) ENDIF //** P3N - 1/27/99 ENDIF //** P3N - 9/16/98 ENDIF //** P3N - 9/16/98 ENDIF //** 9/15/98 - HAPPY BDAY MOM IF XL_EXISTS('SCREENS') //** USE THE ADDL_LINES FOR SCREEN BACKORDER STUFF! ELSEIF CK_BKO_SCRNS //** WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'N', SELFILE ) WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'B', SELFILE ) IF ALLTRIM(ITEM_CAT_CODE) == 'SCREENS' .OR. !EMPTY(WORKSPECS) AADD( DATA_ARR[10], SCREEN_CHUNK(SELFILE, ADDL_MODE, WORKSPECS, ; MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; AMTVAR, DISC_ARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR) ) ENDIF ENDIF //** P3N BACKORDER STORM COPIES WHEN MFG. LOC IS NOT THE SAME // 11. PROD STORMS PRINT LINES FOR BACKORDERS WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'S', SELFILE ) IF ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; .OR. ALLTRIM(ITEM_CAT_CODE) == 'STPW' ; .OR. WORKSPECS <> NIL WK_QTY := (SELFILE)->QUANTITY IF (SELFILE)->CLEAR_SS$'Y' .AND. MHOME_LOC_CODE = 'IOLA' GLASS_PRNT := BEST_BOX(GLT_QTY, GLT_WD, GLT_HT, GLB_QTY, GLB_WD, GLB_HT) ELSE GLASS_PRNT := '' ENDIF IF ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; .OR. ALLTRIM(ITEM_CAT_CODE) == 'STPW' STORM_PRNT := PROD_LINE + ' ' + GLASS_PRNT ELSE STORM_PRNT := '' ENDIF IF !MULL_REQ .OR. (MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL') AADD(DATA_ARR[11], {MLOC_CODE, PRNT_DESC, STORM_PRNT, AMTVAR, ; DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; WORKSPECS, NIL, DO_SCRNS_ONLY, MPWHERE, INV_QTY} ) ELSE AADD(DATA_ARR[11], {MLOC_CODE, PRNT_DESC, ; PROD_LINE + ' ** MANUAL BREAKDOWN REQUIRED Due to MULLS **', ; AMTVAR, DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; WORKSPECS, NIL, DO_SCRNS_ONLY , MPWHERE, INV_QTY}) ENDIF ENDIF // END STORMS ENDIF // ENDIF (MLOC_CODE = MHOME_LOC_CODE) DO_SCRNS_ONLY := .F. //7-30-97 SELECT (SELFILE) SKIP 1 ENDDO //** (CUR_MAST)->ORD_L_TTL and (CUR_MAST)->QUOTE_PRIC ( QUOTED PRICE ) //** P3N - 09/26/06 ADD THE FULE SURCHARGE INTO THE GL_ARR AS NECESSARY IF ADDL_MODE // NO FUEL SURCHARGE ON ADDL LINE ITEM (XL) - ONLY ON OL PASS ELSEIF EMPTY( (CUR_MAST)->FUEL_CHRG ) //** P3N - 09/26/06 //** No Fuel Surcharge - Continue //** may be a del_chg (gl-521 amt) from category [$frt_amt or %frt_pct]? ELSE //** P3N - 09/26/06 ELEM := ASCAN(GL_ARR, {|X| X[1] = '521 '} ) //** P3N - 09/26/06 IF ELEM > 0 //** P3N - 09/26/06 GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2] + (CUR_MAST)->FUEL_CHRG ELSE //** P3N - 09/26/06 AADD(GL_ARR, { '521 ', (CUR_MAST)->FUEL_CHRG, , 'I' } ) ENDIF //** P3N - 09/26/06 ENDIF //** P3N - 09/26/06 SELECT(SV_SEL) RETURN DATA_ARR //********************************************************** // P3N - 1/27/99 ARE THERE FLANKER SCREENS FOR BACKORDER PRINTING??? //********************************************************** FUNCTION BKO_FLANKSCR(GETARR) LOCAL ELM := 0, RETVAL := .F., FLANKERS := '' ELM := ASCAN(GETARR, {|X| X[1] = 'FLANKERS'} ) IF EMPTY(ELM) //** NO FLANKERS ELSE FLANKERS := ALLTRIM(GETARR[ELM,4]) ELM := ASCAN(GETARR, {|X| X[1] = 'FLANK SCRN'}) IF EMPTY(ELM) RETVAL := .F. FLANKERS := '' ELSEIF ALLTRIM(GETARR[ELM,4]) == 'YES' RETVAL := .T. ELSE RETVAL := .F. FLANKERS := '' ENDIF ENDIF RETURN {RETVAL, FLANKERS} //********************************************************** // P3N - BUILD THE SCREEN CHUNK FOR ORDER / BACKORDER PRINTING //********************************************************** FUNCTION SCREEN_CHUNK(SELFILE, ADDL_MODE, WORKSPECS, MULL_REQ, MULL_TYPE, ; IS_ALWAYS_SLID, OR_TOP, OR_BOT, OR_SCR, BO_ITEM, BAL_INFO, ; RAN_SLID, MLOC_CODE, PRNT_DESC, ; AMTVAR, DISC_ARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; BACKORD, XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, ; MNUM_GLASS, G_ARR, FLANKSCR) // NEW LOGIC TO ADD ADJUSTMENT HERE AND NOT IN CGWPRPO. LOCAL PASSARR := {} , OR_DESC := '' ,SHP_QTY := 0 , SCRINFO := {} LOCAL WK_WIDTH := (SELFILE)->PRD_WIDTH LOCAL WK_HEIGHT := (SELFILE)->PRD_HEIGHT LOCAL WK_ADJ_WIDTH := 0, WK_QTY := 0, INV_QTY := 0 LOCAL WK_ADJ_HEIGHT := 0, WORKVAR, SCREEN_LINE, ELM3 LOCAL ITEM_CAT_CODE := GET_CATCODE( (SELFILE)->PROD_CODE) LOCAL OLQTY := 0 , NUM_IN_SPEC := 0 //**P3N - 9/22/98 HAPPY BDAY CINDY LOCAL ELM := 0, FLANKERS := '', TOLKEY //** P3N -11/3/98 LOCAL OSTKEY := (SELFILE)->ORDER_NUM + STR((SELFILE)->LINE_NUM, 3) + 'SCREENS' LOCAL OSTFSK := (SELFILE)->ORDER_NUM + STR((SELFILE)->LINE_NUM, 3) + 'SCRFLNK' LOCAL QTYARR := GET_OSTQTY(SELFILE), BKOFLNKSCR := .F. IF EMPTY(FLANKSCR) //** P3N - 1/27/99 IF EMPTY(QTYARR) //** P3N - 12/3/98 SHP_QTY := 0 //** P3N - 12/3/98 INV_QTY := 0 //** P3N - 12/3/98 ELSE //** P3N - 12/3/98 SHP_QTY := QTYARR[1] //** P3N - 12/3/98 INV_QTY := QTYARR[2] //** P3N - 12/3/98 ENDIF //** P3N - 12/3/98 IF EMPTY(SHP_QTY) .OR. ITEM_CAT_CODE <> 'SCREENS' QTYARR := GET_OSTQTY(SELFILE, OSTKEY ) IF EMPTY(QTYARR) //** P3N - 12/3/98 SHP_QTY := 0 //** P3N - 12/3/98 INV_QTY := 0 //** P3N - 12/3/98 ELSE //** P3N - 12/3/98 SHP_QTY := QTYARR[1] //** P3N - 12/3/98 INV_QTY := QTYARR[2] //** P3N - 12/3/98 ENDIF //** P3N - 12/3/98 ENDIF ELSEIF FLANKSCR[1] //** P3N - 1/27/99 BKOFLNKSCR := .T. //** P3N - 1/27/99 QTYARR := GET_OSTQTY(SELFILE, OSTFSK ) IF EMPTY(QTYARR) //** P3N - 1/27/99 SHP_QTY := 0 //** P3N - 1/27/99 INV_QTY := 0 //** P3N - 1/27/99 ELSE //** P3N - 1/27/99 SHP_QTY := QTYARR[1] //** P3N - 1/27/99 INV_QTY := QTYARR[2] //** P3N - 1/27/99 ENDIF //** P3N - 1/27/99 ENDIF //** P3N - 1/27/99 IF EMPTY(MNUM_SCREEN) MNUM_SCREEN := CATEGORY->NUM_SCREEN IF MNUM_SCREEN = 0 MNUM_SCREEN := 1 ENDIF ENDIF IF EMPTY(MNUM_GLASS) MNUM_GLASS := CATEGORY->NUM_GLASS ENDIF IF ADDL_MODE PRODUCT->(DBSEEK( (SELFILE)->PAR_PROD)) IF PRODUCT->MACH_SCRNW <> 0 .AND. PRODUCT->MACH_SCRNH <> 0 WK_ADJ_WIDTH := PRODUCT->MACH_SCRNW WK_ADJ_HEIGHT := PRODUCT->MACH_SCRNH WK_WIDTH := (CUR_OL)->ACT_WIDTH WK_HEIGHT := (CUR_OL)->ACT_HEIGHT WORKSPECS := NIL ENDIF PRODUCT->(DBSEEK( (SELFILE)->PROD_CODE )) ELSE WK_WIDTH := (SELFILE)->ACT_WIDTH WK_HEIGHT := (SELFILE)->ACT_HEIGHT ENDIF IF ADDL_MODE // GET FROM PARENT STUFF IF EMPTY(WORKSPECS) WK_QTY := (SELFILE)->QUANTITY * MNUM_SCREEN ELSE WK_QTY := (SELFILE)->QUANTITY // (*)FACTOR FROM WORKSPECS ENDIF ELSEIF BACKORD IF BKOFLNKSCR //** P3N - 1/28/99 TOLKEY := ORDER_NUM + STR(LINE_NUM) + PROD_CODE + 'SCRFLNK' IF SELFILE == 'ADDL_LINES' //** P3N - 7/21/99 HAPPY BDAY DANIEL TOLKEY := ORDER_NUM + STR(LINE_NUM) + PAR_PROD + 'SCRFLNK' ENDIF //** P3N - 7/21/99 HAPPY BDAY DANIEL ELSEIF GET_CATCODE(PROD_CODE) == 'SCREENS' //** P3N - 5/20/99 TOLKEY := ORDER_NUM + STR(LINE_NUM) + SPACE(7) + PROD_CODE ELSE //** P3N - 1/28/99 TOLKEY := ORDER_NUM + STR(LINE_NUM) + PROD_CODE + 'SCREENS' ENDIF //** P3N - 1/28/99 IF GET_CATCODE(PROD_CODE) == 'SCREENS' //** P3N - 5/20/99 SCRINFO := TOL_SCREENS( ,TOLKEY, BKOFLNKSCR) //** P3N -11/3/98 ELSE SCRINFO := TOL_SCREENS(SELFILE,TOLKEY, BKOFLNKSCR) //** P3N -11/3/98 ENDIF IF LEN(SCRINFO) > 2 //** P3N -11/3/98 BO_ITEM := SCRINFO[3] //** P3N -11/3/98 ENDIF //** P3N -11/3/98 WK_QTY := SCRINFO[1] //** P3N - 9/9/98 PRNT_DESC := SCRINFO[2] //** P3N - 9/9/98 ELSEIF !ADDL_MODE IF EMPTY(WORKSPECS) WK_QTY := (SELFILE)->QUANTITY * MNUM_SCREEN ELSE OLQTY := WORKSPECS[1, 3] NUM_IN_SPEC := WORKSPECS[1, 13] WK_QTY := OLQTY * NUM_IN_SPEC * ( 1 + XFACTOR ) //**WK_QTY := (SELFILE)->QUANTITY // (*)FACTOR FROM WORKSPECS ENDIF ENDIF // NORMAL WIDTH WINDOWS / NOT ODD WIDTHS MULLED TOGETHER. IF !MULL_REQ .OR. (MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL') // STPW ONLY?? IF MULL_REQ MNUM_GLASS ++ // SINCE A MULL, EXTRA GLASS REQUIRED (ONLY CENTER VERTICAL ONES GOT TO HERE! SELECT PRODUCT IF RAN_SLID // REVERSE HT/WIDTH WORKVAR := WK_HEIGHT // ADDL_MODE PART ADDED WK_HEIGHT := WK_WIDTH // 6-05-95 BY DON WK_WIDTH := WORKVAR WORKVAR := WK_ADJ_HEIGHT // ADDL_MODE PART ADDED WK_ADJ_HEIGHT := WK_ADJ_WIDTH // 6-05-95 BY DON WK_ADJ_WIDTH := WORKVAR ENDIF WK_WIDTH := WK_WIDTH + WK_ADJ_WIDTH WK_HEIGHT := WK_HEIGHT + WK_ADJ_HEIGHT WK_QTY := WK_QTY * 2 WK_WIDTH := WK_WIDTH - MMULL_SASH SCREEN_LINE := '' IF ITEM_CAT_CODE = 'SCREENS' .AND. EMPTY(WORKSPECS) SCREEN_LINE := SET_SCREEN_LINE(MULL_REQ, WK_WIDTH, WK_HEIGHT, ' ', PROD_CODE, PRNT_DESC) ENDIF ELM3 := {SCREEN_LINE, BO_ITEM} //** P3N = 6/26/98 PASSARR := {MLOC_CODE, PRNT_DESC, ELM3 , AMTVAR,; DISC_ARR, PROD_MEMO, WK_QTY, WHERE_FROM, MLINE, ; PROD_CODE, SHP_QTY, 0 , WORKSPECS, MWORK_DESC, ; DO_SCRNS_ONLY , MPWHERE, INV_QTY } ELSE // NO WINDOWS MULLED TOGETHER. // SCREEN HEIGHT WILL BE WK_HEIGHT / NUM_GLASS UNLESS ORIEL // OR WE ARE USING A STANDARD SIZE SASH ON THE BOTTOM IF (OR_TOP = 0 .AND. OR_BOT = 0) .OR. ; (OR_TOP = 1 .AND. OR_BOT = 1) .OR. MNUM_GLASS = 1 // 2 PIECES OF GLASS AT 1/2 SIZE EACH IF IS_ALWAYS_SLID WK_WIDTH := WK_WIDTH / MNUM_GLASS ELSE WK_HEIGHT := WK_HEIGHT / MNUM_GLASS ENDIF ELSE // oriel processing here. IF OR_SCR > 0 // FROM STD SIZE TABLE IF IS_ALWAYS_SLID WK_WIDTH := OR_SCR WK_ADJ_HEIGHT := 0 // is this true?? ELSE WK_HEIGHT := OR_SCR WK_ADJ_HEIGHT := 0 // is this true?? ENDIF ELSE IF OR_TOP > 0 IF IS_ALWAYS_SLID WK_WIDTH := WK_WIDTH - OR_TOP // SCREEN GOES ON BOTTOM ELSE WK_HEIGHT := WK_HEIGHT - OR_TOP // SCREEN GOES ON BOTTOM ENDIF ELSE IF IS_ALWAYS_SLID WK_WIDTH := OR_BOT // SCREEN GOES ON BOTTOM ELSE WK_HEIGHT := OR_BOT // SCREEN GOES ON BOTTOM ENDIF ENDIF ENDIF ENDIF WK_HEIGHT := WK_HEIGHT + WK_ADJ_HEIGHT WK_WIDTH := WK_WIDTH + WK_ADJ_WIDTH IF RAN_SLID .AND. !ADDL_MODE // REVERSE HT/WIDTH (IF !ADDL_MODE 6-5-95) WORKVAR := WK_HEIGHT WK_HEIGHT := WK_WIDTH WK_WIDTH := WORKVAR ENDIF IF EMPTY(BAL_INFO) //** P3N - 03/30/98 // NO BALANCE SIZE INFO - NOT A STD_SASH ELSEIF EMPTY(WORKSPECS) // NO CUTTING SPEC INFO ELSE // DETERMINE THE SCREEN SIZE FOR STD_SASH IF LEN(WORKSPECS) < 2 .OR. EMPTY(WORKSPECS[1,6]) .OR. EMPTY(WORKSPECS[2,6]) ERR_BOX(' Order line - ' + STR( (SELFILE)->LINE_NUM, 3) + ; ' / Model - ' + (SELFILE)->PROD_CODE + ' Contains', ; ' Invalid or missing SCREEN Cutting Specs! ', ' ', ; ' PRODUCTION SCREEN COPY may NOT be accurate!') ELSE ADJ_HT := EVAL_MATH( WORKSPECS[2,6], G_ARR, '_CUT_SP', ; WORKSPECS[2,1], SELFILE,'CUT') WK_HEIGHT := ADJ_HT - OR_TOP WORKSPECS[2,7] := WK_HEIGHT ENDIF ENDIF IF ITEM_CAT_CODE = 'SCREENS' .AND. EMPTY(WORKSPECS) SCREEN_LINE := SET_SCREEN_LINE(MULL_REQ, WK_WIDTH, WK_HEIGHT, OR_DESC, PROD_CODE, PRNT_DESC) ELSE SCREEN_LINE := '' ENDIF SELECT (SELFILE) ELM3 := {SCREEN_LINE, BO_ITEM} //** P3N = 6/26/98 PASSARR := {MLOC_CODE, PRNT_DESC, ELM3 , AMTVAR,; DISC_ARR, PROD_MEMO, WK_QTY, WHERE_FROM, MLINE, ; PROD_CODE, SHP_QTY, 0 , WORKSPECS, MWORK_DESC, ; DO_SCRNS_ONLY , MPWHERE, INV_QTY } ENDIF ENDIF RETURN PASSARR ****************************************************************** * GET THE BACKORDER QTY FOR SCREENS - FROM THE TORD_LINES DATABASE * //** P3N - 9/9/98 ****************************************************************** FUNCTION TOL_SCREENS(SELFILE, PASSKEY, FLANKERS) LOCAL SVREC := 1, TOLKEY, FLANKCNT := 0, RETVAL := { 0 , '' }, BO_ITEM IF EMPTY(FLANKERS) //** P3N - 1/27/99 FLANKERS := .F. //** P3N - 1/27/99 ENDIF //** P3N - 1/27/99 IF SELECT('TORD_LINES') > 0 SVREC := TORD_LINES->(RECNO()) TORD_LINES->(DBGOTOP()) IF (CUR_MAST)->ORDER_NUM == TORD_LINES->ORDER_NUM ELSE CLOSE TORD_LINES BLD_TORD_LINES((CUR_MAST)->ORDER_NUM) ENDIF ELSE BLD_TORD_LINES((CUR_MAST)->ORDER_NUM) ENDIF TORD_LINES->(DBGOTOP()) DO WHILE TORD_LINES->(!EOF()) IF EMPTY(SELFILE) TOLKEY := TORD_LINES->ORDER_NUM + STR(TORD_LINES->LINE_NUM, 3) TOLKEY := TOLKEY + TORD_LINES->PAR_PROD + TORD_LINES->PROD_CODE IF TOLKEY == PASSKEY RETVAL := { TORD_LINES->QUANTITY, TORD_LINES->ITEM_DESC } IF FLANKERS //** P3N - 7/21/99 IF TORD_LINES->PROD_CODE == 'SCRFLNK' //** P3N - 7/21/99 BO_ITEM := '(' + TORD_LINES->HOW_MEAS + ') ' BO_ITEM := BO_ITEM + TORD_LINES->ENTRY_SIZE RETVAL := { TORD_LINES->QUANTITY, TORD_LINES->ITEM_DESC, BO_ITEM} ENDIF ENDIF EXIT ENDIF ELSEIF TORD_LINES->ORDER_NUM == (SELFILE)->ORDER_NUM IF TORD_LINES->LINE_NUM == (SELFILE)->LINE_NUM IF TORD_LINES->PAR_PROD == (SELFILE)->PROD_CODE IF FLANKERS //** P3N - 1/27/99 IF TORD_LINES->PROD_CODE == 'SCRFLNK' //** P3N - 1/27/99 BO_ITEM := '(' + TORD_LINES->HOW_MEAS + ') ' BO_ITEM := BO_ITEM + TORD_LINES->ENTRY_SIZE RETVAL := { TORD_LINES->QUANTITY, TORD_LINES->ITEM_DESC, BO_ITEM} EXIT ENDIF ELSEIF TORD_LINES->PROD_CODE == 'SCREENS' RETVAL := { TORD_LINES->QUANTITY, TORD_LINES->ITEM_DESC } EXIT ENDIF ENDIF ENDIF ENDIF TORD_LINES->(DBSKIP(+1) ) ENDDO TORD_LINES->(DBGOTO(SVREC) ) RETURN RETVAL ****************************************************************** * GET THE ORDER SHIPPING TRANS IN ORDER TO CALC BACKORDERS! * //** P3N - 5/1/98 ****************************************************************** FUNCTION GET_OSTQTY(CUR_OL, MISCKEY , PARTIAL_INVOICE, REPRINT_INVOICE) LOCAL RETVAL := {}, RETSHP := 0, RETINV := 0, SVSEL := SELECT() PRIVATE SEEKKEY := (CUR_OL)->ORDER_NUM + STR((CUR_OL)->LINE_NUM, 3) + ; (CUR_OL)->PROD_CODE + (CUR_OL)->PAR_PROD PRIVATE SAMELIN := 'ORDER_NUM + STR(LINE_NUM, 3)+PROD_CODE+PAR_PROD == SEEKKEY' //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 - 12/9/98 PARTIAL_INVOICE := .F. //** P3N - 12/9/98 ENDIF //** P3N - 12/9/98 IF EMPTY(REPRINT_INVOICE) //** P3N - 12/9/98 REPRINT_INVOICE := .F. //** P3N - 12/9/98 ENDIF //** P3N - 12/9/98 IF EMPTY(MISCKEY) ELSE SEEKKEY := MISCKEY SAMELIN := 'ORDER_NUM + STR(LINE_NUM, 3)+PROD_CODE == SEEKKEY' ENDIF SELECT ORD_SHIP IF ORD_SHIP->(DBSEEK(SEEKKEY)) DO WHILE !EOF() .AND. &SAMELIN IF REPRINT_INVOICE .AND. EMPTY(INV_QTY) //** P3N - 12/9/98 //** PARTIAL INVOICE SHIPPED TO NEW ORDER ELSE RETSHP := RETSHP + ORD_SHIP->SHIP_QTY ENDIF RETINV := RETINV + ORD_SHIP->INV_QTY ORD_SHIP->(DBSKIP(+1)) ENDDO ENDIF SELECT(SVSEL) RETURN {RETSHP, RETINV} ****************************************************************** * IS THERE A STOCK SCREEN AND HOW WERE THE MEASUREMENTS ENTERED ****************************************************************** FUNCTION SET_SCREEN_LINE(MULL_REQ, WK_WIDTH, WK_HEIGHT, OR_DESC, PROD_CODE, PRNT_DESC) LOCAL SCREEN_LINE := '' IF (IN_STOCK == 'Y' .AND. HOW_MEAS == 'NS') .AND. ; (PROD_CODE = '500' .AND. AT('WHITE', PRNT_DESC) > 0) SCREEN_LINE := ENTRY_SIZE ELSEIF MULL_REQ SCREEN_LINE := PRNT_SIZE(WK_WIDTH/2, WK_HEIGHT) ELSE SCREEN_LINE := PRNT_SIZE(WK_WIDTH, WK_HEIGHT) + OR_DESC ENDIF IF IN_STOCK == 'Y' SCREEN_LINE := TRIM(SCREEN_LINE) + ' (S)' ENDIF RETURN SCREEN_LINE ************************************************************ * IS THERE AN ADDITIONAL LINE ITEM * FOR THE TYPE PASSED ??? (IE: 'SCREEN') ************************************************************ FUNCTION XL_EXISTS(WHAT_TYPE) LOCAL SV_SEL := SELECT() LOCAL SV_REC := (SV_SEL)->(RECNO()) //** P3N - 7/20/98 LOCAL SV_ORD := INDEXORD(), RETVAL := .F. LOCAL SEEKKEY := (CUR_OL)->ORDER_NUM+(CUR_OL)->PROD_CODE SELECT (CUR_XL) DONSETORD(2) // ORDER + PAR_PROD SEEK SEEKKEY IF FOUND() IF GET_CATCODE(PROD_CODE) == WHAT_TYPE RETVAL := .T. ELSE RETVAL := .F. ENDIF ENDIF SET ORDER TO SV_ORD SELECT(SV_SEL) (SV_SEL)->(DBGOTO(SV_REC)) //** P3N - 7/20/98 RETURN RETVAL ************************************************************ * IS THIS ORDER ASSESSED A DELIVERY CHARGE ??? ************************************************************ FUNCTION IS_DELIVERED() LOCAL SEEKKEY := (CUR_MAST)->SHP_METHOD, SV_SEL := SELECT(), RET_VAL := .F. IF SHIPMETH->(DBSEEK(SEEKKEY)) IF SHIPMETH->DEL_CHG$'Y' //DELIVERY CHARGE ???? RET_VAL := .T. ENDIF ENDIF SELECT(SV_SEL) RETURN RET_VAL ************************************************************ ************************************************************ ************************************************************ FUNCTION BEST_BOX(GLT_QTY, GLT_WD, GLT_HT, GLB_QTY, GLB_WD, GLB_HT) LOCAL RETARR := {}, SAVESEL := SELECT(), I LOCAL PRNTLINE, BESTWASTE:=9999, THISWASTE, THISSIZE LOCAL BEST_BOX1, BEST_BOX2, ORIEL, WASTE1, RETVAL:='' STATIC GLASS_ARR IF GLT_WD = NIL RETURN RETVAL ENDIF // IF ORIEL, 1 BOX FOR EACH PIECE OF GLASS // OTHERWISE, GIVE BEST 1 AND BEST 2 SITUATION IF GLB_QTY = 0 ORIEL := .F. ELSE ORIEL := .T. ENDIF // LOOK ON 'GLASS_BOX' FILE TO FIND BEST SIZE WITH LEAST WASTE IF GLASS_ARR = NIL GLASS_ARR := {} DBOPEN('GLASS_BOX') GOTO TOP DO WHILE !EOF() AADD(GLASS_ARR, { BOX_NUM, WIDTH, HEIGHT } ) SKIP 1 ENDDO CLOSE GLASS_BOX SELECT (SAVESEL) ENDIF THISSIZE := GLT_WD * GLT_HT BESTWASTE := 9999 FOR I := 1 TO LEN(GLASS_ARR) IF (GLT_WD <= GLASS_ARR[I,2] .AND. GLT_HT <= GLASS_ARR[I,3]) .OR. ; (GLT_WD <= GLASS_ARR[I,3] .AND. GLT_HT <= GLASS_ARR[I,2]) THISWASTE := (GLASS_ARR[I,2] * GLASS_ARR[I,3]) - THISSIZE IF THISWASTE < BESTWASTE BESTWASTE := THISWASTE BEST_BOX1 := GLASS_ARR[I,1] ENDIF ENDIF NEXT WASTE1 := BESTWASTE IF ORIEL THISSIZE := GLB_WD * GLB_HT BESTWASTE := 9999 FOR I := 1 TO LEN(GLASS_ARR) IF (GLB_WD <= GLASS_ARR[I,2] .AND. GLB_HT <= GLASS_ARR[I,3]) .OR. ; (GLB_WD <= GLASS_ARR[I,3] .AND. GLB_HT <= GLASS_ARR[I,2]) THISWASTE := (GLASS_ARR[I,2] * GLASS_ARR[I,3]) - THISSIZE IF THISWASTE < BESTWASTE BESTWASTE := THISWASTE BEST_BOX2 := GLASS_ARR[I,1] ENDIF ENDIF NEXT ELSE THISSIZE := GLB_WD * GLB_HT * 2 FOR I := 1 TO LEN(GLASS_ARR) IF ((GLB_WD * 2) <= GLASS_ARR[I,2] .AND. GLB_HT <= GLASS_ARR[I,3]) .OR. ; ((GLB_WD * 2) <= GLASS_ARR[I,3] .AND. GLB_HT <= GLASS_ARR[I,2]) .OR. ; (GLB_WD <= GLASS_ARR[I,2] .AND. (GLB_HT * 2) <= GLASS_ARR[I,3]) .OR. ; (GLB_WD <= GLASS_ARR[I,3] .AND. (GLB_HT * 2) <= GLASS_ARR[I,2]) THISWASTE := (GLASS_ARR[I,2] * GLASS_ARR[I,3]) - THISSIZE IF THISWASTE < BESTWASTE BESTWASTE := THISWASTE BEST_BOX2 := GLASS_ARR[I,1] ENDIF ENDIF NEXT ENDIF IF BEST_BOX1 = NIL BEST_BOX1 := '??' ENDIF IF BEST_BOX2 = NIL BEST_BOX2 := '??' ENDIF IF ORIEL RETURN 'Top~-~BOX~' + ALLTRIM(BEST_BOX1) + ' Bottom~-~BOX~' + ALLTRIM(BEST_BOX2) ELSE SQFT_SAVED := (WASTE1 - BESTWASTE) / 144 IF BEST_BOX1 <> '??' RETVAL := ' BOX~' + ALLTRIM(BEST_BOX1) ENDIF IF BEST_BOX2 <> '??' RETVAL := RETVAL + ' -or- 2/1~use~BOX~'; + ALLTRIM(BEST_BOX2) + ' (~' + ALLTRIM(STR(SQFT_SAVED,7,2)) ; + '~Saved~)' ENDIF ENDIF RETVAL := ALLTRIM(RETVAL) RETURN ' ' + RETVAL ************************************************************ ************************************************************ ************************************************************ FUNCTION CK_HALF_SIZE(ITEM_CAT_CODE, SELFILE, OPTFILE, OR_ARR, RAN_SLID, P_WIDTH, P_HEIGHT, EXP_REQ, IS_ALWAYS_SLID, G_ARR) LOCAL SEEKKEY, FACT, CALC_VAR, PRNT_VAR := '', ORI_SIZE LOCAL OR_TOP := OR_ARR[1], OR_BOT := OR_ARR[2], IS_SLIDER := .F. LOCAL WK_HEIGHT, WK_WIDTH, SAVESEL := SELECT() // NORMALLY, HALF SIZE IS HEIGHT / 2 UNLESS RANCH SLIDER // WINDOW ROTATED 90 DEGREES (HT BECOMES WIDTH, WD BECOMES HT) IF RAN_SLID .OR. IS_ALWAYS_SLID WK_WIDTH := P_HEIGHT WK_HEIGHT := P_WIDTH ELSE WK_WIDTH := P_WIDTH WK_HEIGHT := P_HEIGHT ENDIF IF CATEGORY->(DBSEEK(ITEM_CAT_CODE)) IF CATEGORY->PRNT_HS = 'Y' .AND. ; ( EMPTY(CATEGORY->HS_RULE) .OR. CHK_RULE(CATEGORY->HS_RULE, G_ARR , , SELFILE) ) // PRINT CALC_VAR DIVIDED BY 2 INCLUDING FRACTIONS FACT := 2 ELSE SELECT (SAVESEL) RETURN '' //** P3N - 6/17/99 //**RETURN NIL //** P3N - 6/17/99 ENDIF IF OR_TOP <> 0 IF (SELFILE)->IN_STOCK$'Y' PRNT_VAR := ' ' ELSE // ADDED IOLA CONDITION 6-6-95 - DON IF EXP_REQ .AND. MHOME_LOC_CODE = 'KC' TOPNUM := OR_TOP + .5 ELSE TOPNUM := OR_TOP ENDIF TOPPART := TOPNUM BOTPART := WK_HEIGHT - TOPPART PRNT_VAR := ' ( ' + PRNT_SIZE(TOPPART, BOTPART, '/') + ' )' ENDIF ELSEIF OR_BOT <> 0 IF (SELFILE)->IN_STOCK$'Y' PRNT_VAR := ' ' ELSE IF EXP_REQ .AND. MHOME_LOC_CODE = 'KC' BOTNUM := OR_BOT - .5 ELSE BOTNUM := OR_BOT ENDIF TOPPART := WK_HEIGHT - BOTNUM BOTPART := BOTNUM PRNT_VAR := ' ( ' + PRNT_SIZE(TOPPART, BOTPART, '/') + ' )' ENDIF ELSE CALC_VAR := WK_HEIGHT / FACT // PRINT THIS AS THE HALF SIZE PRNT_VAR := ' ( ' + PRNT_SIZE(CALC_VAR, NIL) + ' )' ENDIF ENDIF SELECT (SAVESEL) RETURN STRTRAN(PRNT_VAR, ' ', '~') ********************************************** ********************************************** ********************************************** FUNCTION CK_XTRAWIND(SELFILE, OPTFILE, ADDL_MODE) // IS IT AN EXTRA WINDOW SITUATION? LOCAL SAVESEL := SELECT(), RETVAL := 0, I LOCAL SEEKKEY := '' //** P3N - 05/24/02 SELECT (SELFILE) FOR I := 1 TO 2 IF I = 1 SEEKKEY := BLD_OPT_SEEK(SELFILE, 'XTRA WIND') ELSE SEEKKEY := BLD_OPT_SEEK(SELFILE, 'FRENCH STY') ENDIF // DIRECT SEEK ON THIS ATTRIBUTE SELECT (OPTFILE) // EITHER ORDER_OPTS OR ADDL_OPTS SEEK SEEKKEY IF FOUND() IF I = 1 RETVAL := VAL(USER_RESP) ELSE RETVAL := 1 ENDIF ENDIF // IF ADDL_MODE AND CHECK IF XTRA PARENT WINDOWS. IF SO, // THE ADD-ON PRODUCT MUST GET EXTRAS ALSO IF ADDL_MODE SEEKKEY := (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'XTRA WIND' // DIRECT SEEK ON THIS ATTRIBUTE SELECT (CUR_OO) // PARENT OPTIONS SEEK SEEKKEY IF FOUND() IF I = 1 RETVAL := VAL(USER_RESP) ELSE RETVAL := 1 ENDIF ENDIF ENDIF IF RETVAL <> 0 EXIT ENDIF NEXT SELECT (SELFILE) RETURN RETVAL ********************************************** ********************************************** ********************************************** FUNCTION ALWAYS_SLIDER(SELFILE, OPTFILE, ADDL_MODE) // IS IT ALWAYS A RANCH SLIDER? LOCAL SAVESEL := SELECT(), RAN_SLID := .F. SELECT (SELFILE) SEEKKEY := BLD_OPT_SEEK(SELFILE, 'RANCH SLID') // DIRECT SEEK ON THIS ATTRIBUTE SELECT (OPTFILE) // EITHER ORDER_OPTS OR ADDL_OPTS SEEK SEEKKEY IF FOUND() IF ALLTRIM(USER_RESP) == 'ALWAYS SLIDER' RAN_SLID = .T. ENDIF ENDIF // IF ADDL_MODE AND PARENT IS A SLIDER // THE ADD-ON PRODUCT MUST BE A SLIDER ALSO IF !RAN_SLID .AND. ADDL_MODE SEEKKEY := (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'RANCH SLID' // DIRECT SEEK ON THIS ATTRIBUTE SELECT (CUR_OO) // PARENT OPTIONS SEEK SEEKKEY IF FOUND() IF ALLTRIM(USER_RESP) == 'ALWAYS SLIDER' RAN_SLID = .T. ENDIF ENDIF ENDIF SELECT (SELFILE) RETURN RAN_SLID ********************************************** ********************************************** ********************************************** FUNCTION CK_SLIDER(SELFILE, OPTFILE, ADDL_MODE) // IS IT A RANCH SLIDER? LOCAL SAVESEL := SELECT(), RAN_SLID := .F. SELECT (SELFILE) SEEKKEY := BLD_OPT_SEEK(SELFILE, 'RANCH SLID') // DIRECT SEEK ON THIS ATTRIBUTE SELECT (OPTFILE) // EITHER ORDER_OPTS OR ADDL_OPTS SEEK SEEKKEY IF FOUND() IF ALLTRIM(USER_RESP) == 'RANCH SLIDER' RAN_SLID = .T. ENDIF ENDIF // IF ADDL_MODE AND PARENT IS A SLIDER // THE ADD-ON PRODUCT MUST BE A SLIDER ALSO IF !RAN_SLID .AND. ADDL_MODE SEEKKEY := (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'RANCH SLID' // DIRECT SEEK ON THIS ATTRIBUTE SELECT (CUR_OO) // PARENT OPTIONS SEEK SEEKKEY IF FOUND() IF ALLTRIM(USER_RESP) == 'RANCH SLIDER' RAN_SLID = .T. ENDIF ENDIF ENDIF SELECT (SELFILE) RETURN RAN_SLID ********************************************** * CHECK FOR A FRENCH DOOR ATTRIBUTE ! * PERRY - 2-11-98 ********************************************** FUNCTION CK_FRENCH(SELFILE, OPTFILE, ADDL_MODE) // IS IT A FRENCH STYLE DOOR KIT? LOCAL SAVESEL := SELECT(), FRENCHDOOR := .F. SELECT (SELFILE) SEEKKEY := BLD_OPT_SEEK(SELFILE, 'FRENCH STY') // DIRECT SEEK ON THIS ATTRIBUTE SELECT (OPTFILE) // EITHER ORDER_OPTS OR ADDL_OPTS SEEK SEEKKEY IF FOUND() IF ALLTRIM(USER_RESP) == 'FRENCH STYLE KIT' FRENCHDOOR := .T. ENDIF ENDIF SELECT (SELFILE) RETURN FRENCHDOOR ********************************************** ********************************************** ********************************************** FUNCTION CK_MULLS(SELFILE, OPTFILE) // IS MULL REQUIRED? LOCAL SAVESEL := SELECT(), MULL_REQ := .F., MULL_TYPE := NIL SELECT (SELFILE) SEEKKEY := BLD_OPT_SEEK(SELFILE, 'MULL LOC ') // DIRECT SEEK ON THIS ATTRIBUTE SELECT (OPTFILE) // EITHER ORDER_OPTS OR ADDL_OPTS SEEK SEEKKEY IF FOUND() IF !EMPTY(USER_RESP) .AND. ALLTRIM(USER_RESP) <> 'N/A' MULL_REQ = .T. ENDIF IF ALLTRIM(USER_RESP) == 'CENTER VERTICAL' MULL_TYPE = ALLTRIM(USER_RESP) ENDIF ENDIF SELECT (SELFILE) RETURN {MULL_REQ, MULL_TYPE} ****************************************************************** ****************************************************************** ****************************************************************** FUNCTION BLD_OPT_SEEK(SELFILE, MATT_CODE) //BUILD THE SEEKKEY FOR OPTIONS FILE //**LOCAL SEEKKEY //** P3N - 07/19/13 - ABEND LINDA @ LINDS - LOCAL SEEKKEY := '' //** P3N - 07/19/13 - ABEND LINDA @ LINDS - JUST IN CASE NOT FOUND ASSIGN TO EMPTY IF SELFILE == CUR_OL SEEKKEY = (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + MATT_CODE ELSEIF SELFILE == CUR_XL SEEKKEY = (SELFILE)->ORDER_NUM + (SELFILE)->PROD_CODE + STR( (SELFILE)->LINE_NUM,3) + MATT_CODE ENDIF RETURN SEEKKEY ****************************************************************** ****************************************************************** ****************************************************************** FUNCTION CK_ORIEL(ITEM_CAT_CODE, SELFILE, OPTFILE, ADDL_MODE, RAN_SLID, IS_ALWAYS_SLID ) LOCAL SAVESEL := SELECT() LOCAL SEEKKEY, BALANCE_SIZE, WORKVAL1, WORKVAL2, WORKVAL3 LOCAL OR_TOP := 0, OR_BOT := 0, OR_ARR := {}, STDBOTTSASH := .F. LOCAL SCRNSIZE, WORKDIFF, OR_REASON := 'NO ORIEL' LOCAL OR_SCR := 0 ,OR_GLASS := 0, ODD_ORIEL := .F., DEFAULT_ORIEL := .F. LOCAL SIZEARR := {}, MWIDTH, MHEIGHT IF EMPTY(IS_ALWAYS_SLID) //** P3N - 3/24/99 IS_ALWAYS_SLID := .F. //** P3N - 3/24/99 ENDIF //** P3N - 3/24/99 // ORIEL SPECIFICATIONS APPEAR IN PARENT SPECS ONLY SEEKKEY = (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'ORIEL TOP' SELECT(CUR_OO) SEEK SEEKKEY IF FOUND() OR_TOP := DECVAL(USER_RESP) OR_REASON := 'ATT CODE' ENDIF SEEKKEY = (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'ORIEL BOTT' SELECT(CUR_OO) SEEK SEEKKEY IF FOUND() OR_BOT := DECVAL(USER_RESP) OR_REASON := 'ATT CODE' ENDIF SEEKKEY = (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'ORIEL BOTT' SELECT(CUR_OO) SEEK SEEKKEY IF FOUND() OR_BOT := DECVAL(USER_RESP) OR_REASON := 'ATT CODE' ENDIF IF !ADDL_MODE .AND. PRODUCT->SS_BOTSASH$'Y' STDBOTTSASH := .T. ENDIF SELECT PRODUCT SAVEREC := RECNO() IF ADDL_MODE SEEK (CUR_XL)->PAR_PROD IF FOUND() .AND. PRODUCT->SS_BOTSASH$'Y' STDBOTTSASH := .T. ENDIF ENDIF // CHECK THE STDSASH FILE AND FORCE TO OR_BOT IF OR_TOP = 0 .AND. OR_BOT = 0 IF STDBOTTSASH SEEKKEY := PRODUCT->PROD_CODE SELECT STD_SASH SEEK SEEKKEY WORKVAL1 := (SELFILE)->ACT_HEIGHT DO WHILE PROD_CODE == SEEKKEY .AND. !EOF() WORKVAL2 := DECVAL( UP_TO_SIZE ) IF WORKVAL1 <= WORKVAL2 BALANCE_SIZE := BOTT_SASH IF BOTT_SIZE = 0 WORKVAL3 := DECVAL( BOTT_SASH ) ELSE WORKVAL3 := BOTT_SIZE * 2 // WILL DIVIDE BY 2 BELOW! ENDIF WORKDIFF = ABS( WORKVAL1 - WORKVAL3 ) IF ADDL_MODE .AND. ALLTRIM(ITEM_CAT_CODE) = 'STORMS' ; .AND. WORKDIFF <= 1.5 // DON'T ADDJUST ADD ON STORMS WITHIN 1.5 INCHES OF BALANCE SIZE ELSE IF (SELFILE)->HOW_MEAS == 'NS' //** P3N - 07/05/01 //** STD SASH/NOM SIZE ADJUSTMENT //** P3N - 07/05/01 //** RE: PAWNEE - DARYL //** P3N - 07/05/01 //** OR_BOT := (WORKVAL3 / 2) + WORKDIFF // UNEQUAL ORIEL LITES ELSE WORKDIFF := WORKVAL1 - VAL(BALANCE_SIZE) //** P3N - 06/29/01 //** OR_BOT := WORKVAL3 / 2 // UNEQUAL ORIEL LITES ENDIF OR_BOT := WORKVAL3 / 2 // UNEQUAL ORIEL LITES //P3N-07/05/01 OR_REASON := 'BAL ADJ' ENDIF EXIT ENDIF SKIP 1 ENDDO ENDIF ENDIF IF (!ADDL_MODE .AND. (SELFILE)->ORIEL_SIZE = 'Y') .OR. ; (ADDL_MODE .AND. (CUR_OL)->ORIEL_SIZE = 'Y') // CONVERT EVERY THING TO ACTUAL SIZE AND SEEK FOR STD_SIZE TABLE SELECT STD_SIZES // CHECK IF NORMAL ORIEL SIZE DONSETORD(2) IF EMPTY( (SELFILE)->PAR_PROD ) MWIDTH := DECVAL( (SELFILE)->WIDTH ) MHEIGHT:= DECVAL( (SELFILE)->HEIGHT) SIZE_ARR := CONV_SIZE( (SELFILE)->PROD_CODE, MWIDTH,; MHEIGHT, (SELFILE )->HOW_MEAS, .T.) SEEK (SELFILE)->PROD_CODE + STR(SIZE_ARR[1],10,6) + STR(SIZE_ARR[2],10,6) ELSE MWIDTH := DECVAL( (CUR_OL)->WIDTH ) MHEIGHT:= DECVAL( (CUR_OL)->HEIGHT ) SIZE_ARR := CONV_SIZE( (SELFILE)->PAR_PROD, MWIDTH,; MHEIGHT, (SELFILE)->HOW_MEAS, .T.) SEEK (SELFILE)->PAR_PROD + STR(SIZE_ARR[1],10,6) + STR(SIZE_ARR[2],10,6) ENDIF IF FOUND() .AND. ORIEL_SIZE$'X' // NORMALLY AN ORIEL IF (OR_TOP = 0 .AND. OR_BOT = 0) ; .OR. OR_REASON = 'BAL ADJ' // NO OVERRIDES - USE STD TABLE DEFAULT IF ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; .AND. (ADDL_MODE .OR. !EMPTY( (SELFILE)->PAR_PROD) ) OR_TOP := TOP_STORM ELSE OR_TOP := ORIEL_TOP ENDIF OR_BOT := 0 OR_REASON := 'DEFAULT' OR_SCR := ORIEL_SCRN OR_GLASS := TOP_GLASS ODD_ORIEL := .F. DEFAULT_ORIEL := .T. ELSE ODD_ORIEL := .T. ENDIF ENDIF ENDIF SELECT PRODUCT GOTO SAVEREC IF OR_TOP <> 0 .AND. OR_BOT = 0 //** IF !RAN_SLID //** OR_BOT := (SELFILE)->ACT_HEIGHT - OR_TOP //** ELSE //** OR_BOT := (SELFILE)->ACT_WIDTH - OR_TOP //** ENDIF IF RAN_SLID //** P3N - 02/01/99 OR_BOT := (SELFILE)->ACT_WIDTH - OR_TOP //** P3N - 02/01/99 ELSEIF IS_ALWAYS_SLID //** P3N - 02/01/99 OR_BOT := (SELFILE)->ACT_WIDTH - OR_TOP //** P3N - 02/01/99 ELSE //** P3N - 02/01/99 OR_BOT := (SELFILE)->ACT_HEIGHT - OR_TOP //** P3N - 02/01/99 ENDIF ENDIF IF OR_BOT <> 0 .AND. OR_TOP = 0 //** IF !RAN_SLID //** OR_TOP := (SELFILE)->ACT_HEIGHT - OR_BOT //** ELSE //** OR_TOP := (SELFILE)->ACT_WIDTH - OR_BOT //** ENDIF IF RAN_SLID //** P3N - 02/01/99 OR_TOP := (SELFILE)->ACT_WIDTH - OR_BOT //** P3N - 02/01/99 ELSEIF IS_ALWAYS_SLID //** P3N - 02/01/99 OR_TOP := (SELFILE)->ACT_WIDTH - OR_BOT //** P3N - 02/01/99 ELSE //** P3N - 02/01/99 OR_TOP := (SELFILE)->ACT_HEIGHT - OR_BOT //** P3N - 02/01/99 ENDIF //** P3N - 02/01/99 ENDIF SELECT (SAVESEL) RETURN {OR_TOP, OR_BOT, BALANCE_SIZE, OR_REASON, OR_SCR, OR_GLASS, ODD_ORIEL, DEFAULT_ORIEL, WORKDIFF } //**RETURN {OR_TOP, OR_BOT, BALANCE_SIZE, OR_REASON, OR_SCR, OR_GLASS, ODD_ORIEL, DEFAULT_ORIEL } ********************************************************************* * BUILD THE BODY OF THE ORDER ********************************************************************* FUNCTION BLD_BODY(OL_ARR, WHICH_TYPE, WHCH_LOCATION, PBODY_ARR, ; PAMTS_ARR, WHCHORDER, SUBTYPE, INCL_ALL_LINES,; DO_CUT_SPECS, PARTIAL_INVOICE, REPRINT_INVOICE) LOCAL PRNT_DESC, PRNT_LEN := 42, PRNTOUTVAR, PRNT_VAL LOCAL PRNT_PRICE, PRNT_QTY, XX, I, II, WAMTS_ARR LOCAL PAMTS := NIL, MLINE_DESC, X1, X2 LOCAL LI_TTL := 0, LI_QTY := 0, CUT_SPEC_ARR, VENTPOS := '' LOCAL BK_ORD := 0, WORKOUT, WORKQTY := 0, OPT := 0, PRTOPT := '' LOCAL PRT_AMT := .T., WORKVAR, SPEC_CHAR, WORKDESC LOCAL PRT_BO := .T., RETVARVARR := {}, XFACTOR, WORKARR, OPTARR := {} LOCAL WORKDESC1, WORKDESC2, RETVARARR := {}, MGL_LINE_DESC := '' LOCAL MWHEREFROM := OL_ARR[8] //** P3N - 5/26/99 LOCAL SHIP_QTY := 0, QTYARR := {} //** P3N - 5/1/98 LOCAL GETARR := {}, WKARR := {} //** P3N - 8/17/98 LOCAL MPROD_CODE := OL_ARR[10] //** P3N - 8/17/98 LOCAL MLINE_NUM := OL_ARR[9] //** P3N - 8/17/98 LOCAL USE_TEMP := .F. //** P3N - 8/17/98 LOCAL ADDL_MODE := .F. //** P3N - 8/17/98 LOCAL PPR_CUSTID := NIL //** P3N - 8/17/98 LOCAL DISP_WAIT := .F. //** P3N - 8/17/98 LOCAL PRNT_DESARR := {} //** P3N - 8/17/98 LOCAL INV_QTY := OL_ARR[17] //** P3N - 12/3/98 LOCAL BKOPROD := MPROD_SUMMARY(MPROD_CODE) //** P3N - 2/2/99 STATIC VPARR := {} //** P3N - 11/26/01 //**STATIC PRIORPROD := '' //** P3N - 11/26/01 //**STATIC PRIORLINE := '' //** P3N - 11/26/01 //DEFAULT PARTIAL_INVOICE := .F. //DEFAULT REPRINT_INVOICE := .F. If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) IF EMPTY(REPRINT_INVOICE) //** P3N - 12/3/98 REPRINT_INVOICE := .F. //** P3N - 12/3/98 ENDIF //** P3N - 12/3/98 IF EMPTY(PARTIAL_INVOICE) //** P3N - 11/16/98 PARTIAL_INVOICE := .F. //** P3N - 11/16/98 ENDIF //** P3N - 11/16/98 IF FORMTYPE <> 'PREPRINT' .AND. !DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) PRNT_LEN := 60 ENDIF PRNT_DESC := ALLTRIM(OL_ARR[2]) IF MHOME_LOC_CODE = 'IOLA' //** P3N - 08/26/02 - FIX DARLENES SPECIAL CUSTOMER IC/PO DESC PRINTING //**IF WHICH_TYPE == 'PO' //** P3N - 2/22/02 ELSEIF WHICH_TYPE == 'PO' //** P3N - 08/26/02 (CUR_OL)->(DBSEEK(MORDER_NUM+MLINE_NUM)) //** P3N - 2/22/02 (CUR_XL)->(DBSEEK(MORDER_NUM+MPROD_CODE+MLINE_NUM)) //** P3N - 2/22/02 IF MWHEREFROM = 'XL' //** P3N - 2/22/02 ADDL_MODE := .T. //** P3N - 2/22/02 ENDIF //** P3N - 2/22/02 WKARR := BUILD_GETARR( MPROD_CODE, 1, MORDER_NUM, MLINE_NUM, '', ; USE_TEMP, ADDL_MODE, PPR_CUSTID, DISP_WAIT, CUR_OL) GETARR := WKARR[1] //** P3N - 2/22/02 PRNT_DESARR := BLD_DESC(GETARR, CUR_OL, WHICH_TYPE, MPROD_CODE, SUBTYPE) //** P3N - 02/22/02 PRNT_DESC := PRNT_DESARR[1] //** P3N - 2/22/02 ENDIF IF WHCHORDER == 'BACKORD' //** P3N - 8/17/98 //** COMMENTED OUT P3N - 5/26/99 //** IF SUBTYPE == 'BACKORD' //** P3N - 5/26/99 //** IF EMPTY(PRIORPROD) //** P3N - 11/26/01 //** PRIORPROD := MPROD_CODE //** P3N - 11/26/01 //** ENDIF //** P3N - 11/26/01 //** IF EMPTY(PRIORLINE) //** P3N - 11/26/01 //** PRIORLINE := MLINE_NUM //** P3N - 11/26/01 //** ENDIF //** P3N - 11/26/01 IF MWHEREFROM = 'XL' //** P3N - 11/26/01 ADDL_MODE := .T. //** P3N - 11/26/01 //** ELSEIF PRIORPROD == MPROD_CODE .AND. ; //** P3N - 11/26/01 //** PRIORLINE == MLINE_NUM //** P3N - 11/26/01 ELSEIF EMPTY(PBODY_ARR) //** P3N - 11/26/01 //** PRIORPROD := MPROD_CODE //** P3N - 11/26/01 //** PRIORLINE := MLINE_NUM //** P3N - 11/26/01 VPARR := {} //** P3N - 11/26/01 VENTPOS := '' //** P3N - 11/26/01 ENDIF //** P3N - 11/26/01 IF SUBTYPE == 'SCREENS' .AND. MWHEREFROM = 'OL' //** P3N - 5/26/99 ELSE (CUR_OL)->(DBSEEK(MORDER_NUM+MLINE_NUM)) //** P3N - 8/17/98 (CUR_XL)->(DBSEEK(MORDER_NUM+MPROD_CODE+MLINE_NUM)) //**P3N-11/26/01 WKARR := BUILD_GETARR( MPROD_CODE, 1, MORDER_NUM, MLINE_NUM, '', ; USE_TEMP, ADDL_MODE, PPR_CUSTID, DISP_WAIT, CUR_OL) GETARR := WKARR[1] IF ADDL_MODE //** P3N -11/26/01 ELSE //** P3N -11/26/01 ELM := ASCAN(GETARR, {|X| X[1] = 'VENT POS'} ) //** P3N -11/26/01 IF EMPTY(ELM) //** P3N -11/26/01 //** VENTPOS := '' //** P3N -11/26/01 PRTOPT := 'N' //** P3N -11/26/01 ELSE //** P3N -11/26/01 OPTARR := GETARR[ELM,OPT_ARR] //** P3N -11/26/01 OPT := ASCAN(OPTARR, {|X| X[1] = GETARR[ELM,4]} ) //** P3N -11/26/01 IF EMPTY(OPT) //** P3N -11/26/01 PRTOPT := 'N' //** P3N -11/26/01 ELSE //** P3N -11/26/01 PRTOPT := OPTARR[OPT,OPT_PIND] //** P3N -11/26/01 ENDIF //** P3N -11/26/01 IF PRTOPT == 'N' // NEVER PRINT DESCRIPTION VENTPOS := '' //** P3N -11/26/01 ELSE //** P3N -11/26/01 VENTPOS := ALLTRIM(GETARR[ELM,4]) //** P3N -11/26/01 AADD(VPARR,{TRIM(MPROD_CODE), MLINE_NUM, VENTPOS}) ENDIF //** P3N -11/26/01 ENDIF //** P3N -11/26/01 ENDIF //** P3N -11/26/01 PRNT_DESARR := BLD_DESC(GETARR, CUR_OL, WHCHORDER, MPROD_CODE, SUBTYPE) PRNT_DESC := PRNT_DESARR[1] //** P3N - 8/17/98 IF EMPTY(VPARR) //** P3N -11/26/01 ELSEIF ADDL_MODE //** P3N -11/26/01 VELM := ASCAN(VPARR, {|X| X[1] == BKOPROD .AND. X[2] == MLINE_NUM }) IF EMPTY(VELM) //** P3N -11/26/01 VENTPOS := '' //** P3N -11/26/01 ELSE //** P3N -11/26/01 VENTPOS := VPARR[VELM,3] //** P3N -11/26/01 ENDIF //** P3N -11/26/01 PRNT_DESC := PRNT_DESC + ' - '+STRTRAN(VENTPOS,' ','~') //** P3N -11/26/01 ENDIF //** P3N -11/26/01 ENDIF ENDIF //** P3N - 8/17/98 IF WHICH_TYPE == 'CTRL' .AND. !(OL_ARR[1] == MHOME_LOC_CODE) ; .AND. MHOME_LOC_CODE <> 'KC' PRNT_DESC := ALLTRIM(PRNT_DESC) + ' (' ; + ALLTRIM(OL_ARR[1]) + '~PO#' + ')' ENDIF //** P3N - 5/13/98 //** PRINT BACKORDERED ITEMS QTYARR := ORD_QTYS(WHCHORDER, OL_ARR) PRNT_QTY := QTYARR[1] // LINE ITEM QTY SHIP_QTY := QTYARR[2] // ITEMS SHIPPED BK_ORD := QTYARR[3] // ITEMS BACKORDERD IF EMPTY(BK_ORD) .AND. WHCHORDER == 'BACKORD' //** ONLY PRINT THE BACKORDERED ITEMS INCL_ALL_LINES := .F. //** P3N - 9/9/98 //** P3N - 2/2/99 - SUMMARIZE SCREENS ON BACKORDERS TO MODEL LEVEL ELSEIF WHICH_TYPE == 'BACKORD' .AND. SUBTYPE == 'SCREENS' //** P3N - 2/02/99 IF !(BKOPROD == SAVE_BKOPROD) //** P3N - 2/02/99 PRINT BACKORDER SPEC_CHAR := '^' //** P3N - 2/02/99 SCREENS SUMMARIZED IF LEN(PRNT_DESC) <= PRNT_LEN //** P3N - 2/02/99 TO THE MODEL LVL IF !EMPTY(PBODY_ARR) .AND. !EMPTY(PBODY_ARR[LEN(PBODY_ARR)]) IF PBODY_ARR[LEN(PBODY_ARR)] == '-----' // ONLY double space when one line item for a given product ELSE AADD(PBODY_ARR, ' ' ) AADD(PAMTS_ARR, NIL) ENDIF ENDIF AADD(PBODY_ARR, SPEC_CHAR + STRTRAN(PRNT_DESC, '~', ' ' ) ) AADD(PBODY_ARR, ' ' ) AADD(PAMTS_ARR, NIL) AADD(PAMTS_ARR, NIL) SAVE_DESC1 := ALLTRIM(PRNT_DESC) ELSE MEMOCNT := MLCOUNT(PRNT_DESC, PRNT_LEN, 0, .T.) PRNTOUTVAR = STRTRAN(PRNT_DESC, CHR(248), CHR(179)) FOR II = 1 TO MEMOCNT PRNT_VAL := MEMOTRAN(MEMOLINE(PRNTOUTVAR, PRNT_LEN, II, 0, .T.), '') IF II = 1 IF !EMPTY(PBODY_ARR) .AND. !EMPTY(PBODY_ARR[LEN(PBODY_ARR)]) IF PBODY_ARR[LEN(PBODY_ARR)] == '-----' // ONLY double space when one line item for a given product ELSE AADD(PBODY_ARR, ' ' ) AADD(PAMTS_ARR, NIL) ENDIF ENDIF AADD(PBODY_ARR, SPEC_CHAR + STRTRAN(PRNT_VAL, '~', ' ') ) AADD(PAMTS_ARR, NIL) SAVE_DESC1 := ALLTRIM(PRNT_VAL) ELSE AADD(PBODY_ARR, STRTRAN(PRNT_VAL, '~', ' ') ) AADD(PAMTS_ARR, NIL) ENDIF NEXT AADD(PBODY_ARR, ' ' ) // OK - LEAVE HERE! AADD(PAMTS_ARR, NIL) ENDIF //** P3N - 2/02/99 //** P3N - 2/02/99 SAVE_BKOPROD := BKOPROD //** P3N - 2/02/99 ENDIF ELSEIF !(PRNT_DESC == SAVE_DESC) .OR. !(WHICH_TYPE == SAVE_TYPE) SPEC_CHAR := '^' IF WHICH_TYPE = 'STORM' .AND. !(PRNT_DESC = SAVE_DESC1) SPEC_CHAR := '^' + CHR(1) ENDIF // IF SPEC_CHAR = '^' + CHR(1) THEN A NEW PAGE WILL BE FORCED IF WHICH_TYPE = 'EXPANDER' .AND. !(PRNT_DESC = SAVE_DESC1) ; .AND. MHOME_LOC_CODE = 'KC' SPEC_CHAR := '^' + CHR(1) ENDIF IF LEN(PRNT_DESC) <= PRNT_LEN IF !EMPTY(PBODY_ARR) .AND. !EMPTY(PBODY_ARR[LEN(PBODY_ARR)]) IF PBODY_ARR[LEN(PBODY_ARR)] == '-----' // ONLY double space when one line item for a given product ELSE AADD(PBODY_ARR, ' ' ) AADD(PAMTS_ARR, NIL) ENDIF ENDIF AADD(PBODY_ARR, SPEC_CHAR + STRTRAN(PRNT_DESC, '~', ' ' ) ) AADD(PBODY_ARR, ' ' ) AADD(PAMTS_ARR, NIL) AADD(PAMTS_ARR, NIL) SAVE_DESC1 := ALLTRIM(PRNT_DESC) ELSE MEMOCNT := MLCOUNT(PRNT_DESC, PRNT_LEN, 0, .T.) PRNTOUTVAR = STRTRAN(PRNT_DESC, CHR(248), CHR(179)) FOR II = 1 TO MEMOCNT PRNT_VAL := MEMOTRAN(MEMOLINE(PRNTOUTVAR, PRNT_LEN, II, 0, .T.), '') IF II = 1 IF !EMPTY(PBODY_ARR) .AND. !EMPTY(PBODY_ARR[LEN(PBODY_ARR)]) IF PBODY_ARR[LEN(PBODY_ARR)] == '-----' // ONLY double space when one line item for a given product ELSE AADD(PBODY_ARR, ' ' ) AADD(PAMTS_ARR, NIL) ENDIF ENDIF AADD(PBODY_ARR, SPEC_CHAR + STRTRAN(PRNT_VAL, '~', ' ') ) AADD(PAMTS_ARR, NIL) SAVE_DESC1 := ALLTRIM(PRNT_VAL) ELSE AADD(PBODY_ARR, STRTRAN(PRNT_VAL, '~', ' ') ) AADD(PAMTS_ARR, NIL) ENDIF NEXT AADD(PBODY_ARR, ' ' ) // OK - LEAVE HERE! AADD(PAMTS_ARR, NIL) ENDIF SAVE_DESC := PRNT_DESC SAVE_BKOPROD := BKOPROD //** P3N - 2/02/99 ENDIF IF INCL_ALL_LINES IF VALTYPE(OL_ARR[3]) = 'A' //** ARRAY -SCREEN COPY IF WHCHORDER == 'BACKORD' DO_CUT_SPECS := .F. PRNT_VAL := ALLTRIM(OL_ARR[3,2]) //* 2 - BO SCREEN DESC ELSE PRNT_VAL := ALLTRIM(OL_ARR[3,1]) //* 1 - SCREEN DESC ENDIF ELSE PRNT_VAL := ALLTRIM(OL_ARR[3]) // ITEM LINE DESC ENDIF IF !EMPTY( OL_ARR[14]) MLINE_DESC := ALLTRIM(OL_ARR[14]) ELSE MLINE_DESC := NIL ENDIF PRNT_PRICE := OL_ARR[4] // ITEM PRICE XFACTOR := OL_ARR[12] // XTRA WINDOWS PRT_AMT := DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) IF WHCHORDER $ 'INV BACKORD' .AND. CUR_MAST = 'ORD_MAST' //** P3N - 5/12/98 PRT_BO := .T. ELSE PRT_BO := .F. ENDIF IF EMPTY(OL_ARR[6]) // LINE ITEM NOTES - LINE_NOTES IN LINE DBF ELSEIF OL_ARR[16] == 'A' // PRINT THE NOTES ABOVE THE LINE ITEM RETVARARR := PRT_MEMO(PBODY_ARR, PAMTS_ARR, OL_ARR[6], PRNT_LEN) // PRINT THE LINE ITEM NOTES PBODY_ARR := RETVARARR[1] PAMTS_ARR := RETVARARR[2] ENDIF // ALL LINE ITEM DETAIL AMOUNTS IF EMPTY(PRNT_VAL) // NO LINE ITEM DESC. - NO AMOUNTS PAMTS := NIL ELSEIF WHCHORDER == 'BACKORD' //** P3N - 5/14/98 PAMTS := { 0 , 0 , BK_ORD , PRNT_PRICE, PRT_AMT, PRT_BO, XFACTOR, , INV_QTY } ELSE PAMTS := { PRNT_QTY, BK_ORD, SHIP_QTY, PRNT_PRICE, PRT_AMT, PRT_BO, XFACTOR, , INV_QTY } ENDIF IF WHICH_TYPE == 'INV' .OR. WHICH_TYPE == 'CTRL' // CUSTOMER INVOICE OR PROD CONTROL COPY IF OL_ARR[4] == NIL // LINE ITEM TOTAL ELSEIF PARTIAL_INVOICE //** P3N - 11/23/98 - PARTIAL INVOICE MODIFICATIONS LI_TTL := LI_TTL + (PRNT_PRICE * SHIP_QTY) // TALLY THE LINE TOTALS ELSEIF REPRINT_INVOICE //** P3N - 12/3/98 - REPRINT INVOICE MODIFICATIONS LI_TTL := LI_TTL + (PRNT_PRICE * INV_QTY) // TALLY THE LINE TOTALS ELSE LI_TTL := LI_TTL + (PRNT_PRICE * PRNT_QTY) // TALLY THE LINE TOTALS ENDIF ENDIF IF EMPTY(OL_ARR[6]) //LINE ITEM NOTES - LINE_NOTES IN LINE DBF ELSEIF OL_ARR[16] == 'B' //PRINT THE NOTES BESIDE THE LINE ITEM WORKVAR := STRTRAN( ALLTRIM( OL_ARR[6] ), CHR(13), '' ) WORKVAR := STRTRAN( WORKVAR, CHR(10), ' ' ) PRNT_VAL := PRNT_VAL + ' ' + WORKVAR ENDIF //** P3N - 5/13/98 //** ONLY PRINT BACKORDERED ITEMS IF EMPTY(BK_ORD) .AND. WHCHORDER == 'BACKORD' PRNT_VAL := ' ' DO_CUT_SPECS := .F. ENDIF IF !EMPTY(PRNT_VAL) //**IF DO_CUT_SPECS .AND. !EMPTY(OL_ARR[13]) // LINE ITEM CUTTING SPECS //** PAMTS := NIL //** P3N - 5/4/99 //**ENDIF //** P3N - 5/4/99 IF LEN(PRNT_VAL) <= PRNT_LEN IF WHCHORDER == 'PROD' .AND. WHICH_TYPE == 'GLASS' .AND. ; //** P3N - 10/19/99 EMPTY(PRNT_QTY) .AND. EMPTY(SHIP_QTY) .AND. EMPTY(BK_ORD) //** P3N - 10/19/99 MGL_LINE_DESC := PRNT_VAL //** P3N - 10/19/99 ELSE //** P3N - 10/19/99 AADD(PBODY_ARR, STRTRAN(PRNT_VAL,'~',' ') ) // ITEM LINE FOR ALL PRODUCTION ORDERS AADD(PAMTS_ARR, PAMTS) // ITEM LINE FOR ALL PRODUCTION ORDERS ENDIF ELSE MEMOCNT := MLCOUNT(PRNT_VAL, PRNT_LEN, 0, .T.) PRNTOUTVAR = STRTRAN(PRNT_VAL, CHR(248), CHR(179)) FOR II = 1 TO MEMOCNT PRNT_VAL := MEMOTRAN(MEMOLINE(PRNTOUTVAR, PRNT_LEN, II, 0, .T.), '') AADD(PBODY_ARR, STRTRAN(PRNT_VAL,'~', ' ') ) IF II < MEMOCNT AADD(PAMTS_ARR, NIL) ELSE AADD(PAMTS_ARR, PAMTS) ENDIF NEXT //** REMOVED DUE TO MULIT SPACING AT PAWNEE - P3N - 11/19/99 //** AADD(PBODY_ARR, ' ' ) // GET RID OF THIS BLANK BETWEEN ?? //** AADD(PAMTS_ARR, NIL) ENDIF ENDIF //** P3N*4/1/98 - EXCLUDE PRINT OF CUTTING SPECS //** P3N*4/1/98 - DOUBLE SPACE ! IF ASCAN(OL_ARR[13], {|X| AT('X', X[9]) > 0 }) > 0 DO_CUT_SPECS := .F. AADD(PBODY_ARR, ' ' ) AADD( PAMTS_ARR, NIL ) ENDIF IF DO_CUT_SPECS .AND. !EMPTY(OL_ARR[13]) // LINE ITEM CUTTING SPECS CUT_SPEC_ARR := OL_ARR[13] PRNTOUTVAR := {} FOR I := 1 TO LEN(CUT_SPEC_ARR) WORKVAR := '' IF CUT_SPEC_ARR[I,7] <> NIL // CALCULATED RESULT WORKVAR := WORKVAR + CUT_SPEC_ARR[I,4] + ' ' // PRINT DESC WORKVAR := WORKVAR + CUT_SPEC_ARR[I,5] + ' ' // PROFILE WORKVAR := WORKVAR + ': ' AADD(PRNTOUTVAR, {WORKVAR, CUT_SPEC_ARR[I,7], ; CUT_SPEC_ARR[I,11], CUT_SPEC_ARR[I,12], CUT_SPEC_ARR[I,3], ; CUT_SPEC_ARR[I,13] , CUT_SPEC_ARR[I,14] , ; // 6-7 CUT_SPEC_ARR[I,15] , CUT_SPEC_ARR[I,16] , ; // 8-9 CUT_SPEC_ARR[I,17] } ) // 10 ENDIF NEXT II := 0 WAMTS_ARR := NIL FOR I := 1 TO LEN(PRNTOUTVAR) II ++ // DUMP DATA IN "BUFFER" TO START FRESH LINE ON WIDTH/HEIGHT VARS. IF PRNTOUTVAR[I,3]$'W' .AND. II = 2 // WIDTH/HEIGHT/NOTHING AADD(PBODY_ARR, STRTRAN(WORKVAR,'~',' ') ) // WAITING TO FILL LINE - DUMP LINE FOR CLEAN WID HT AADD(PAMTS_ARR, WAMTS_ARR) WAMTS_ARR := NIL II := 1 ENDIF IF II = 1 // 1ST ITEM IN A LINE WORKVAR := '' ELSE WORKVAR := WORKVAR + ' ' ENDIF IF !PRNTOUTVAR[I,3]$'H' // SINCE A PAIR, TAKE QTY FROM THE WIDTH // NUM IN SPEC ORD QTY XFACTOR WORKQTY := PRNTOUTVAR[I,5] * (PRNTOUTVAR[I,6] * (1 + PRNTOUTVAR[I,7]) ) ELSE WORKQTY := 0 ENDIF IF !PRNTOUTVAR[I,3]$'WH' // WIDTH/HEIGHT/NOTHING IF PRNTOUTVAR[I,5] <> 0 WORKVAR := WORKVAR + PADR( ALLTRIM(STR( WORKQTY, 2 )),3) ELSE WORKVAR := WORKVAR + CHR(255) + ' ' ENDIF WORKVAR := WORKVAR + PRNTOUTVAR[I,1] IF PRNTOUTVAR[I,4]$'D' // FRACTION / DECIMAL WORKOUT := STR(PRNTOUTVAR[I,2],8,4) ELSE WORKOUT := PADR(PRNT_SIZE( PRNTOUTVAR[I,2] ),8) ENDIF WORKVAR := WORKVAR + WORKOUT //** ELSEIF II = 1 ELSEIF II = 1 .OR. II = 3 //** P3N - 4/6/99 // IT IS A WIDTH OR HEIGHT CUT SPEC IF !EMPTY(PRNTOUTVAR[I,8]) // WIDTH/HEIGHT DESCRIPTION AADD(PBODY_ARR, PRNTOUTVAR[I,8] ) AADD(PAMTS_ARR, NIL ) ENDIF WORKVAR := WORKVAR + ' ' + ALLTRIM(PRNT_SIZE( PRNTOUTVAR[I,2] )) + '~~x' IF WORKQTY = 0 WAMTS_ARR := NIL ELSEIF WHCHORDER == 'BACKORD' WAMTS_ARR := { 0 , 0 , BK_ORD , 0, .F., .T., 0 } ************WAMTS_ARR := { SHIP_QTY, BK_ORD, PRNT_QTY , 0, .F., .T., 0 } ELSE WAMTS_ARR := { WORKQTY, 0, 0, 0, .F., .F., 0 } ENDIF // WIDTH/HEIGHT/NOTHING ELSE // ASSUME PREVIOUS ONE WAS A WIDTH WORKVAR := ALLTRIM(WORKVAR) + ' ' WORKVAR := WORKVAR + ALLTRIM(PRNT_SIZE( PRNTOUTVAR[I,2] )) ENDIF // LAST ONE ON LINE OR IN ARRAY //** IF I = LEN(PRNTOUTVAR) .OR. II = 2 //** PRINT STORM COPY COLUMN FORMAT (IE: C200007 @ IOLA) IF I = LEN(PRNTOUTVAR) .OR. II >= 2 //** P3N - 4/6/99 IF PRNTOUTVAR[I,10] == 'S' //** P3N - 4/6/99 IF II = 2 //** P3N - 4/6/99 WORKVAR := PADR(WORKVAR , 20, ' ') //** P3N - 4/6/99 ELSEIF II = 4 //** P3N - 4/6/99 AADD(PBODY_ARR, STRTRAN(WORKVAR,'~',' ') ) AADD( PAMTS_ARR, WAMTS_ARR ) //** P3N - 4/6/99 WAMTS_ARR := NIL //** P3N - 4/6/99 ENDIF //** P3N - 4/6/99 ELSE WORKVAR := WORKVAR+' '+MGL_LINE_DESC //** P3N - 10/19/99 AADD(PBODY_ARR, STRTRAN(WORKVAR,'~',' ')) AADD( PAMTS_ARR, WAMTS_ARR ) IF PRNTOUTVAR[I,3]$'WH' // EXTRA LINE DESCRIPTION IF !EMPTY(OL_ARR[14]) .AND. PRNTOUTVAR[I,10]$'Y ' // PRINT ITEM DESC AADD(PBODY_ARR, STRTRAN(OL_ARR[14],'~',' ') ) AADD( PAMTS_ARR, NIL ) ENDIF ENDIF WAMTS_ARR := NIL ENDIF ENDIF //** IF II = 2 //** II := 0 //** ENDIF IF II >= 2 //** P3N - 4/6/99 //** PRINT STORM COPY COLUMN FORMAT (IE: C200007 @ IOLA) IF PRNTOUTVAR[I,10] == 'S' //** P3N - 4/6/99 IF II > 3 //** P3N - 4/6/99 II := 0 //** P3N - 4/6/99 ENDIF //** P3N - 4/6/99 ELSE //** P3N - 4/6/99 II := 0 //** P3N - 4/6/99 ENDIF //** P3N - 4/6/99 ENDIF //** P3N - 4/6/99 NEXT IF EMPTY(OL_ARR[6]) // LINE ITEM NOTES - LINE_NOTES IN LINE DBF ELSEIF OL_ARR[16] == 'U' // PRINT THE NOTES UNDER THE LINE ITEM RETVARARR := PRT_MEMO(PBODY_ARR, PAMTS_ARR, OL_ARR[6], PRNT_LEN) // PRINT THE LINE ITEM NOTES PBODY_ARR := RETVARARR[1] PAMTS_ARR := RETVARARR[2] ENDIF IF LEN(PRNTOUTVAR) > 0 AADD(PBODY_ARR, ' ' ) // DOUBLE SPACE AADD(PAMTS_ARR, WAMTS_ARR) WAMTS_ARR := NIL ENDIF ELSE IF EMPTY(OL_ARR[6]) // LINE ITEM NOTES - LINE_NOTES IN LINE DBF ELSEIF OL_ARR[16] == 'U' // PRINT THE NOTES UNDER THE LINE ITEM RETVARARR := PRT_MEMO(PBODY_ARR, PAMTS_ARR, OL_ARR[6], PRNT_LEN) // PRINT THE LINE ITEM NOTES PBODY_ARR := RETVARARR[1] PAMTS_ARR := RETVARARR[2] ENDIF ENDIF ENDIF SAVE_TYPE := WHICH_TYPE IF DBLSPACE(WHICH_TYPE, WHCHORDER, SUBTYPE, MPROD_CODE) //** P3N - 02/12/04 AADD(PBODY_ARR, ' ' ) //** P3N - 02/12/04 AADD( PAMTS_ARR, NIL ) //** P3N - 02/12/04 ENDIF //** P3N - 02/12/04 RETURN {LI_TTL, PBODY_ARR, PAMTS_ARR} *************************************************************** * P3N - 2/12/04 SHOULD WE DOUBLE SPACE THIS ORDER? *************************************************************** FUNCTION DBLSPACE(WHICH_TYPE, WHCHORDER, SUBTYPE, P_PROD) //** P3N - 02/12/04 LOCAL RETVAL := .F. LOCAL ITEM_CAT_CODE := GET_CATCODE( P_PROD ) IF EMPTY(SUBTYPE) SUBTYPE := '' ENDIF IF CATEGORY->(DBSEEK( ITEM_CAT_CODE )) IF WHCHORDER = 'PROD' IF WHICH_TYPE = 'FRAME'.AND.AT('F', UPPER(CATEGORY->DBLSP_PROD)) >0 RETVAL := .T. ENDIF IF WHICH_TYPE = 'STORM'.AND.AT('F', UPPER(CATEGORY->DBLSP_PROD)) >0 RETVAL := .T. ENDIF IF WHICH_TYPE = 'GLASS'.AND.AT('G', UPPER(CATEGORY->DBLSP_PROD)) >0 RETVAL := .T. ENDIF IF WHICH_TYPE = 'SCREEN'.AND.AT('S', UPPER(CATEGORY->DBLSP_PROD)) >0 RETVAL := .T. ENDIF IF WHICH_TYPE = 'CTRL'.AND.AT('R', UPPER(CATEGORY->DBLSP_PROD)) >0 //** SUBTYPE = 'GOLDEN' RETVAL := .T. ENDIF ELSEIF WHCHORDER = 'OD' IF SUBTYPE = 'DELIVERY'.AND.AT('D', UPPER(CATEGORY->DBLSP_OD)) >0 //** DELIVERY COPY RETVAL := .T. ENDIF IF SUBTYPE = 'ORDERDESK'.AND.AT('O', UPPER(CATEGORY->DBLSP_OD)) >0 //** ORDERDESK COPY RETVAL := .T. ENDIF IF SUBTYPE = 'PO'.AND.AT('I', UPPER(CATEGORY->DBLSP_OD)) >0 //** INTERCOMPANY PURCHASE ORDER RETVAL := .T. ENDIF ELSEIF WHCHORDER = 'INV' IF EMPTY(SUBTYPE).AND.AT('I', UPPER(CATEGORY->DBLSP_INV)) >0 //** CUSTOMER INVOICE COPY RETVAL := .T. ENDIF IF SUBTYPE = 'PREBILL'.AND.AT('B', UPPER(CATEGORY->DBLSP_INV)) >0 //** PREBILL INVOICE COPY RETVAL := .T. ENDIF IF SUBTYPE = 'PRECOST'.AND.AT('C', UPPER(CATEGORY->DBLSP_INV)) >0 //** PRECOST INVOICE COPY RETVAL := .T. ENDIF ELSEIF WHCHORDER = 'BACKORD' IF CATEGORY->DBLSP_BO = 'Y' RETVAL := .T. ENDIF ENDIF **ERR_BOX('FOUND ITEM_CAT_CODE = ' + ITEM_CAT_CODE, ; ** 'PROD CODE = ' + P_PROD, 'SUBTYPE = '+ SUBTYPE, ; ** 'WHCHORDER = ' + WHCHORDER, 'WHICH_TYPE = '+ WHICH_TYPE) ENDIF RETURN RETVAL *************************************************************** * P3N - 2/12/04 VALIDATE THE CATEGROY DOUBLE SPACE CODES *************************************************************** FUNCTION VAL_DBLSP(CMD) //** CMD - "PROD" PRODUCTION ORDER COPIES //** CMD - "OD" ORDERDESK ORDER COPIES //** CMD - "INV" INVOICE ORDER COPIES //** CMD - "BO" BACKORDER ORDER COPIES LOCAL RETVAL := .T. IF CMD = 'PROD' * ERR_BOX('Prodction double spaceing opts: "F", "G", "S" are valid') * RETVAL := .F. ELSEIF CMD = 'OD' * IF CATEGORY->DBLSP_OD ELSEIF CMD = 'INV' * IF CATEGORY->DBLSP_INV ELSEIF CMD = 'BO' * IF CATEGORY->DBLSP_BO ELSE * ERR_BOX('Invalid CMD in VAL_DBLSP() function') ENDIF RETURN RETVAL *************************************************************** * P3N - 5/22/98 ARE THERE ANY BACKORDER ITEMS TO PRINT? *************************************************************** FUNCTION ORD_QTYS(WHCHORDER, OL_ARR) LOCAL ELM, OLQTY, NUM_IN_SPEC, XFACTOR, CALCQTY, SCRNKEY, ADDLKEY LOCAL PRNT_QTY := OL_ARR[7] // ITEM QUANTITY LOCAL SHIP_QTY := OL_ARR[11] // ITEM SHIPPED QTY LOCAL CUT_SPEC_ARR := OL_ARR[13] // CUTTING SPECS ARR LOCAL LINE_NUM := OL_ARR[9] // ORDER LINE_NUM LOCAL PAR_PROD := OL_ARR[10] //ORDER PROD_CODE-PAR_PROD FOR SCREENS LOCAL BK_ORD := 0 //** P3N - 11/12/98 IF EMPTY(PRNT_QTY) //** P3N - 11/12/98 PRNT_QTY := 0 //** P3N - 11/12/98 ENDIF //** P3N - 11/12/98 IF EMPTY(SHIP_QTY) //** P3N - 11/12/98 SHIP_QTY := 0 //** P3N - 11/12/98 ENDIF //** P3N - 11/12/98 BK_ORD := PRNT_QTY - SHIP_QTY // BACK ORDER QTY IF WHCHORDER == 'BACKORD' IF EMPTY(PRNT_QTY) ADDLKEY := MORDER_NUM + PAR_PROD + LINE_NUM IF ADDL_LINES->(DBSEEK(ADDLKEY)) OLQTY := ADDL_LINES->QUANTITY ADDLKEY := MORDER_NUM + LINE_NUM + PAR_PROD SHIP_QTY := SCRN_SHPQTY(ADDLKEY) BK_ORD := OLQTY - SHIP_QTY ELSE ELM := ASCAN(CUT_SPEC_ARR, {|X| AT('N', X[9]) > 0 }) // IS THIS A SCREEN SPEC? IF EMPTY(ELM) ELSE OLQTY := CUT_SPEC_ARR[ELM, 3] NUM_IN_SPEC := CUT_SPEC_ARR[ELM, 13] XFACTOR := CK_XTRAWIND( 'ORD_LINES', 'ORDER_OPTS', .F. ) CALCQTY := OLQTY * NUM_IN_SPEC * ( 1 + XFACTOR ) PRNT_QTY := CALCQTY //** LINE ITEM QTY SCRNKEY := MORDER_NUM + LINE_NUM + 'SCREENS' + PAR_PROD SHIP_QTY := SCRN_SHPQTY(SCRNKEY) BK_ORD := CALCQTY - SHIP_QTY ENDIF ENDIF ENDIF ENDIF RETURN { PRNT_QTY, SHIP_QTY, BK_ORD } *************************************************************** * P3N - 5/22/98 GET THE SHIPPED SCREENS TO PRINT ON BACK ORDER! *************************************************************** FUNCTION SCRN_SHPQTY(SCRNKEY) RETVAL := 0 IF ORD_SHIP->(DBSEEK(SCRNKEY)) DO WHILE ORD_SHIP->(!EOF()) .AND. ; ( ORD_SHIP->ORDER_NUM + STR(ORD_SHIP->LINE_NUM, 3) + ; ORD_SHIP->PROD_CODE + ORD_SHIP->PAR_PROD == SCRNKEY ) RETVAL := RETVAL + ORD_SHIP->SHIP_QTY ORD_SHIP->(DBSKIP(+1)) ENDDO ENDIF RETURN RETVAL *************************************************************** *************************************************************** *************************************************************** FUNCTION DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) LOCAL PRT_AMT := .F. //**IF (CUR_MAST)->TERMS = '90' .OR. ; //** NO CHARGE //**P3N - 4/27/98 //** (CUR_MAST)->TERMS = '96' //** CANCELLATION //**P3N - 4/27/98 IF ZERO_ORDER() //** NO CHARGE //**P3N - 3/05/99 //** FOR A NO CHARGE OR CANCELLATION FORCE TO NOT PRINT AMTS ELSEIF WHCHORDER == 'INV' IF ITEMIZE = 1 PRT_AMT := .T. ENDIF ELSEIF WHCHORDER == 'OD' // ORDER DESK PRT_AMT := .T. IF MHOME_LOC_CODE = 'LINDS' .AND. SUBTYPE == 'ORDERDESK' //PER LINDA @ LINDSBOURG 11-10-97 //PRINT GL ALLOCATIONS / ORDER AMOUNTS ON ORDERDESK - GOLDEN ROD ****ELSEIF MHOME_LOC_CODE = 'KC' .AND. SUBTYPE == 'ORDERDESK' **** //PER ELLEN @ KC 10-26-98 **** //DO NOT PRINT GL ALLOCATIONS / ORDER AMOUNTS ON ORDERDESK - GOLDEN ROD **** PRT_AMT := .F. ELSEIF SUBTYPE == 'DELIVERY' .AND. !IS_COD( (CUR_MAST)->TERMS ) PRT_AMT := .F. ELSEIF SUBTYPE == 'PO' // DO NOT PRINT AMTS ON THE INTERCOMPANY COPY PRT_AMT := .F. ELSEIF (CUR_MAST)->PRICE_SHT$'I' //** P3N - 01/30/06 //** P3N - 01/30/06 PER PAT PRINT PRICING ON ODERDESK COPY FOR SPECIAL DEALERS //**ELSEIF (CUR_MAST)->PRICE_SHT$'IS' //** P3N - 01/30/06 //DO NOT PRINT AMTS ON OD COPY WHEN INTERCOMPANY OR SPECIAL DEALER PRICING! PRT_AMT := .F. ENDIF ELSEIF WHCHORDER == 'BACKORD' //** P3N - 5/1/98 PRT_AMT := .F. //** P3N - 5/1/98 ENDIF RETURN PRT_AMT ******************************************************************** // PRINT THE PRODUCTION LINE MEMOS ******************************************************************** FUNCTION PRT_MEMO(PBODY_ARR, PAMTS_ARR, PROD_MEMO, PRNT_LEN) LOCAL MEMOCNT, PRNTOUTVAR, PRNT_VAL, I MEMOCNT := MLCOUNT(PROD_MEMO, PRNT_LEN, 0, .T.) PRNTOUTVAR = STRTRAN(PROD_MEMO, CHR(248), CHR(179)) FOR I = 1 TO MEMOCNT PRNT_VAL := MEMOTRAN(MEMOLINE(PRNTOUTVAR, PRNT_LEN, I, 0, .T.), '') AADD(PBODY_ARR, PRNT_VAL ) AADD(PAMTS_ARR, NIL) NEXT RETURN { PBODY_ARR, PAMTS_ARR } ********** // THIS PRG IS A print port manager for lib programs // needing multiple output routings. // will be called IF FILE('PRINTERS.DBF') PROCEDURE CUSTOMPRINT() LOCAL CLOSE_ARR := {}, PRN_LIST := {} * - SELECT A PRINTER FROM THE TABLE BELOW * * draw input screen * AADD(PRN_LIST , 'OKI') AADD(PRN_LIST , 'EPS') AADD(PRN_LIST , 'HPJ') // MOVED HERE 6-10-20 AADD(PRN_LIST , 'PRW') AADD(PRN_LIST , 'PRN') AADD(PRN_LIST , 'P90') AADD(PRN_LIST , 'HPD') AADD(PRN_LIST , 'HP4') _REPTPRNT := STR(ASCAN(PRN_LIST, {|X| X = REPT_PRN}),1) _BOPRNT := STR(ASCAN(PRN_LIST, {|X| X = BO_PRN}),1) //** P3N - 4/30/98 _PRODPRNT := STR(ASCAN(PRN_LIST, {|X| X = PROD_PRN}),1) _ODPRNT := STR(ASCAN(PRN_LIST, {|X| X = OD_PRN}),1) _INVPRNT := STR(ASCAN(PRN_LIST, {|X| X = INV_PRN}),1) _DELPRNT := STR(ASCAN(PRN_LIST, {|X| X = DEL_PRN}),1) _GRPRNT := STR(ASCAN(PRN_LIST, {|X| X = GR_PRN}),1) _ICPRNT := STR(ASCAN(PRN_LIST, {|X| X = IC_PRN}),1) _LBLPRNT := STR(ASCAN(PRN_LIST, {|X| X = LBL_PRN}),1) _QTEPRNT := STR(ASCAN(PRN_LIST, {|X| X = INV_PRN}),1) _PREPRNT := STR(ASCAN(PRN_LIST, {|X| X = INV_PRN}),1) // 3/31/2021 - ADJUSTMENT FACTOR FOR WIDTH/HEIGHT OF PRINT _REPTFACW := REPT_FACW _REPTFACH := REPT_FACH IF _REPTFACW = 0 _REPTFACW := 100 ENDIF IF _REPTFACH = 0 _REPTFACH := 100 ENDIF _PRODFACW := PROD_FACW _PRODFACH := PROD_FACH IF _PRODFACW = 0 _PRODFACW := 100 ENDIF IF _PRODFACH = 0 _PRODFACH := 100 ENDIF _ODFACW := OD_FACW _ODFACH := OD_FACH IF _ODFACW = 0 _ODFACW := 100 ENDIF IF _ODFACH = 0 _ODFACH := 100 ENDIF _INVFACW := INV_FACW _INVFACH := INV_FACH IF _INVFACW = 0 _INVFACW := 100 ENDIF IF _INVFACH = 0 _INVFACH := 100 ENDIF _DELFACW := DEL_FACW _DELFACH := DEL_FACH IF _DELFACW = 0 _DELFACW := 100 ENDIF IF _DELFACH = 0 _DELFACH := 100 ENDIF _GRFACW := GR_FACW _GRFACH := GR_FACH IF _GRFACW = 0 _GRFACW := 100 ENDIF IF _GRFACH = 0 _GRFACH := 100 ENDIF _LBLFACW := LBL_FACW _LBLFACH := LBL_FACH IF _LBLFACW = 0 _LBLFACW := 100 ENDIF IF _LBLFACH = 0 _LBLFACH := 100 ENDIF _ICFACW := IC_FACW _ICFACH := IC_FACH IF _ICFACW = 0 _ICFACW := 100 ENDIF IF _ICFACH = 0 _ICFACH := 100 ENDIF _BOFACW := BO_FACW _BOFACH := BO_FACH IF _BOFACW = 0 _BOFACW := 100 ENDIF IF _BOFACH = 0 _BOFACH := 100 ENDIF _QTEFACW := QTE_FACW _QTEFACH := QTE_FACH IF _QTEFACW = 0 _QTEFACW := 100 ENDIF IF _QTEFACH = 0 _QTEFACH := 100 ENDIF _PREFACW := PRE_FACW _PREFACH := PRE_FACH IF _PREFACW = 0 _PREFACW := 100 ENDIF IF _PREFACH = 0 _PREFACH := 100 ENDIF M_LPTR := REPT_PORT M_LPTP := PROD_PORT M_LPTO := OD_PORT M_LPTI := INV_PORT M_LPTD := DEL_PORT M_LPTG := GR_PORT M_LPTL := LBL_PORT M_LPTIC := IC_PORT M_LPTBO := BO_PORT //** P3N - 4/30/98 M_LPTQ := INV_PORT //** P3N - 4/13/98 M_LPTPRE := INV_PORT //** P3N - 4/13/98 IF FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 M_LPTQ := QTE_PORT //** P3N - 4/13/98 ENDIF IF FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 M_LPTPRE := PRE_PORT //** P3N - 4/13/98 ENDIF SELECT WORKSTAT DO WHILE .T. CLEAR TITLE = 'SELECT PRINTER' H = ((80 - LEN(TITLE)) / 2) @ 0,H SAY TITLE @ 0,74 SAY 'PDEF' @ 1,0 SAY DOUBLE @ 3,72 SAY DTOC(DATE()) @ 5,28 SAY " AVAILABLE PRINTERS " @ 6,28 SAY " ================== " @ 7,26 SAY "1. Okidata Microline 84" @ 8,26 SAY "2. Epson (All Models)" @ 9,26 SAY "3. HP LaserJet " LOOP4100 := .T. DO WHILE LOOP4100 SET CONFIRM OFF @ 4,72 SAY TIME() // 3/31/2021 - Set ZOOM Factor for each one. @ 11,09 SAY " Set ZOOM Resize Factor from 100% ------>Width Height" @ 12,09 SAY " Select REPORTS Printer : : LPT Port : : : : : :" @ 13,09 SAY " Select PRODUCTION Printer : : LPT Port : : : : : :" @ 14,09 SAY " Select ORDER DESK Printer : : LPT Port : : : : : :" @ 15,09 SAY " Select INVOICE Printer : : LPT Port : : : : : :" @ 16,09 SAY " Select DELIVERY Printer : : LPT Port : : : : : :" @ 17,09 SAY " Select GOLDEN ROD Printer : : LPT Port : : : : : :" @ 18,09 SAY "Select MAILING LABEL Printer : : LPT Port : : : : : :" @ 19,09 SAY " Select INTERCOMPANY Printer : : LPT Port : : : : : :" @ 20,09 SAY " Select BACKORDER Printer : : LPT Port : : : : : :" IF FIELDPOS('QTE_PRN') > 0 .AND. FIELDPOS('QTE_PORT') > 0 @ 21,09 SAY " Select QUOTE Printer : : LPT Port : : : : : :" ENDIF IF FIELDPOS('PRE_PRN') > 0 .AND. FIELDPOS('PRE_PORT') > 0 @ 22,09 SAY " Select PREBILL Printer : : LPT Port : : : : : :" ENDIF DO WHILE .T. @ 12,39 GET _REPTPRNT PICTURE '9' VALID CHK_PRN(_REPTPRNT) @ 12,54 GET M_LPTR PICTURE '9' VALID M_LPTR$'1234' @ 12,60 GET _REPTFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR @ 12,66 GET _REPTFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR @ 13,39 GET _PRODPRNT PICTURE '9' VALID CHK_PRN(_PRODPRNT) @ 13,54 GET M_LPTP PICTURE '9' VALID M_LPTP$'1234' @ 13,60 GET _PRODFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR @ 13,66 GET _PRODFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR @ 14,39 GET _ODPRNT PICTURE '9' VALID CHK_PRN(_ODPRNT) @ 14,54 GET M_LPTO PICTURE '9' VALID M_LPTO$'1234' @ 14,60 GET _ODFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR @ 14,66 GET _ODFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR @ 15,39 GET _INVPRNT PICTURE '9' VALID CHK_PRN(_INVPRNT) @ 15,54 GET M_LPTI PICTURE '9' VALID M_LPTI$'1234' @ 15,60 GET _INVFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR @ 15,66 GET _INVFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR @ 16,39 GET _DELPRNT PICTURE '9' VALID CHK_PRN(_DELPRNT) @ 16,54 GET M_LPTD PICTURE '9' VALID M_LPTD$'1234' @ 16,60 GET _DELFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR @ 16,66 GET _DELFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR @ 17,39 GET _GRPRNT PICTURE '9' VALID CHK_PRN(_GRPRNT) @ 17,54 GET M_LPTG PICTURE '9' VALID M_LPTG$'1234' @ 17,60 GET _GRFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR @ 17,66 GET _GRFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR @ 18,39 GET _LBLPRNT PICTURE '9' VALID CHK_PRN(_LBLPRNT) @ 18,54 GET M_LPTL PICTURE '9' VALID M_LPTL$'1234' @ 18,60 GET _LBLFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR @ 18,66 GET _LBLFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR @ 19,39 GET _ICPRNT PICTURE '9' VALID CHK_PRN(_ICPRNT) @ 19,54 GET M_LPTIC PICTURE '9' VALID M_LPTIC$'1234' @ 19,60 GET _ICFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR @ 19,66 GET _ICFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR @ 20,39 GET _BOPRNT PICTURE '9' VALID CHK_PRN(_BOPRNT) //** P3N - 4/30/98 @ 20,54 GET M_LPTBO PICTURE '9' VALID M_LPTBO$'1234' @ 20,60 GET _BOFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR @ 20,66 GET _BOFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR IF FIELDPOS('QTE_PRN') > 0 .AND. FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 @ 21,39 GET _QTEPRNT PICTURE '9' VALID CHK_PRN(_QTEPRNT) @ 21,54 GET M_LPTQ PICTURE '9' VALID M_LPTQ$'1234' @ 21,60 GET _QTEFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR @ 21,66 GET _QTEFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR ENDIF IF FIELDPOS('PRE_PRN') > 0 .AND. FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 @ 22,39 GET _PREPRNT PICTURE '9' VALID CHK_PRN(_PREPRNT) @ 22,54 GET M_LPTPRE PICTURE '9' VALID M_LPTPRE$'1234' @ 22,60 GET _PREFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR @ 22,66 GET _PREFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR ENDIF READ IF LASTKEY() == 27 .AND. PROCNAME(1) <> 'SET_PRNT_P' CLS FOR L = 1 TO LEN(CLOSE_ARR) MFILE = CLOSE_ARR[L] SELECT(MFILE) USE NEXT RETURN ENDIF IF EMPTY(M_LPTR) .OR. EMPTY(M_LPTP) .OR. EMPTY(M_LPTO); .OR. EMPTY(M_LPTI) .OR. EMPTY(M_LPTD) .OR. EMPTY(M_LPTG) LOOP ENDIF CORR = CORRCHEK() IF CORR = 'Y' LOOP4100 := .F. EXIT ENDIF IF LASTKEY() == 27 .AND. PROCNAME(1) <> 'SET_PRNT_P' CLEAR FOR L = 1 TO LEN(CLOSE_ARR) MFILE = CLOSE_ARR[L] SELECT(MFILE) USE NEXT RETURN ENDIF ENDDO ENDDO SETCOLOR(LNOR) SELECT WORKSTAT REC_LOCK(1) REPLACE REPT_PRN WITH PRN_LIST[VAL(_REPTPRNT)] REPLACE PROD_PRN WITH PRN_LIST[VAL(_PRODPRNT)] REPLACE OD_PRN WITH PRN_LIST[VAL(_ODPRNT)] REPLACE INV_PRN WITH PRN_LIST[VAL(_INVPRNT)] REPLACE DEL_PRN WITH PRN_LIST[VAL(_DELPRNT)] REPLACE GR_PRN WITH PRN_LIST[VAL(_GRPRNT)] REPLACE LBL_PRN WITH PRN_LIST[VAL(_LBLPRNT)] REPLACE IC_PRN WITH PRN_LIST[VAL(_ICPRNT)] REPLACE BO_PRN WITH PRN_LIST[VAL(_BOPRNT)] //** P3N - 4/30/98 IF FIELDPOS('QTE_PRN') > 0 //** P3N - 4/13/98 REPLACE QTE_PRN WITH PRN_LIST[VAL(_QTEPRNT)] //** P3N - 4/13/98 ENDIF IF FIELDPOS('PRE_PRN') > 0 //** P3N - 4/13/98 REPLACE PRE_PRN WITH PRN_LIST[VAL(_PREPRNT)] //** P3N - 4/13/98 ENDIF REPLACE REPT_PORT WITH M_LPTR REPLACE PROD_PORT WITH M_LPTP REPLACE OD_PORT WITH M_LPTO REPLACE INV_PORT WITH M_LPTI REPLACE DEL_PORT WITH M_LPTD REPLACE GR_PORT WITH M_LPTG REPLACE LBL_PORT WITH M_LPTL REPLACE IC_PORT WITH M_LPTIC REPLACE BO_PORT WITH M_LPTBO //** P3N - 4/30/98 IF FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 REPLACE QTE_PORT WITH M_LPTQ //** P3N - 4/13/98 ENDIF IF FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 REPLACE PRE_PORT WITH M_LPTPRE //** P3N - 4/13/98 ENDIF // 3/31/2021 - ADJUSTMENT FACTOR FOR WIDTH/HEIGHT OF PRINT REPLACE REPT_FACW WITH _REPTFACW REPLACE REPT_FACH WITH _REPTFACH REPLACE PROD_FACW WITH _PRODFACW REPLACE PROD_FACH WITH _PRODFACH REPLACE OD_FACW WITH _ODFACW REPLACE OD_FACH WITH _ODFACH REPLACE INV_FACW WITH _INVFACW REPLACE INV_FACH WITH _INVFACH REPLACE DEL_FACW WITH _DELFACW REPLACE DEL_FACH WITH _DELFACH REPLACE GR_FACW WITH _GRFACW REPLACE GR_FACH WITH _GRFACH REPLACE LBL_FACW WITH _LBLFACW REPLACE LBL_FACH WITH _LBLFACH REPLACE IC_FACW WITH _ICFACW REPLACE IC_FACH WITH _ICFACH REPLACE BO_FACW WITH _BOFACW REPLACE BO_FACH WITH _BOFACH REPLACE QTE_FACW WITH _QTEFACW REPLACE QTE_FACH WITH _QTEFACH REPLACE PRE_FACW WITH _PREFACW REPLACE PRE_FACH WITH _PREFACH // RESET THE SYSTEM VARIABLES TOO!!! FOR L = 1 TO LEN(CLOSE_ARR) MFILE = CLOSE_ARR[L] SELECT(MFILE) USE NEXT CLEAR SCREEN RETURN ENDDO WHILE .T. RETURN * * * * * * * * * * * * * * * * * // @ 12,10 SAY " Select REPORTS Printer : : LPT Port : :" // @ 13,10 SAY " Select PRODUCTION Printer : : LPT Port : :" // @ 14,10 SAY " Select ORDER DESK Printer : : LPT Port : :" // @ 15,10 SAY " Select INVOICE Printer : : LPT Port : :" // @ 16,10 SAY " Select DELIVERY Printer : : LPT Port : :" // @ 17,10 SAY " Select GOLDEN ROD Printer : : LPT Port : :" // @ 18,10 SAY "Select MAILING LABEL Printer : : LPT Port : :" // @ 19,10 SAY " Select INTERCOMPANY Printer : : LPT Port : :" // @ 20,10 SAY " Select BACKORDER Printer : : LPT Port : :" //** P3N 4/30/98 // IF FIELDPOS('QTE_PRN') > 0 .AND. FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 // @ 21,10 SAY " Select QUOTE Printer : : LPT Port : :" // ENDIF // IF FIELDPOS('PRE_PRN') > 0 .AND. FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 // @ 22,10 SAY " Select PREBILL Printer : : LPT Port : :" // ENDIF **********************************************************************