428 lines
11 KiB
Plaintext
428 lines
11 KiB
Plaintext
|
|
#include "FiveWin.ch"
|
|
#include "report.ch"
|
|
|
|
#define MPAPDER_LETTER 1 // Letter 8 1/2 x 11 in
|
|
#define DMPAPER_LEGAL 5 // Legal 8 1/2 x 14 in
|
|
|
|
|
|
*************************************************************************
|
|
|
|
FUNCTION CGW_PRNT_FROM_FILE( WHCHORDER, OUTFILE, LPREVIEW, RPTNAME, ;
|
|
LINELIMIT, COL_LEN, PAPER, ORIENTATION, MYFONT )
|
|
|
|
LOCAL CFILE := M->_THISUSER_TEMP
|
|
LOCAL MHDC
|
|
LOCAL OPRINTER1, OPRINTER2, OPRINTER3
|
|
LOCAL CMODEL, CDOCUMENT, LUSER, LMODAL, LSELECTION
|
|
LOCAL MPRNTR
|
|
LOCAL OPRINTER, ODEVICE
|
|
LOCAL OREPORT
|
|
LOCAL RETVAL
|
|
LOCAL MDESC
|
|
LOCAL CKNAME, DATA2PRINT := ''
|
|
LOCAL FONTARR, OFONTWIDE, OFONT, OFONTBOLD, CTEXT
|
|
LOCAL FACT_W := 100, FACT_H := 100, SAVESEL := ALIAS()
|
|
|
|
|
|
DEFAULT LPREVIEW := .F.
|
|
// DEFAULT LINELIMIT := 54
|
|
DEFAULT LINELIMIT := 64
|
|
DEFAULT COL_LEN := 80
|
|
DEFAULT MYFONT := 'NORMAL'
|
|
DEFAULT ORIENTATION := 'PORTRAIT' // 3/4/2021
|
|
|
|
NET_USE('&WORKSTAT',.F.,5,'WORKSTAT')
|
|
SELECT( SAVESEL )
|
|
|
|
MDESC := WHCHORDER + ' '
|
|
|
|
IF WHCHORDER = 'REPORT'
|
|
MDESC := ALLTRIM( RPTNAME )
|
|
ELSEIF SELECT( 'ORD_MAST' ) > 0
|
|
MDESC += 'Order ' + ALLTRIM( ORD_MAST->ORDER_NUM )
|
|
ELSEIF SELECT( 'QUOTE_MAST' ) > 0
|
|
MDESC += 'Quote ' + ALLTRIM( QUOTE_MAST->ORDER_NUM )
|
|
ENDIF
|
|
|
|
DO CASE
|
|
CASE WHCHORDER = 'REPORT'
|
|
CKNAME := GETPRINTER('ReportPrinter')
|
|
FACT_W := WORKSTAT->REPT_FACW
|
|
FACT_H := WORKSTAT->REPT_FACH
|
|
|
|
PAPER := 'LETTER' // PER DARLENE 7-30-2020
|
|
ORIENTATION := 'LANDSCAPE' // PER DARLENE 7-30-2020
|
|
LINELIMIT := 36 // really no effect because the eject char is present.
|
|
// LINELIMIT := 40
|
|
// LINELIMIT := 42
|
|
|
|
CASE WHCHORDER = 'PROD'
|
|
CKNAME := GETPRINTER('ProdPrinter')
|
|
FACT_W := WORKSTAT->PROD_FACW
|
|
FACT_H := WORKSTAT->PROD_FACH
|
|
|
|
CASE WHCHORDER = 'GOLDEN'
|
|
CKNAME := GETPRINTER('GoldenPrinter')
|
|
FACT_W := WORKSTAT->GR_FACW
|
|
FACT_H := WORKSTAT->GR_FACH
|
|
|
|
CASE WHCHORDER = 'DEL'
|
|
CKNAME := GETPRINTER('DelPrinter')
|
|
FACT_W := WORKSTAT->DEL_FACW
|
|
FACT_H := WORKSTAT->DEL_FACH
|
|
|
|
CASE WHCHORDER = 'OD'
|
|
CKNAME := GETPRINTER('OrdDeskPrinter')
|
|
FACT_W := WORKSTAT->OD_FACW
|
|
FACT_H := WORKSTAT->OD_FACH
|
|
|
|
CASE WHCHORDER = 'PO'
|
|
CKNAME := GETPRINTER('InterCompPrinter')
|
|
FACT_W := WORKSTAT->IC_FACW
|
|
FACT_H := WORKSTAT->IC_FACH
|
|
|
|
CASE WHCHORDER = 'INV'
|
|
CKNAME := GETPRINTER('InvPrinter')
|
|
FACT_W := WORKSTAT->INV_FACW
|
|
FACT_H := WORKSTAT->INV_FACH
|
|
|
|
CASE WHCHORDER = 'PREBILL'
|
|
CKNAME := GETPRINTER('PreBillPrinter')
|
|
FACT_W := WORKSTAT->PRE_FACW
|
|
FACT_H := WORKSTAT->PRE_FACH
|
|
|
|
CASE WHCHORDER = 'BACKORD'
|
|
CKNAME := GETPRINTER('BackOrdPrinter')
|
|
FACT_W := WORKSTAT->BO_FACW
|
|
FACT_H := WORKSTAT->BO_FACH
|
|
|
|
CASE WHCHORDER = 'PREBILL'
|
|
CKNAME := GETPRINTER('PreBillPrinter')
|
|
FACT_W := WORKSTAT->PRE_FACW
|
|
FACT_H := WORKSTAT->PRE_FACH
|
|
|
|
CASE WHCHORDER = 'PRECOST'
|
|
CKNAME := GETPRINTER('PreCostPrinter')
|
|
FACT_W := WORKSTAT->PRE_FACW
|
|
FACT_H := WORKSTAT->PRE_FACH
|
|
|
|
CASE WHCHORDER = 'QUOTE'
|
|
CKNAME := GETPRINTER('QuotePrinter')
|
|
FACT_W := WORKSTAT->QTE_FACW
|
|
FACT_H := WORKSTAT->QTE_FACH
|
|
|
|
ENDCASE
|
|
|
|
IF FACT_W = 0
|
|
FACT_W := 100
|
|
ENDIF
|
|
|
|
IF FACT_H = 0
|
|
FACT_H := 100
|
|
ENDIF
|
|
|
|
|
|
// this is a redirected printer if it has a comma - leave it alone. 3-18-2021
|
|
// CKNAME := SUBS( CKNAME, 1, AT( ',', CKNAME )-1 )
|
|
|
|
|
|
IF FILE( CFILE )
|
|
DATA2PRINT := ALLTRIM( MEMOREAD( CFILE ) )
|
|
IF EMPTY( DATA2PRINT )
|
|
// MSGSTOP( 'No Information to Print', 'Document NOT printed' )
|
|
ELSE
|
|
|
|
ODEVICE := TPRINTER():NEW( MDESC, .F., NIL, CKNAME )
|
|
// DEFAULT IS LETTER
|
|
IF PAPER = 'LEGAL'
|
|
ODEVICE:SETPAGE( DMPAPER_LEGAL )
|
|
ELSE
|
|
// INCLUDING PAPER = 'LETTER'
|
|
ODEVICE:SETPAGE( MPAPDER_LETTER )
|
|
ENDIF
|
|
|
|
// DEFAULT IS PORTRAIT
|
|
IF ORIENTATION = 'LANDSCAPE'
|
|
ODEVICE:setlandscape()
|
|
ELSE
|
|
ODEVICE:setportrait()
|
|
ENDIF
|
|
|
|
FONTARR := CGW_SETFONT( @ODEVICE, WHCHORDER, @OREPORT, COL_LEN, NIL, FACT_W, FACT_H )
|
|
OFONT := FONTARR[1]
|
|
OFONTBOLD := FONTARR[2]
|
|
OFONTWIDE := FONTARR[3]
|
|
|
|
REPORT oReport ;
|
|
CAPTION MDESC ;
|
|
TO DEVICE ODEVICE ;
|
|
FONT oFont, OFONTBOLD, OFONTWIDE
|
|
|
|
COLUMN DATA " " SIZE COL_LEN // * Trick "Data" - we're fooling Mother
|
|
|
|
END REPORT
|
|
|
|
OREPORT:LSCREEN := LPREVIEW
|
|
oreport:cname := MDESC
|
|
oReport:nTitleUpLine := RPT_NOLINE
|
|
oReport:nTitleDnLine := RPT_NOLINE
|
|
|
|
// HALF INCH MARGINS
|
|
// oReport:Margin(.00, RPT_LEFT, RPT_INCHES)
|
|
// oReport:Margin(-.100, RPT_LEFT, RPT_INCHES)
|
|
|
|
|
|
CTEXT := MEMOREAD( ( ALLTRIM( OUTFILE ) ) )
|
|
|
|
|
|
IF WHCHORDER = 'REPORT'
|
|
oReport:Margin( 0.500, RPT_LEFT, RPT_INCHES )
|
|
oReport:Margin( 0.500, RPT_TOP, RPT_INCHES)
|
|
IF SUBS( CTEXT, 1, 2 ) = CR_LF()
|
|
CTEXT := SUBS( CTEXT, 2 )
|
|
ENDIF
|
|
|
|
ELSE
|
|
IF AT( CHR(27) + CHR(77), CTEXT ) > 0 // SET TO PICA - NOT NEEDED - THIS IS AN IMPACT PRINTER
|
|
oReport:Margin(-0.400, RPT_LEFT, RPT_INCHES)
|
|
ELSE
|
|
oReport:Margin(0.100, RPT_LEFT, RPT_INCHES)
|
|
ENDIF
|
|
// oReport:Margin(.56, RPT_TOP, RPT_INCHES)
|
|
oReport:Margin(.00, RPT_TOP, RPT_INCHES)
|
|
oReport:Margin(.00, RPT_BOTTOM, RPT_INCHES)
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
// IF AT( CHR(27) + CHR(77), CTEXT ) > 0 // SET TO PICA - NOT NEEDED - THIS IS AN IMPACT PRINTER
|
|
// oReport:Margin(-0.400, RPT_LEFT, RPT_INCHES)
|
|
// ELSE
|
|
// oReport:Margin(0.100, RPT_LEFT, RPT_INCHES)
|
|
// ENDIF
|
|
// // oReport:Margin(.56, RPT_TOP, RPT_INCHES)
|
|
// oReport:Margin(.00, RPT_TOP, RPT_INCHES)
|
|
// oReport:Margin(.00, RPT_BOTTOM, RPT_INCHES)
|
|
|
|
|
|
|
|
|
|
|
|
ACTIVATE REPORT oReport ;
|
|
ON INIT ( SayMemo(OREPORT, CTEXT, COL_LEN, LINELIMIT ), ;
|
|
OREPORT:LBREAK := .T. )
|
|
|
|
oFont:End()
|
|
OREPORT:END()
|
|
|
|
ODEVICE:setportrait()
|
|
ODEVICE:SETPAGE( MPAPDER_LETTER )
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN NIL
|
|
|
|
********************************************************************************************
|
|
|
|
STATIC Function SayMemo(OREPORT, cText, COL_LEN, MAXLEN )
|
|
|
|
LOCAL cLine
|
|
LOCAL nFor, nLines, nPageln
|
|
LOCAL POS1, POS2, WIDE_DATA, CLINE1, CLINE2, CLINE_WORK
|
|
|
|
IF LEN( OREPORT:ACOLS ) = 1 // 1ST TIME IN - SET COLUMN POSITIONS
|
|
AADD( OREPORT:ACOLS, 400 ) // 2
|
|
AADD( OREPORT:ACOLS, 750 ) // 3 dup delivery - 4th one
|
|
AADD( OREPORT:ACOLS, 1200 ) // 4
|
|
AADD( OREPORT:ACOLS, 1600 ) // 5
|
|
AADD( OREPORT:ACOLS, 2000 ) // 6
|
|
AADD( OREPORT:ACOLS, 2400 ) // 7
|
|
AADD( OREPORT:ACOLS, 2800 ) // 8
|
|
AADD( OREPORT:ACOLS, 3200 ) // 9
|
|
AADD( OREPORT:ACOLS, 3600 ) // 10
|
|
AADD( OREPORT:ACOLS, 4100 ) // 11
|
|
AADD( OREPORT:ACOLS, 4400 ) // 12
|
|
AADD( OREPORT:ACOLS, 4800 ) // 13
|
|
AADD( OREPORT:ACOLS, 5200 ) // 14
|
|
AADD( OREPORT:ACOLS, 5600 ) // 15
|
|
|
|
ENDIF
|
|
|
|
// cText := MEMOREAD( ( cTextfile ) )
|
|
|
|
nLines := MlCount( cText, COL_LEN ) // Original text has up to 76 chars. per line.
|
|
nPageln := 0
|
|
|
|
FOR nFor := 1 TO nLines
|
|
cLine := MemoLine( cText, COL_LEN, nFor )
|
|
|
|
|
|
IF AT( CHR(27) + CHR(77), CLINE ) > 0 // SET TO PICA - NOT NEEDED - THIS IS AN IMPACT PRINTER
|
|
CLINE := STRTRAN( CLINE, CHR(27) + CHR(77), '' )
|
|
ENDIF
|
|
|
|
|
|
// this overrides the actual line-limit - calculated in the report building.
|
|
IF AT( CHR(12), CLINE ) > 0 // EJECT
|
|
|
|
IF NFOR = NLINES ; // LAST LINE
|
|
.or. NFOR = NLINES-1 // LAST LINE
|
|
ELSE
|
|
CLINE := SUBS( CLINE, 1, AT( CHR(12), CLINE )-1 )
|
|
OUTPUT_LINE( OREPORT, CLINE )
|
|
nPageln := nPageln + 1
|
|
OREPORT:EndPage()
|
|
NPAGELN := 0
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
OUTPUT_LINE( OREPORT, CLINE )
|
|
|
|
ENDIF
|
|
|
|
NEXT
|
|
|
|
RETURN NIL
|
|
|
|
*********************************************************
|
|
|
|
FUNCTION OUTPUT_LINE( OREPORT, CLINE )
|
|
LOCAL POS1, CLINE1, CLINE2, POS2, WIDE_DATA, CLINE_WORK
|
|
|
|
|
|
oReport:StartLine()
|
|
|
|
POS1 := AT( CHR(27) + 'W1', CLINE ) // WE FOUND AN ESCAPE SEQUENCE FOR WIDE PRINT
|
|
IF POS1 > 0
|
|
|
|
CLINE_WORK := CLINE
|
|
DO WHILE .T.
|
|
CLINE1 := SUBS( CLINE_WORK, 1, POS1-1 ) // EVERYTHING LEADING UP TO THE WIDE PRINT
|
|
CLINE2 := SUBS( CLINE_WORK, POS1+3 )
|
|
POS2 := AT( CHR(27) + 'W0', CLINE2 )
|
|
WIDE_DATA := ALLTRIM( SUBS( CLINE2, 1, POS2 - 1 ) )
|
|
// CLINE2 := ALLTRIM( SUBS( CLINE2, POS2+3 ) )
|
|
CLINE2 := SUBS( CLINE2, POS2+3 )
|
|
|
|
IF !EMPTY( CLINE1 )
|
|
OREPORT:SAY( 1, CLINE1, 1 ) // 1ST COLUMN NORMAL FONT
|
|
ENDIF
|
|
|
|
IF AT( 'DUPLICATE DEL', WIDE_DATA) > 0
|
|
OREPORT:SAY( 5, WIDE_DATA, 3 )
|
|
ELSEIF AT( 'DUPLICATE', WIDE_DATA) > 0
|
|
OREPORT:SAY( 1, WIDE_DATA, 3 )
|
|
ELSEIF VAL( WIDE_DATA ) > 0 // ORDER NUMBER
|
|
OREPORT:SAY( 3, WIDE_DATA, 3 )
|
|
ELSE
|
|
MSGSTOP( 'WIDE VALUE NOT DEFINED' )
|
|
OREPORT:SAY( 1, WIDE_DATA, 3 )
|
|
ENDIF
|
|
|
|
POS1 := AT( CHR(27) + 'W1', CLINE2 ) // WE FOUND AN ESCAPE SEQUENCE FOR WIDE PRINT
|
|
IF POS1 > 0
|
|
CLINE_WORK := CLINE2 // REMAINDER OF DATA
|
|
ELSE
|
|
IF !EMPTY( CLINE2 )
|
|
OREPORT:SAY( 11, CLINE2, 1 )
|
|
ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
ELSE
|
|
oReport:Say( 1, cLine, 1 ) // NORMAL font
|
|
ENDIF
|
|
oReport:EndLine()
|
|
|
|
|
|
RETURN NIL
|
|
|
|
|
|
|
|
/*
|
|
OREPORT:SAY( 1, '111111', 1 )
|
|
OREPORT:SAY( 2, '22222', 3 )
|
|
OREPORT:SAY( 3, '33333' , 1 )
|
|
OREPORT:SAY( 4, '44444' , 3 )
|
|
OREPORT:SAY( 5, '55555' , 1 ) // DUPLICATE DEL
|
|
OREPORT:SAY( 6, '66666' , 3 )
|
|
OREPORT:SAY( 7, '77777', 3 )
|
|
OREPORT:SAY( 8, '88888' , 1 )
|
|
OREPORT:SAY( 9, '99999' , 3 )
|
|
OREPORT:SAY( 10, 'aaaaa' , 1 )
|
|
OREPORT:SAY( 11, 'BBBBB' , 3 ) // + 20% = ORDER NUMBER AND Page 1 of 1
|
|
OREPORT:SAY( 12, 'CCCCC' , 1 )
|
|
OREPORT:SAY( 13, 'DDDDD' , 3 )
|
|
OREPORT:SAY( 14, 'EEEEE' , 1 )
|
|
OREPORT:SAY( 15, 'FFFFF' , 3 )
|
|
*/
|
|
|
|
|
|
***********************************************************************
|
|
|
|
FUNCTION CGW_SETFONT( ODEVICE, WHCHORDER, OREPORT, COL_LEN, PASS_MYFONT, FACT_W, FACT_H )
|
|
|
|
LOCAL MYFONT, OFONT, OFONTB, OFONTW // REGULAR, BOLD, WIDE
|
|
LOCAL FORCEBOLD := .F., MALTFONT
|
|
|
|
//MYFONT := 'Courier New' //** don - 01/11/02 - reactivated 4/21/2021
|
|
MYFONT := 'Lucida Sans Typewriter'
|
|
|
|
// 3-31-2021
|
|
FACT_W := FACT_W / 100
|
|
FACT_H := FACT_H / 100
|
|
|
|
|
|
DEFINE FONT oFont NAME MYFONT
|
|
DEFINE FONT oFontB NAME MYFONT BOLD
|
|
DEFINE FONT oFontW NAME MYFONT BOLD
|
|
|
|
|
|
// adjust the bold font height/width slightly.
|
|
IF WHCHORDER = 'REPORT'
|
|
// myfont is hard coded above depending on the data's width
|
|
OFONT:NCLIPPRECISION := 2
|
|
OFONT:NPITCHFAMILY := 49
|
|
|
|
OFONT:NWIDTH := 4.00
|
|
OFONT:NHEIGHT:= 12
|
|
|
|
|
|
ELSEIF MYFONT = 'Courier New'
|
|
// tiny bit too wide
|
|
oFont:nWIDTH := 6.90
|
|
oFont:nHEIGHT:= 14.00
|
|
|
|
// OK TALL / TOO WIDE
|
|
oFontW:nWIDTH := 15.00
|
|
oFontW:nHEIGHT:= 18.00
|
|
|
|
ELSE
|
|
// this is the default - MyFont is 'Lucida Sans Typewriter'
|
|
// OK TALL / TOO WIDE
|
|
oFont:nWIDTH := 7.25
|
|
oFont:nHEIGHT:= 12.00
|
|
|
|
// test logic begin
|
|
// oFont:nWIDTH := 17.25
|
|
// oFont:nHEIGHT:= 22.00
|
|
// test logic end
|
|
|
|
|
|
ENDIF
|
|
|
|
// 03/31/2021
|
|
OFONT:NWIDTH *= FACT_W
|
|
OFONT:NHEIGHT *= FACT_H
|
|
|
|
|
|
RETURN { OFONT, OFONTB, OFONTW }
|
|
|
|
|
|
*********************************************** |