DBFORDER.MOD 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. IMPLEMENTATION MODULE DBFOrder;
  2. (*
  3. * ModBase
  4. * Release 3.0
  5. * (c) Copyright 1986 - 1991 PMI
  6. * P.O. Box 8402
  7. * Green Bay Wi 53308
  8. * All Rights Reserved
  9. * by Ed Ross
  10. *)
  11. FROM ModBase3 IMPORT InitDBF,OpenDBF,CloseDBF,ReadDBRec,GetField,
  12. DBFile,DefaultFixUp,NilDBF;
  13. FROM DBCopier IMPORT DBPack;
  14. FROM DBIndxes IMPORT InitIndex,OpenIndex,AddToUpdateList,CloseIndex,
  15. CurrentRec,FindPositionCh,BuildIndex,GoTop,GoBottom,
  16. NextRecord,PrevRecord,CurrentKeyCh,FindPositionN,
  17. CurrentKeyN,DBIndex,InitCompIndex,BuildCompIndex;
  18. FROM Drectory IMPORT DeleteFile;
  19. FROM StrEdit IMPORT CrunchBlanks,CAPstr;
  20. FROM StrConv IMPORT StrToReal;
  21. FROM NumTypes IMPORT Real8,REALToReal8;
  22. FROM DBStuff IMPORT MakeKey;
  23. FROM ScanUtils IMPORT Present,CaseSens;
  24. FROM DBFields IMPORT GetDateField,GetLogicalField,GetNumField,Replace,
  25. ReplaceD,ReplaceN;
  26. CONST
  27. Buffer = 0;
  28. Safty = TRUE;
  29. Exclusive = FALSE;
  30. AutoLock = TRUE;
  31. VAR IndexOpen,DBInit : BOOLEAN;
  32. PROCEDURE MoveOrderToDBF(Rec : OrderRec );
  33. (* This code will move the data from the record to *)
  34. (* the data base *)
  35. BEGIN
  36. WITH Rec DO
  37. Replace( OrderDBF, 1,INVNBR); (* Invoice number *)
  38. Replace( OrderDBF, 2,ITEMNBR ); (* Item number *)
  39. Replace( OrderDBF, 3,DESC ); (* Description of item *)
  40. Replace( OrderDBF, 4,NOTES1 ); (* Notes of items line 1 *)
  41. Replace( OrderDBF, 5,NOTES2 ); (* Notes for item line 2 *)
  42. Replace( OrderDBF, 6,NOTES3 ); (* Notes for item line 3 *)
  43. Replace( OrderDBF, 7,UNITS ); (* Units *)
  44. ReplaceN( OrderDBF, 8,QNTSOLD ); (* Quantity sold *)
  45. ReplaceN( OrderDBF, 9,QNTORDER ); (* Quant ordered (for pricing ) *)
  46. ReplaceN( OrderDBF, 10,REALToReal8(FLOAT(DSCLEVEL ))); (* Discount level applied *)
  47. ReplaceN( OrderDBF, 11,UNITPRC ); (* Item price *)
  48. ReplaceN( OrderDBF, 12,TOTAL ); (* Total price for line item *)
  49. Replace( OrderDBF, 13,MANPRICE ); (* over rider computed price *)
  50. END; (* end of with REC *)
  51. END MoveOrderToDBF;
  52. PROCEDURE MoveOrderFromDBF(VAR Rec : OrderRec );
  53. (* This code will move the data from the Database to *)
  54. (* the record *)
  55. VAR B : BOOLEAN;
  56. R : Real8;
  57. BEGIN
  58. WITH Rec DO
  59. GetField( OrderDBF, 1,INVNBR ); (* Invoice number *)
  60. GetField( OrderDBF, 2,ITEMNBR ); (* Item number *)
  61. GetField( OrderDBF, 3,DESC ); (* Description of item *)
  62. GetField( OrderDBF, 4,NOTES1 ); (* Notes of items line 1 *)
  63. GetField( OrderDBF, 5,NOTES2 ); (* Notes for item line 2 *)
  64. GetField( OrderDBF, 6,NOTES3 ); (* Notes for item line 3 *)
  65. GetField( OrderDBF, 7,UNITS ); (* Units *)
  66. GetNumField( OrderDBF, 8,QNTSOLD ); (* Quantity sold *)
  67. GetNumField( OrderDBF, 9,QNTORDER ); (* Quant ordered (for pricing ) *)
  68. GetNumField( OrderDBF, 10,R);
  69. DSCLEVEL := TRUNC(R); (* Discount level applied *)
  70. GetNumField( OrderDBF, 11,UNITPRC ); (* Item price *)
  71. GetNumField( OrderDBF, 12,TOTAL ); (* Total price for line item *)
  72. GetField( OrderDBF, 13,MANPRICE ); (* over rider computed price *)
  73. END; (* end of with REC^ *)
  74. END MoveOrderFromDBF;
  75. PROCEDURE MakeOrderKey(DBF : DBFile; Idx : DBIndex;
  76. VAR Key : ARRAY OF CHAR);
  77. VAR B : BOOLEAN;
  78. BEGIN
  79. GetField( DBF, 1,Key );
  80. MakeKey(Key);
  81. END MakeOrderKey;
  82. PROCEDURE OpenOrderDBF(WithIdx : BOOLEAN);
  83. VAR ER : CARDINAL;
  84. BEGIN
  85. IndexOpen := WithIdx;
  86. (* Open the DBF file *)
  87. IF NOT DBInit THEN
  88. DBInit:=TRUE;
  89. InitDBF("Order.DBF", OrderDBF,Buffer,Safty,Exclusive,AutoLock,DefaultFixUp );
  90. InitCompIndex( "Invnbr.Idx",InvnbrIdx,OrderDBF,MakeOrderKey,Buffer,
  91. Safty,FALSE,Exclusive);
  92. AddToUpdateList( OrderDBF, InvnbrIdx );
  93. END;
  94. IF NOT OpenDBF( OrderDBF)
  95. THEN END;
  96. IF WithIdx
  97. THEN
  98. (* open all indexes and append to dbfile *)
  99. IF NOT OpenIndex( InvnbrIdx )
  100. THEN
  101. ER := BuildCompIndex(InvnbrIdx,'C','Invnbr',12);
  102. END;
  103. ActOrderIdx := InvnbrIdx; (* make current index *)
  104. END; (* end with inx *)
  105. END OpenOrderDBF;
  106. PROCEDURE CloseOrderDBF (); (* close Data and index files *)
  107. BEGIN
  108. CloseDBF(OrderDBF); (* close dbf file *)
  109. IF IndexOpen
  110. THEN
  111. CloseIndex(InvnbrIdx ); (* close index file *)
  112. END;
  113. END CloseOrderDBF;
  114. PROCEDURE FindOrderByInvnbr( Key : ARRAY OF CHAR) : BOOLEAN;
  115. VAR Found : BOOLEAN;
  116. CKey : ARRAY[0..80] OF CHAR;
  117. BEGIN
  118. ActOrderIdx := InvnbrIdx ; (* make this index the active idx*)
  119. FindPositionCh( InvnbrIdx, Key, Found);
  120. CurrentKeyCh(InvnbrIdx,CKey);
  121. Found := Present(Key,CKey,CaseSens);
  122. IF Found
  123. THEN ReadDBRec( OrderDBF, CurrentRec( InvnbrIdx));
  124. END;
  125. RETURN Found;
  126. END FindOrderByInvnbr;
  127. PROCEDURE NextOrder () : BOOLEAN;
  128. VAR
  129. L : LONGINT; (* record number *)
  130. BEGIN
  131. IF NextRecord( ActOrderIdx,L)
  132. THEN ReadDBRec( OrderDBF,L );
  133. RETURN TRUE;
  134. ELSE RETURN FALSE;
  135. END;
  136. END NextOrder;
  137. PROCEDURE PrevOrder () : BOOLEAN;
  138. VAR
  139. L : LONGINT; (* record number *)
  140. BEGIN
  141. IF PrevRecord( ActOrderIdx,L)
  142. THEN ReadDBRec( OrderDBF,L );
  143. RETURN TRUE;
  144. ELSE RETURN FALSE;
  145. END;
  146. END PrevOrder;
  147. PROCEDURE FirstOrder ();
  148. VAR
  149. L : LONGINT; (* record number *)
  150. BEGIN
  151. GoTop(ActOrderIdx);
  152. ReadDBRec( OrderDBF,CurrentRec( ActOrderIdx));
  153. END FirstOrder;
  154. PROCEDURE LastOrder ();
  155. VAR
  156. L : LONGINT; (* record number *)
  157. BEGIN
  158. GoBottom(ActOrderIdx);
  159. ReadDBRec( OrderDBF,CurrentRec( ActOrderIdx));
  160. END LastOrder;
  161. PROCEDURE PackOrder();
  162. VAR
  163. EM : CARDINAL;
  164. BEGIN
  165. CloseOrderDBF();
  166. OpenOrderDBF(FALSE); (* no index *)
  167. DBPack(OrderDBF);
  168. CloseDBF(OrderDBF);
  169. EM := DeleteFile("Invnbr.Idx");
  170. OpenOrderDBF(TRUE); (* open & rebuild the index *)
  171. CloseOrderDBF();
  172. END PackOrder;
  173. BEGIN
  174. NilDBF(OrderDBF);
  175. IndexOpen := FALSE;
  176. DBInit:=FALSE;
  177. END DBFOrder.
  178.