| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- IMPLEMENTATION MODULE Payments;
- (*
- * ModBase
- * Release 3.0
- * (c) Copyright 1986 - 1991 PMI
- * P.O. Box 8402
- * Green Bay Wi 53308
- * All Rights Reserved
- * by Ed Ross
- *)
- FROM ModBase3 IMPORT UpdateDBFile,WriteDBRec,DeleteRecord,ReadDBRec,
- AppendBlank;
- FROM PMIGlobals IMPORT NormalTitle,OpenReportDevice,CloseReportDevice;
- FROM DateFunctions IMPORT Date,DaysSince1900,DateToStr;
- FROM ScrnUtl2 IMPORT CloseDisplayFrame;
- FROM Customer IMPORT GetCurrCustName;
- FROM DBStuff IMPORT FindAll,ReadAllRecs,ConditionType;
- FROM ScrnUtl1 IMPORT GetFieldRec,PutFieldRec,FieldNum,FieldListTotal;
- FROM FramePainter IMPORT ShowDisplayFrame;
- FROM DBUtils IMPORT PrintFrame;
- FROM NumTypes IMPORT Real8;
- FROM StrEdit IMPORT CrunchBlanks,OverWrite,Append;
- FROM M2Strings IMPORT CompareStr,Assign;
- FROM PosUtils IMPORT Equal;
- FROM StrConv IMPORT RealToStr;
- FROM SmartScreen IMPORT ClearScreen;
- FROM VStorage IMPORT DosAlloc;
- FROM VWindows IMPORT ClearPart, CurrentWindow, SetCursorHeight;
- FROM ScrnTypes IMPORT DisplayFrame,InputFieldRecord,InitDisplayFrame,
- AFrameName,DispCode;
- FROM InputManager IMPORT ControlFrame;
- FROM FrameManager IMPORT EraseFrame;
- FROM Prompts IMPORT Prompt,PromptStr,PromptYN;
- FROM SYSTEM IMPORT ADR,SIZE,ADDRESS;
- FROM ControlUtils IMPORT ControlSeparately, LoadFrameList,Control,
- AddStrField,AddMenuItem;
- FROM DspFiles IMPORT OpenDisplayFile,ReadDisplayFrame;
- FROM HandleIO IMPORT FileExists;
- FROM LowLevel IMPORT Fill;
- FROM GenLists IMPORT GenList, NewList,ListLength,SortList,
- GetElmt,GetElmtAdr,DisposeList,NilList;
- FROM DBFPayments IMPORT PaymentsDBF, OpenPaymentsDBF,CustidIdx,
- ClosePaymentsDBF,PaymentsRec,MovePaymentsToDBF,MovePaymentsFromDBF;
- PROCEDURE MakePayment(InvoiceNbr : ARRAY OF CHAR;
- Pmtdate : Date;
- PmtAmt : Real8;
- CheckNbr : ARRAY OF CHAR;
- CustID : ARRAY OF CHAR);
- VAR
- Payment :PaymentsRec;
- BEGIN
- IF PmtAmt < 0.01 (* don't add zero payments *)
- THEN RETURN;
- END;
- WITH Payment DO
- Assign( InvoiceNbr,INVOICE );
- PMTDATE := Pmtdate;
- PMTAMT := PmtAmt;
- Assign(CheckNbr,CHECKNB );
- Assign( CustID,CUSTID);
- END;
- AppendBlank(PaymentsDBF);
- MovePaymentsToDBF(Payment);
- WriteDBRec(PaymentsDBF);
- END MakePayment;
- PROCEDURE ReadARec(VAR AddressOfRec : ADDRESS; VAR SizeOfRec : CARDINAL);
- VAR
- P : POINTER TO PaymentsRec;
- BEGIN
- SizeOfRec := SIZE(P^);
- DosAlloc(P,SizeOfRec);
- MovePaymentsFromDBF(P^);
- AddressOfRec := P;
- END ReadARec;
- PROCEDURE SortByDate(P1 : ADDRESS; C1 :CARDINAL;
- P2 : ADDRESS; C2 : CARDINAL): INTEGER;
-
- (* sort by invoice then payment date within invoice *)
- VAR
- Pymt1,Pymt2 : POINTER TO PaymentsRec;
- Days1,Days2 : CARDINAL;
- BEGIN
- Pymt1 := P1;
- Pymt2 := P2;
- IF Equal(Pymt1^.INVOICE,Pymt2^.INVOICE)
- THEN
- Days1 := DaysSince1900(Pymt1^.PMTDATE);
- Days2 := DaysSince1900(Pymt2^.PMTDATE);
- IF Days1 < Days2
- THEN RETURN -1
- ELSIF
- Days1 > Days2
- THEN RETURN 1
- ELSE RETURN 0
- END;
- ELSE
- RETURN CompareStr(Pymt1^.INVOICE,Pymt2^.INVOICE);
- END;
- END SortByDate;
- PROCEDURE ShowPaymentHist(CustID : ARRAY OF CHAR);
- VAR Payment : POINTER TO PaymentsRec;
- Lst : GenList;
- Cnt : CARDINAL;
- Handle : CARDINAL;
- Size, Code : CARDINAL;
- DF : DisplayFrame;
- B : BOOLEAN;
- Str : ARRAY[0..10] OF CHAR;
- Title1 : ARRAY[0..80] OF CHAR;
- FieldRec : InputFieldRecord;
- Line : ARRAY[0..65] OF CHAR;
- CONST
- Title = ' Invoice Pymt Date Amount Check Number ';
- BEGIN
- OpenPaymentsDBF(TRUE);
- CrunchBlanks(CustID);
- NilList(Lst);
- FindAll(CustidIdx,CustID,EQ,Lst);
- ReadAllRecs(PaymentsDBF,ReadARec,Lst);
- ClosePaymentsDBF();
- IF ListLength(Lst) = 0 (* some tanks are outstanding *)
- THEN
- DisposeList(Lst);
- Prompt('No payment history');
- RETURN;
- END;
- SortList(Lst,SortByDate);
- (* 1 2 3 4
- 01234567890123456789012345678901234567890123456780
- Invoice Date Amount Check Number Date
- *)
- InitDisplayFrame(DF,CurrentWindow);
- AddStrField(DF,2,2,Title,55);
- GetFieldRec(DF,1,FieldRec);
- FieldRec.typ := DispCode; (* headline = display code *)
- PutFieldRec(FieldRec,DF,1);
- DF^.headline := 2;
- FOR Cnt := 1 TO ListLength(Lst) DO
- GetElmtAdr(Lst,Cnt,Payment,Size,Code);
- Fill(ADR(Line),SIZE(Line),' ');
- OverWrite(Payment^.INVOICE,Line,1);
- DateToStr(Payment^.PMTDATE,Str,B);
- OverWrite(Str,Line,12);
- RealToStr(Payment^.PMTAMT,2,8,Str);
- OverWrite(Str,Line,22);
- OverWrite(Payment^.CHECKNB,Line,33);
- AddMenuItem(DF,2,Cnt+2,Line,70,0,' ');
- END;
- ShowDisplayFrame(DF,1,13,80,24);
- Control(DF);
- IF PromptYN(' Print the report ',DF)
- THEN
- GetCurrCustName(Title1);
- Append(Title1,' - Payments ');
- NormalTitle(Title1);
- Handle := OpenReportDevice();
- PrintFrame(DF,Handle);
- CloseReportDevice(Handle);
- END;
- CloseDisplayFrame(DF);
- END ShowPaymentHist;
- PROCEDURE ManagePaymentFile();
- END ManagePaymentFile;
- END Payments.
|