| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- IMPLEMENTATION MODULE InvReports;
- (*
- * ModBase
- * Release 3.0
- * (c) Copyright 1986 - 1991 PMI
- * P.O. Box 8402
- * Green Bay Wi 53308
- * All Rights Reserved
- * by Ed Ross
- *)
- FROM DBFInvoice IMPORT InvoiceRec,MoveInvoiceFromDBF,
- OpenInvoiceDBF,CloseInvoiceDBF,InvoiceDBF;
- FROM Invoice IMPORT MakeInvoicePrintLine,FInvoice;
- FROM PosUtils IMPORT Equal;
- FROM PMIGlobals IMPORT Today,TodayDays,NormalTitle,PMIScreens,
- OpenReportDevice,CloseReportDevice;
- FROM Customer IMPORT GetCustName;
- FROM DBFCustomer IMPORT OpenCustomerDBF,CloseCustomerDBF;
- FROM DBUtils IMPORT GetDateRange,PrintFrame;
- FROM GenLists IMPORT GenList,ListInsert,DisposeList,
- GetElmt,GetElmtAdr,NewList,ListLength,SortList;
- 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 Length,CompareStr,Assign;
- FROM LowLevel IMPORT Fill;
- FROM NumTypes IMPORT Real8;
- 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;
- TYPE
- InvCust = RECORD
- Invoice : InvoiceRec;
- CustName : ARRAY[0..40] OF CHAR;
- END;
- VAR
- IncludeSet : SET OF CHAR;
- StartDate, EndDate : Date;
- PROCEDURE MakeInvoiceList(VAR InvList : GenList);
- VAR
- LI : LONGINT;
- InvRec : InvCust;
- D : CARDINAL;
- BEGIN
- D := DaysSince1900(StartDate); (* adjust to days so I get =>, <=*)
- CardToDate(D,StartDate);
- D := DaysSince1900(EndDate);
- INC(D);
- CardToDate(D,EndDate);
- NewList(InvList);
- OpenInvoiceDBF(FALSE); (* Dont need the index *)
- OpenCustomerDBF(TRUE);
- FOR LI := 1 TO NumberRecords(InvoiceDBF) DO
- ReadDBRec(InvoiceDBF,LI);
- MoveInvoiceFromDBF(InvRec.Invoice);
- CrunchBlanks(InvRec.Invoice.INVOICE);
- IF (InvRec.Invoice.INVPRNT IN IncludeSet) AND
- (CompareDates(InvRec.Invoice.INVDATE,StartDate) = DateGreater) AND
- (CompareDates(InvRec.Invoice.INVDATE,EndDate) = DateLess)
- THEN
- GetCustName(InvRec.Invoice.CUSTID,InvRec.CustName);
- ListInsert(InvRec,3,InvList,30000);
- END;
- END;
- CloseDBF(InvoiceDBF);
- CloseCustomerDBF();
- END MakeInvoiceList;
- PROCEDURE SortByCustName(Item1 : ADDRESS; Size1 : CARDINAL;
- Item2 : ADDRESS; Size2 : CARDINAL): INTEGER;
- (* sort by name here becase want an alpha sort rather than CIN sort*)
- VAR
- P1, P2 : POINTER TO InvCust;
- BEGIN
- P1 := Item1;
- P2 := Item2;
- IF NOT Equal(P1^.CustName,P2^.CustName)
- THEN
- RETURN CompareStr(P1^.CustName,P2^.CustName);
- ELSE
- RETURN CompareStr(P1^.Invoice.INVOICE,P2^.Invoice.INVOICE);
- END;
- END SortByCustName;
- PROCEDURE SortByInvoiceNbr(Item1 : ADDRESS; Size1 : CARDINAL;
- Item2 : ADDRESS; Size2 : CARDINAL): INTEGER;
- (* sort by name here becase want an alpha sort rather than CIN sort*)
- VAR
- P1, P2 : POINTER TO InvCust;
- BEGIN
- P1 := Item1;
- P2 := Item2;
- RETURN CompareStr(P1^.Invoice.INVOICE,P2^.Invoice.INVOICE);
- END SortByInvoiceNbr;
- PROCEDURE InvHistory();
- VAR
- J : CARDINAL;
- InvTotal : Real8;
- InvRec : InvCust;
- InvList : GenList;
- Code : CARDINAL;
- FieldRec : InputFieldRecord;
- DF : DisplayFrame;
- DF2 : DisplayFrame;
- B : BOOLEAN;
- Str : ARRAY[0..12] OF CHAR;
- Line : ARRAY[0..80] OF CHAR;
- NbrO,NbrP,NbrC : CARDINAL;
- InvTotP,InvTotO,InvTotC : Real8;
- InvNetP,InvNetO,InvNetC : Real8;
- Handle : CARDINAL;
- PROCEDURE DisplayTotals();
- BEGIN
- ShowDisplayFrame(DF,1,1,80,24);
- DF2^.startcol := 5;
- DF2^.endcol := 75;
- DF2^.startrow := 5;
- DF2^.endrow := 20;
- AddStrField(DF,2,2,
- ' Num Net Total',50);
- Fill(ADR(Line),SIZE(Line),' ');
- OverWrite(' Outstanding ',Line,3);
- CardinalToStr(NbrO,3,Str);
- OverWrite(Str,Line,13);
- RealToStr(InvNetO,2,8,Str);
- OverWrite(Str,Line,22);
- RealToStr(InvTotO,2,8,Str);
- OverWrite(Str,Line,34);
- AddStrField(DF2,2,4,Line,50);
- Fill(ADR(Line),SIZE(Line),' ');
- OverWrite(' Posted ',Line,3);
- CardinalToStr(NbrP,3,Str);
- OverWrite(Str,Line,13);
- RealToStr(InvNetP,2,8,Str);
- OverWrite(Str,Line,22);
- RealToStr(InvTotP,2,8,Str);
- OverWrite(Str,Line,32);
- AddStrField(DF2,2,5,Line,50);
- Fill(ADR(Line),SIZE(Line),' ');
- OverWrite(' Closed ',Line,3);
- CardinalToStr(NbrC,3,Str);
- OverWrite(Str,Line,13);
- RealToStr(InvNetC,2,8,Str);
- OverWrite(Str,Line,22);
- RealToStr(InvTotC,2,8,Str);
- OverWrite(Str,Line,32);
- AddStrField(DF2,2,6,Line,50);
- ShowDisplayFrame(DF2,0,0,0,0);
- Control(DF2);
- END DisplayTotals;
- BEGIN
- GetDateRange(StartDate,EndDate,PMIScreens);
- IncludeSet := IncludeSet / IncludeSet; (* clear the set *)
- INCL(IncludeSet,'P');
- INCL(IncludeSet,'O');
- INCL(IncludeSet,'C');
- MakeInvoiceList(InvList);
- NbrO := 0;
- NbrP := 0;
- NbrC := 0;
- InvTotP := 0.0;
- InvTotO := 0.0;
- InvTotC := 0.0;
- InvNetO := 0.0;
- InvNetP := 0.0;
- InvNetC := 0.0;
- InitDisplayFrame(DF,VWindows.CurrentWindow);
- InitDisplayFrame(DF2,VWindows.CurrentWindow);
- AddStrField(DF,2,2,
- 'Inv Nbr Customer Name Date Inv Total OutStd Stat',79);
- GetFieldRec(DF,1,FieldRec);
- FieldRec.typ := DispCode; (* headline = display code *)
- PutFieldRec(FieldRec,DF,1);
- DF^.headline := 2;
- FOR J := 1 TO ListLength(InvList) DO
- GetElmt(InvList,J,InvRec,Code);
- Fill(ADR(Line),80,' ');
- Line[77] := 0C;
- CASE InvRec.Invoice.INVPRNT OF
- 'O' :INC(NbrO);
- InvTotO := InvTotO + InvRec.Invoice.TOTALAMT;
- InvNetO := InvNetO + InvRec.Invoice.INVNET;
- |'P' :INC(NbrP);
- InvTotP := InvTotP + InvRec.Invoice.TOTALAMT;
- InvNetP := InvNetP + InvRec.Invoice.INVNET;
- |'C' :INC(NbrC);
- InvTotC := InvTotC + InvRec.Invoice.TOTALAMT;
- InvNetC := InvNetC + InvRec.Invoice.INVNET;
- END;
- OverWrite(InvRec.Invoice.INVOICE,Line,1);
- SetLength(InvRec.CustName,25);
- OverWrite(InvRec.CustName,Line,11);
- DateToStr(InvRec.Invoice.INVDATE,Str,B);
- OverWrite(Str,Line,40);
- RealToStr(InvRec.Invoice.TOTALAMT,2,9,Str);
- OverWrite(Str,Line,49);
- RealToStr(InvRec.Invoice.AMTOUT,2,9,Str);
- OverWrite(Str,Line,58);
- OverWrite(InvRec.Invoice.INVPRNT,Line,75);
- AddMenuItem(DF,2,J+2,Line,78,0,' ');
- END;
- DisposeList(InvList);
- (* DisplayTotals(); *)
- Control(DF);
- DisplayTotals();
- IF PromptYN(' Print Report ',DF)
- THEN
- Line := 'INVOICE HISTORY';
- NormalTitle(Line);
- Handle := OpenReportDevice ();
- PrintFrame(DF,Handle);
- Line := 'Invoice Totals ';
- NormalTitle(Line);
- PrintFrame(DF2,Handle);
- CloseReportDevice(Handle);
- END;
- CloseDisplayFrame(DF);
- CloseDisplayFrame(DF2);
- END InvHistory;
- PROCEDURE InvOutstanding();
- VAR
- J : CARDINAL;
- InvTotal : Real8;
- InvRec : InvCust;
- InvList : GenList;
- Code : CARDINAL;
- FieldRec : InputFieldRecord;
- DF : DisplayFrame;
- B : BOOLEAN;
- Str : ARRAY[0..12] OF CHAR;
- Line : ARRAY[0..80] OF CHAR;
- LastCust : ARRAY[0..40] OF CHAR;
- CustTotal: Real8;
- TotalOut : Real8;
- LineCnt : CARDINAL;
- Handle : CARDINAL;
- PROCEDURE MakeLine();
- BEGIN
- OverWrite(InvRec.Invoice.INVOICE,Line,30);
- DateToStr(InvRec.Invoice.INVDATE,Str,B);
- OverWrite(Str,Line,40);
- RealToStr(InvRec.Invoice.TOTALAMT,2,9,Str);
- OverWrite(Str,Line,49);
- RealToStr(InvRec.Invoice.AMTOUT,2,9,Str);
- OverWrite(Str,Line,58);
- OverWrite(InvRec.Invoice.INVPRNT,Line,75);
- END MakeLine;
- BEGIN
- GetDateRange(StartDate,EndDate,PMIScreens);
- IncludeSet := IncludeSet / IncludeSet; (* clear the set *)
- INCL(IncludeSet,'P');
- MakeInvoiceList(InvList);
- SortList(InvList,SortByCustName);
- InitDisplayFrame(DF,VWindows.CurrentWindow);
- AddStrField(DF,2,2,
- ' Customer Name Invoice Date Inv Total OutStd Stat',79);
- GetFieldRec(DF,1,FieldRec);
- FieldRec.typ := DispCode; (* headline = display code *)
- PutFieldRec(FieldRec,DF,1);
- DF^.headline := 2;
- LastCust := '';
- CustTotal := 0.0;
- TotalOut := 0.0;
- LineCnt := 2;
- FOR J := 1 TO ListLength(InvList) DO
- INC(LineCnt);
- GetElmt(InvList,J,InvRec,Code);
- SetLength(InvRec.CustName,25);
- Fill(ADR(Line),80,' ');
- Line[78] := 0C;
- IF LastCust[0] = 0C (* first time *)
- THEN
- Assign( InvRec.CustName,LastCust );
- OverWrite(InvRec.CustName,Line,1);
- END;
- TotalOut := TotalOut + InvRec.Invoice.AMTOUT;
- IF Equal(LastCust,InvRec.CustName)
- THEN
- CustTotal := CustTotal + InvRec.Invoice.AMTOUT;
- MakeLine();
- AddMenuItem(DF,2,LineCnt,Line,78,0,' ');
- ELSE
- OverWrite('===========',Line,58);
- AddMenuItem(DF,2,LineCnt,Line,78,0,' ');
- Fill(ADR(Line),80,' ');
- Line[78] := 0C;
- RealToStr(CustTotal,2,9,Str);
- OverWrite(Str,Line,58);
- AddMenuItem(DF,2,LineCnt+1,Line,78,0,' ');
- Fill(ADR(Line),80,' ');
- Line[78] := 0C;
- AddMenuItem(DF,2,LineCnt+2,Line,78,0,' '); (* add blank line *)
- Assign( InvRec.CustName,LastCust);
- SetLength(InvRec.CustName,25);
- OverWrite(InvRec.CustName,Line,1);
- CustTotal := InvRec.Invoice.AMTOUT;
- MakeLine();
- AddMenuItem(DF,2,LineCnt+3,Line,78,0,' ');
- INC(LineCnt,3);
- END;
-
- END;
- Fill(ADR(Line),80,' ');
- Line[78] := 0C;
- OverWrite('===========',Line,58);
- AddMenuItem(DF,2,LineCnt+1,Line,78,0,' ');
- Fill(ADR(Line),80,' ');
- Line[78] := 0C;
- RealToStr(CustTotal,2,9,Str);
- OverWrite(Str,Line,58);
- AddMenuItem(DF,2,LineCnt+2,Line,78,0,' ');
- OverWrite('===========',Line,58);
- AddMenuItem(DF,2,LineCnt+3,Line,78,0,' ');
- Fill(ADR(Line),80,' ');
- Line[78] := 0C;
- OverWrite(' Total outstanding ',Line,2);
- RealToStr(TotalOut,2,9,Str);
- OverWrite(Str,Line,58);
- AddMenuItem(DF,2,LineCnt+4,Line,78,0,' ');
- DisposeList(InvList);
- ShowDisplayFrame(DF,1,1,80,24);
- Control(DF);
- IF PromptYN(' Print Report ',DF)
- THEN
- Line := 'INVOICE HISTORY';
- NormalTitle(Line);
- Handle := OpenReportDevice();
- PrintFrame(DF,Handle);
- CloseReportDevice(Handle);
- END;
- CloseDisplayFrame(DF);
- END InvOutstanding;
- PROCEDURE InvOutByDate();
- VAR
- J : CARDINAL;
- InvTotal : Real8;
- InvRec : InvCust;
- InvList : GenList;
- Code : CARDINAL;
- FieldRec : InputFieldRecord;
- DF : DisplayFrame;
- B : BOOLEAN;
- Str : ARRAY[0..12] OF CHAR;
- Line : ARRAY[0..80] OF CHAR;
- Days : CARDINAL;
- Handle : CARDINAL;
- BEGIN
- GetDateRange(StartDate,EndDate,PMIScreens);
- IncludeSet := IncludeSet / IncludeSet; (* clear the set *)
- INCL(IncludeSet,'P');
- MakeInvoiceList(InvList);
- SortList(InvList,SortByInvoiceNbr);
- InitDisplayFrame(DF,VWindows.CurrentWindow);
- AddStrField(DF,2,2,
- 'Inv Nbr Customer Name Date Inv Total OutStd Late',79);
- GetFieldRec(DF,1,FieldRec);
- FieldRec.typ := DispCode; (* headline = display code *)
- PutFieldRec(FieldRec,DF,1);
- DF^.headline := 2;
- FOR J := 1 TO ListLength(InvList) DO
- GetElmt(InvList,J,InvRec,Code);
- Fill(ADR(Line),80,' ');
- Line[77] := 0C;
- OverWrite(InvRec.Invoice.INVOICE,Line,1);
- SetLength(InvRec.CustName,25);
- OverWrite(InvRec.CustName,Line,11);
- DateToStr(InvRec.Invoice.INVDATE,Str,B);
- OverWrite(Str,Line,40);
- RealToStr(InvRec.Invoice.TOTALAMT,2,9,Str);
- OverWrite(Str,Line,49);
- RealToStr(InvRec.Invoice.AMTOUT,2,9,Str);
- OverWrite(Str,Line,58);
- CardinalToStr(TodayDays -DaysSince1900(InvRec.Invoice.INVDATE),3,Str);
- OverWrite(Str,Line,72);
- AddMenuItem(DF,2,J+2,Line,78,0,' ');
- END;
- DisposeList(InvList);
- ShowDisplayFrame(DF,1,1,80,24);
- Control(DF);
- IF PromptYN(' Print Report ',DF)
- THEN
- Line := 'INVOICE HISTORY';
- NormalTitle(Line);
- Handle := OpenReportDevice();
- PrintFrame(DF,Handle);
- CloseReportDevice(Handle);
- END;
- CloseDisplayFrame(DF);
- END InvOutByDate;
- END InvReports.
|