home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 August / VPR9608A.BIN / del20try / install / data.z / GDSDATA.PAS < prev    next >
Pascal/Delphi Source File  |  1996-05-08  |  6KB  |  198 lines

  1. unit GdsData;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
  7.   Buttons, StdCtrls, ExtCtrls, Grids, DBGrids, DB, DBTables, Mask,
  8.   DBCtrls, GdsStd;
  9.  
  10. type
  11.   TStdDataForm = class(TGDSStdForm)
  12.     StdCtrlPanel: TPanel;
  13.     FilterOnRadioGroup: TRadioGroup;
  14.     Orders: TTable;
  15.     Cust: TTable;
  16.     OrdersSource: TDataSource;
  17.     OrdersOrderNo: TFloatField;
  18.     OrdersCustNo: TFloatField;
  19.     OrdersSaleDate: TDateTimeField;
  20.     OrdersShipDate: TDateTimeField;
  21.     OrdersEmpNo: TIntegerField;
  22.     OrdersShipToContact: TStringField;
  23.     OrdersShipToAddr1: TStringField;
  24.     OrdersShipToAddr2: TStringField;
  25.     OrdersShipToCity: TStringField;
  26.     OrdersShipToState: TStringField;
  27.     OrdersShipToZip: TStringField;
  28.     OrdersShipToCountry: TStringField;
  29.     OrdersShipToPhone: TStringField;
  30.     OrdersShipVIA: TStringField;
  31.     OrdersPO: TStringField;
  32.     OrdersTerms: TStringField;
  33.     OrdersPaymentMethod: TStringField;
  34.     OrdersItemsTotal: TCurrencyField;
  35.     OrdersTaxRate: TFloatField;
  36.     OrdersFreight: TCurrencyField;
  37.     OrdersCustName: TStringField;
  38.     OrdersAmountDue: TCurrencyField;
  39.     OrdersAmountPaid: TCurrencyField;
  40.     GroupBox1: TGroupBox;
  41.     FilterOnLabel: TLabel;
  42.     FilterCriteria: TEdit;
  43.     FilterCheckBox: TCheckBox;
  44.     NextBtn: TButton;
  45.     PriorBtn: TButton;
  46.     OrdersTaxAmount: TCurrencyField;
  47.     procedure FilterOnRadioGroupClick(Sender: TObject);
  48.     procedure FormCreate(Sender: TObject);
  49.     procedure OrdersFilterOnDate(DataSet: TDataSet; var Accept: Boolean);
  50.     procedure OrdersFilterOnAmount(DataSet: TDataSet; var Accept: Boolean);
  51.     procedure OrdersCalcFields(DataSet: TDataSet);
  52.     procedure FilterCheckBoxClick(Sender: TObject);
  53.     procedure PriorBtnClick(Sender: TObject);
  54.     procedure NextBtnClick(Sender: TObject);
  55.     procedure FilterCriteriaExit(Sender: TObject);
  56.     procedure FilterCriteriaKeyPress(Sender: TObject; var Key: Char);
  57.   protected
  58.     FLastAmount: Double;
  59.     FLastDate: TDateTime;
  60.     function CalcAmountDue: Double;
  61.     procedure ConvertFilterCriteria;
  62.   end;
  63.  
  64. var
  65.   StdDataForm: TStdDataForm;
  66.  
  67. implementation
  68.  
  69. {$R *.DFM}
  70.  
  71. procedure TStdDataForm.FilterOnRadioGroupClick(Sender: TObject);
  72. begin
  73.   inherited;
  74.   with FilterOnRadioGroup do
  75.   begin
  76.     FilterOnLabel.Caption := Format('Records where %S >=', [Items[ItemIndex]]);
  77.     case ItemIndex of
  78.       0: begin
  79.            Orders.OnFilterRecord := OrdersFilterOnDate;
  80.            FilterCriteria.Text := DateToStr(FLastDate);
  81.          end;
  82.       1: begin
  83.            Orders.OnFilterRecord := OrdersFilterOnAmount;
  84.            FilterCriteria.Text := FloatToStr(FLastAmount);
  85.          end;
  86.     end;
  87.     ActiveControl := FilterCriteria;
  88.   end;
  89.   if Orders.Filtered then Orders.Refresh;
  90. end;
  91.  
  92. procedure TStdDataForm.FormCreate(Sender: TObject);
  93. begin
  94.   inherited;
  95.   FLastDate := EncodeDate(1995, 1, 1);
  96.   FLastAmount := 1000;
  97.   FilterOnRadioGroup.ItemIndex := 0;
  98. end;
  99.  
  100. { Calculate the value of AmountDue. Used in the OnCalcFields
  101.   and OnFilterRecord event handlers. }
  102.  
  103. function TStdDataForm.CalcAmountDue: Double;
  104. begin
  105.   Result :=
  106.     OrdersItemsTotal.Value * (1.0 + OrdersTaxRate.Value / 100) +
  107.     OrdersFreight.Value - OrdersAmountPaid.Value;
  108. end;
  109.  
  110. { Convert the FilterCriteria text into a Date or Float.  This value
  111.   will be used in the OnFilterRecord callback instead of using the
  112.   FilterCriteria directly, so that the string does not need to be
  113.   converted each time the event is triggered. }
  114.  
  115. procedure TStdDataForm.ConvertFilterCriteria;
  116. begin
  117.   if FilterCriteria.Text <> '' then
  118.     case FilterOnRadioGroup.ItemIndex of
  119.       0: FLastDate := StrToDate(FilterCriteria.Text);
  120.       1: FLastAmount := StrToFloat(FilterCriteria.Text);
  121.     end;
  122.   if Orders.Filtered then Orders.Refresh;
  123. end;
  124.  
  125. { Try to convert the filter criteria whenever the edit control
  126.   looses focus, or the user presses enter }
  127.  
  128. procedure TStdDataForm.FilterCriteriaExit(Sender: TObject);
  129. begin
  130.   inherited;
  131.   ConvertFilterCriteria;
  132. end;
  133.  
  134. procedure TStdDataForm.FilterCriteriaKeyPress(Sender: TObject;
  135.   var Key: Char);
  136. begin
  137.   inherited;
  138.   if Key = #13 then
  139.   begin
  140.     ConvertFilterCriteria;
  141.     Key := #0
  142.   end;
  143. end;
  144.  
  145. { Calculate this order's total on the fly. Include in the dataset
  146.   if its amount is greater than or equal to the specified filter
  147.   criteria. Note that calculated and lookup fields are undefined
  148.   in an OnFilterRecord event handler. }
  149. procedure TStdDataForm.OrdersFilterOnAmount(DataSet: TDataSet;
  150.   var Accept: Boolean);
  151. begin
  152.   inherited;
  153.   Accept := CalcAmountDue >= FLastAmount;
  154. end;
  155.  
  156. { Include this order in the dataset if its date is greater
  157.   than or equal to the specified filter criteria. }
  158. procedure TStdDataForm.OrdersFilterOnDate(DataSet: TDataSet;
  159.   var Accept: Boolean);
  160. begin
  161.   inherited;
  162.   Accept := OrdersSaleDate.Value >= FLastDate;
  163. end;
  164.  
  165. procedure TStdDataForm.OrdersCalcFields(DataSet: TDataSet);
  166. begin
  167.   inherited;
  168.   OrdersTaxAmount.Value := OrdersItemsTotal.Value * (OrdersTaxRate.Value / 100);
  169.   OrdersAmountDue.Value := CalcAmountDue;
  170. end;
  171.  
  172. { Store contents of filter criteria from edit control }
  173. procedure TStdDataForm.FilterCheckBoxClick(Sender: TObject);
  174. begin
  175.   inherited;
  176.   ConvertFilterCriteria;
  177.   Orders.Filtered := FilterCheckBox.Checked;
  178.   NextBtn.Enabled := not FilterCheckBox.Checked;
  179.   PriorBtn.Enabled := not FilterCheckBox.Checked;
  180. end;
  181.  
  182. { Button handlers for new filter-oriented dataset navigation methods }
  183. procedure TStdDataForm.PriorBtnClick(Sender: TObject);
  184. begin
  185.   inherited;
  186.   ConvertFilterCriteria;
  187.   Orders.FindPrior;
  188. end;
  189.  
  190. procedure TStdDataForm.NextBtnClick(Sender: TObject);
  191. begin
  192.   inherited;
  193.   ConvertFilterCriteria;
  194.   Orders.FindNext;
  195. end;
  196.  
  197. end.
  198.