| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- IMPLEMENTATION MODULE CustReports;
- (*
- * ModBase
- * Release 3.0
- * (c) Copyright 1986 - 1991 PMI
- * P.O. Box 8402
- * Green Bay Wi 53308
- * All Rights Reserved
- * by Ed Ross
- *)
- FROM PosUtils IMPORT Equal;
- FROM PMIGlobals IMPORT Config,NormalTitle,OpenReportDevice,CloseReportDevice;
- FROM Customer IMPORT GetCustName,SetCustomerRec,GetCustAddr,
- AddressRec,AddressTypes;
- FROM DBFCustomer IMPORT OpenCustomerDBF,CloseCustomerDBF,
- CustomerRec,CustomerDBF,MoveCustomerFromDBF;
- FROM DBUtils IMPORT GetDateRange,PrintFrame,PrintTitle;
- FROM HandleIO IMPORT OpenFile,CloseHandle;
- FROM StringIO IMPORT WriteStr,WriteEol;
- FROM GenLists IMPORT GenList,ListInsert,DisposeList,
- GetElmt,GetElmtAdr,NewList,ListLength,SortList;
- FROM ListUtils IMPORT PrintList,TextFileToList;
- FROM Invoice IMPORT MakeInvoicePrintLine,GetOutstanding,InvoiceDaysLate;
- FROM DateFunctions IMPORT Comparison,CompareDates,Date,DateToStr,
- CardToDate,DaysSince1900;
- FROM StrConv IMPORT RealToStr,CardinalToStr;
- FROM StrEdit IMPORT CrunchBlanks,DeleteRightJustified,Append,
- CAPstr,OverWrite,RightJustify,Center,SetLength;
- FROM ModBase3 IMPORT ReadDBRec,CloseDBF,NumberRecords;
- FROM M2Strings IMPORT Concat,Length,CompareStr;
- FROM LowLevel IMPORT Fill;
- FROM NumTypes IMPORT Real8;
- FROM Numbers IMPORT Max;
- IMPORT VWindows;
- FROM ScrnUtl2 IMPORT CloseDisplayFrame;
- FROM ScrnUtl1 IMPORT GetFieldRec,PutFieldRec,FieldNum,FieldListTotal;
- FROM ScrnTypes IMPORT DisplayFrame,InitDisplayFrame,AFrameName,
- DispCode,ContinueInput,CancelInput,SubmitInput,InputFieldRecord;
- FROM FramePainter IMPORT ShowDisplayFrame,RedrawField;
- FROM ControlUtils IMPORT Control,AddStrField,AddMenuItem;
- FROM Prompts IMPORT Prompt,PromptStr,PromptYN;
- FROM ScrnTypes IMPORT AFrameName, InitDisplayFrame,DisplayFile;
- FROM SYSTEM IMPORT ADDRESS,ADR,SIZE;
- FROM VStorage IMPORT DosAlloc;
- VAR
- MinOut : Real8;
- PROCEDURE ReadCustFile(VAR TheList : GenList);
- VAR
- LI : LONGINT;
- Cust : CustomerRec;
- BEGIN
- OpenCustomerDBF(FALSE);
- NewList(TheList);
- FOR LI := 1 TO NumberRecords(CustomerDBF) DO
- ReadDBRec(CustomerDBF,LI);
- MoveCustomerFromDBF(Cust);
- IF Cust.YTDPURCH >= MinOut
- THEN ListInsert(Cust,1,TheList,1);
- END;
- END;
- END ReadCustFile;
- PROCEDURE SortByZipCode(C1 : ADDRESS; S1 : CARDINAL;
- C2 : ADDRESS; S2 : CARDINAL): INTEGER;
- VAR
- P1,P2 :POINTER TO CustomerRec;
- BEGIN
- P1 := C1;
- P2 := C2;
- RETURN CompareStr(P1^.BILLTOZP, P2^.BILLTOZP);
- END SortByZipCode;
- PROCEDURE SortByValue(C1 : ADDRESS; S1 : CARDINAL;
- C2 : ADDRESS; S2 : CARDINAL): INTEGER;
- VAR
- P1 : POINTER TO CustomerRec;
- P2 : POINTER TO CustomerRec;
-
- BEGIN
- P1 := C1;
- P2 := C2;
- IF P1^.YTDPURCH < P2^.YTDPURCH
- THEN RETURN -1;
- ELSIF P1^.YTDPURCH > P2^.YTDPURCH
- THEN RETURN 1;
- ELSE RETURN 0;
- END;
- END SortByValue;
- PROCEDURE CustMailLabels();
- CONST
- FormFeed = 12C;
- VAR
- CustList : GenList;
- J,K : CARDINAL;
- Cust : CustomerRec;
- Code : CARDINAL;
- CustAddr : AddressRec;
- Handle : CARDINAL;
- BEGIN
- MinOut := 0.0; (* get everyone *)
- ReadCustFile(CustList);
- SortList(CustList,SortByZipCode);
- Handle := OpenReportDevice();
- FOR J := 1 TO ListLength(CustList) DO
- GetElmt(CustList,J,Cust,Code);
- SetCustomerRec(Cust);
- GetCustAddr(CustAddr,Billing);
- FOR K := 0 TO 3 DO
- WriteEol(Handle,CustAddr.Line[K]);
- END; (* end for k *)
- WriteEol(Handle,'');
- WriteEol(Handle,'');
- END;
- CloseReportDevice(Handle);
- DisposeList(CustList);
- END CustMailLabels;
- PROCEDURE CustValue();
- VAR
- CustList : GenList;
- J : CARDINAL;
- Cust : CustomerRec;
- Code : CARDINAL;
- CustAddr : AddressRec;
- Handle : CARDINAL;
- Str : ARRAY[0..10]OF CHAR;
- FieldRec : InputFieldRecord;
- DF : DisplayFrame;
- Line : ARRAY[0..80] OF CHAR;
- BEGIN
- MinOut := 1.0; (* get everyone that has purchased anything*)
- ReadCustFile(CustList);
- SortList(CustList,SortByValue);
- InitDisplayFrame(DF,VWindows.CurrentWindow);
- AddStrField(DF,2,2,
- ' Customer Name Sales Rep YTD Purchase',67);
- GetFieldRec(DF,1,FieldRec);
- FieldRec.typ := DispCode; (* headline = display code *)
- PutFieldRec(FieldRec,DF,1);
- DF^.headline := 2;
- FOR J := 1 TO ListLength(CustList) DO
- GetElmt(CustList,J,Cust,Code);
- Fill(ADR(Line),SIZE(Line),' ');
- Line[77] := 0C;
- OverWrite(Cust.NAME,Line,1);
- OverWrite(Cust.SALESREP,Line,45);
- RealToStr(Cust.YTDPURCH,2,8,Str);
- OverWrite(Str,Line,60);
- AddMenuItem(DF,2,J+2,Line,78,0,' ');
- END;
- DisposeList(CustList);
- ShowDisplayFrame(DF,1,1,80,24);
- Control(DF);
- IF PromptYN(' Print Report ',DF)
- THEN
- Line := 'Customer Sorted by YTD Purchases';
- NormalTitle(Line);
- Handle := OpenReportDevice();
- PrintFrame(DF,Handle);
- CloseReportDevice(Handle);
- END;
- CloseDisplayFrame(DF);
- DisposeList(CustList);
- END CustValue;
- PROCEDURE CustLateLetters();
- VAR
- L10Pre,
- L10Suf,
- L30Pre,
- L30Suf,
- L60Pre,
- L60Suf : GenList;
- LI : LONGINT;
- DaysLate : CARDINAL;
- PrtStr : ARRAY[0..80] OF CHAR;
- InvList : GenList;
- J : CARDINAL;
- InvAddr : ADDRESS;
- Code,Size : CARDINAL;
- PtrHand : CARDINAL;
- EM : CARDINAL;
- Cust : CustomerRec;
- B : BOOLEAN;
- PROCEDURE PrintLetter(Prefix,Suffix ,Invoice : GenList);
- CONST
- (* FormLength : ARRAY OF CHAR = [027c,'C',66c]; *)
- FormFeed = 012C;
- VAR
- J : CARDINAL;
- Addr :AddressRec;
- Line : ARRAY [0..80] OF CHAR;
- FormLength : ARRAY[0..3] OF CHAR;
- BEGIN
- Concat(027C,'C',FormLength);
- Append(FormLength,66C);
- WriteStr( PtrHand,FormLength);
- Line := '';
- NormalTitle(Line);
- FOR J := 0 TO 6 DO
- WriteEol(PtrHand,PrintTitle[J]);
- END;
- SetCustomerRec(Cust);
- GetCustAddr(Addr,Billing);
- FOR J := 0 TO 3 DO
- WriteEol(PtrHand,'');
- END;
- FOR J := 0 TO 3 DO
- WriteEol(PtrHand,Addr.Line[J]);
- WriteStr(PtrHand,' ');
- END;
- PrintList(PtrHand,Prefix,4,'');
- FOR J := 1 TO ListLength(InvList) DO
- GetElmtAdr(InvList,J,InvAddr,Code,Size);
- MakeInvoicePrintLine(InvAddr,Line);
- WriteEol(PtrHand,Line);
- END;
- PrintList(PtrHand,Suffix,4,'');
- WriteEol(PtrHand,FormFeed);
- END PrintLetter;
- BEGIN
- EM := OpenFile(PtrHand,Config.LabelPrt);
- NewList(L10Pre);
- NewList(L10Suf);
- NewList(L30Pre);
- NewList(L30Suf);
- NewList(L60Pre);
- NewList(L60Suf);
- PrtStr := 'l10pre.txt';
- J := TextFileToList(PrtStr,L10Pre);
- PrtStr := 'l30pre.txt';
- J := TextFileToList(PrtStr,L30Pre);
- PrtStr := 'l60pre.txt';
- J := TextFileToList(PrtStr,L60Pre);
- PrtStr := 'l10Suf.txt';
- J := TextFileToList(PrtStr,L10Suf);
- PrtStr := 'l30Suf.txt';
- J := TextFileToList(PrtStr,L10Suf);
- PrtStr := 'l60Suf.txt';
- J := TextFileToList(PrtStr,L10Suf);
- OpenCustomerDBF(FALSE);
- FOR LI := 1 TO NumberRecords(CustomerDBF) DO
- ReadDBRec(CustomerDBF,LI);
- MoveCustomerFromDBF(Cust);
- GetOutstanding(Cust.CIN,InvList);
- DaysLate := 0;
- FOR J := 1 TO ListLength(InvList) DO
- GetElmtAdr(InvList,J,InvAddr,Code,Size);
- DaysLate := Max(DaysLate,InvoiceDaysLate(InvAddr));
- END;
- IF DaysLate >= 60
- THEN PrintLetter(L60Pre,L60Suf,InvList);
- ELSIF DaysLate >= 30
- THEN PrintLetter(L30Pre,L30Suf,InvList);
- ELSIF DaysLate >= 10
- THEN PrintLetter(L10Pre,L10Suf,InvList);
- END;
- DisposeList(InvList);
- END;
- DisposeList(L10Pre);
- DisposeList(L30Pre);
- DisposeList(L60Pre);
- DisposeList(L10Suf);
- DisposeList(L30Suf);
- DisposeList(L60Suf);
- EM := CloseHandle(PtrHand);
- END CustLateLetters;
- END CustReports.
|