home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / Runimage / Delphi50 / Demos / Db / IbMastApp / EDORDERS.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-08-11  |  6.3 KB  |  234 lines

  1. unit EDOrders;
  2.  
  3. { See the comments in MAIN.PAS for information about this project }
  4.  
  5. interface
  6.  
  7. uses
  8.   SysUtils, Windows, Messages, Classes, Graphics, Controls,
  9.   Dialogs, Forms, StdCtrls, DBGrids, DBCtrls, DB,
  10.   Buttons, Grids, DBLookup, ExtCtrls, Mask;
  11.  
  12. type
  13.   TEdOrderForm = class(TForm)
  14.     HeaderPanel: TPanel;
  15.     ShipToAdd1Edit: TDBEdit;
  16.     ShipToAdd2Edit: TDBEdit;
  17.     CustAdd1Edit: TDBEdit;
  18.     CustAdd2Edit: TDBEdit;
  19.     ShipToCompanyEdit: TDBEdit;
  20.     CustCityEdit: TDBEdit;
  21.     CustStateEdit: TDBEdit;
  22.     CustZipEdit: TDBEdit;
  23.     ShipToCityEdit: TDBEdit;
  24.     ShipToStateEdit: TDBEdit;
  25.     ShipToZipEdit: TDBEdit;
  26.     ModeIndicator: TLabel;
  27.     POEdit: TDBEdit;
  28.     TermsCombo: TDBComboBox;
  29.     PaymentCombo: TDBComboBox;
  30.     ShipViaCombo: TDBComboBox;
  31.     Speedbar: TPanel;
  32.     DBNavBtns: TDBNavigator;
  33.     SaleDateEdit: TDBEdit;
  34.     DBEditBtns: TDBNavigator;
  35.     ActiveSource: TDataSource;
  36.     ItemsGrid: TDBGrid;
  37.     AmountPaidEdit: TDBEdit;
  38.     TotalEdit: TDBEdit;
  39.     TaxTotalEdit: TDBEdit;
  40.     FreightEdit: TDBEdit;
  41.     AmountDueEdit: TDBEdit;
  42.     TaxRateEdit: TDBEdit;
  43.     CloseBtn: TButton;
  44.     CancelBtn: TButton;
  45.     PostBtn: TButton;
  46.     PopupCalBtn: TSpeedButton;
  47.     Image1: TImage;
  48.     PrintBtn: TSpeedButton;
  49.     SoldByCombo: TDBLookupComboBox;
  50.     Bevel1: TBevel;
  51.     CompanyCombo: TDBLookupComboBox;
  52.     DBText1: TDBText;
  53.     CustNoEdit: TDBEdit;
  54.     procedure ItemsGridEnter(Sender: TObject);
  55.     procedure ActiveSourceStateChange(Sender: TObject);
  56.     procedure ItemsGridExit(Sender: TObject);
  57.     procedure CancelBtnClick(Sender: TObject);
  58.     procedure PostBtnClick(Sender: TObject);
  59.     procedure PickPartNo(Sender: TObject);
  60.     procedure PickDate(Sender: TObject);
  61.     procedure PrintBtnClick(Sender: TObject);
  62.     procedure SaleDateEditKeyPress(Sender: TObject; var Key: Char);
  63.     procedure OrdersSourceStateChange(Sender: TObject);
  64.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  65.     procedure SoldByComboKeyPress(Sender: TObject; var Key: Char);
  66.   public
  67.     procedure Enter;
  68.     procedure Edit(OrderNo: Double);
  69.   end;
  70.  
  71. var
  72.   EdOrderForm: TEdOrderForm;
  73.  
  74. implementation
  75.  
  76. uses DataMod, SrchDlg, Pickdate;
  77.  
  78. {$R *.DFM}
  79.  
  80. const
  81.   DatasetStates: array[TDataSetState] of string =
  82.     ('Not active', 'Browsing', 'Editing', 'Inserting', '', '', '', '', '', '', '', '','');
  83.   HelpTopicEdit = 2;
  84.   HelpTopicBrowse = 3;
  85.  
  86.  
  87. { ======================= Public Methods ======================= }
  88.  
  89. procedure TEdOrderForm.Enter;
  90. begin
  91.   MastData.OrdersSource.OnStateChange := OrdersSourceStateChange;
  92.   try
  93.     MastData.Orders.Open;
  94.     ShowModal;
  95.   finally
  96.     MastData.OrdersSource.OnStateChange := nil;
  97.   end;
  98. end;
  99.  
  100. procedure TEdOrderForm.Edit(OrderNo: Double);
  101. begin
  102.   MastData.OrdersSource.OnStateChange := OrdersSourceStateChange;
  103.   try
  104.     MastData.Orders.Open;
  105.     MastData.Orders.Locate('OrderNo', OrderNo, []);
  106.     ShowModal;
  107.   finally
  108.     MastData.OrdersSource.OnStateChange := nil;
  109.   end;
  110. end;
  111.  
  112. { ======================  Event Handlers  ====================== }
  113.  
  114. { These two methods enable the navigators to service both the Orders
  115.   and Items tables by switching the ActiveSource between them. }
  116.  
  117. procedure TEdOrderForm.ItemsGridEnter(Sender: TObject);
  118. begin
  119.   ActiveSource.Dataset := MastData.Items;
  120. end;
  121.  
  122. procedure TEdOrderForm.ItemsGridExit(Sender: TObject);
  123. begin
  124.   ActiveSource.Dataset := MastData.Orders;
  125. end;
  126.  
  127. { Update the mode indicator when the state of the "Active" datasource
  128.   (Orders or Items) changes }
  129.  
  130. procedure TEdOrderForm.ActiveSourceStateChange(Sender: TObject);
  131. begin
  132.   with ActiveSource do
  133.   begin
  134.     if Dataset <> nil then ModeIndicator.Caption :=
  135.       Format('[%S: %S]', [Dataset.Name, DatasetStates[State]]);
  136.     if State in [dsEdit, dsInsert] then
  137.     begin
  138.       HelpContext := HelpTopicEdit;
  139.       ModeIndicator.Font.Color := clRed;
  140.     end
  141.     else
  142.     begin
  143.       HelpContext := HelpTopicBrowse;
  144.       ModeIndicator.Font.Color := clBlue;
  145.     end;
  146.   end;
  147. end;
  148.  
  149. { Enable or disable buttons as needed when the state of the orders table changes}
  150.  
  151. procedure TEdOrderForm.OrdersSourceStateChange(Sender: TObject);
  152. begin
  153.   PostBtn.Enabled := MastData.Orders.State in dsEditModes;
  154.   CancelBtn.Enabled := PostBtn.Enabled;
  155.   CloseBtn.Enabled := MastData.Orders.State = dsBrowse;
  156. end;
  157.  
  158. { Browse a calendar to pick an invoice date }
  159.  
  160. procedure TEdOrderForm.PickDate(Sender: TObject);
  161. begin
  162.   BrDateForm.Date := MastData.OrdersSaleDate.Value;     { start with current date }
  163.   if BrDateForm.ShowModal = mrOk then
  164.   begin
  165.     MastData.Orders.Edit;
  166.     MastData.OrdersSaleDate.Value := BrDateForm.Date;
  167.     SaleDateEdit.SelectAll;
  168.   end;
  169. end;
  170.  
  171. { Ctrl+Enter in the SaleDate edit control brings up PickDate dialog }
  172.  
  173. procedure TEdOrderForm.SaleDateEditKeyPress(Sender: TObject; var Key: Char);
  174. begin
  175.   if Key = ^J then
  176.   begin
  177.     PickDate(Sender);
  178.     Key := #0;
  179.   end;
  180. end;
  181.  
  182. { Clicking on the PartNo button in the grid brings up PickPartNo dialog }
  183.  
  184. procedure TEdOrderForm.PickPartNo(Sender: TObject);
  185. begin
  186.   if ItemsGrid.SelectedField = MastData.ItemsPartNo then    { PartNo column only }
  187.   begin
  188.     if MastData.ItemsPartNo.Value <> 0 then
  189.       SearchDlg.PartNo := MastData.ItemsPartNo.Value;    { start with current PartNo }
  190.     if SearchDlg.ShowModalParts = mrOk then
  191.     begin
  192.       MastData.Items.Edit;
  193.       MastData.ItemsPartNo.Value := SearchDlg.PartNo;
  194.     end;
  195.   end;
  196. end;
  197.  
  198. { Begins a series of cascading Before and After post events }
  199.  
  200. procedure TEdOrderForm.PostBtnClick(Sender: TObject);
  201. begin
  202.   MastData.Orders.Post;
  203. end;
  204.  
  205. { Cancels insert or edit on the Orders table }
  206.  
  207. procedure TEdOrderForm.CancelBtnClick(Sender: TObject);
  208. begin
  209.   MastData.OrdersAfterCancel(MastData.Orders);
  210. end;
  211.  
  212. { Prints snapshot of the form. An invoice report is available via the Main window }
  213.  
  214. procedure TEdOrderForm.PrintBtnClick(Sender: TObject);
  215. begin
  216.   if Confirm('Print image of this form window?') then Print;
  217. end;
  218.  
  219. procedure TEdOrderForm.FormCloseQuery(Sender: TObject;
  220.   var CanClose: Boolean);
  221. begin
  222.   CanClose := MastData.DataSetApplyUpdates(MastData.Orders, ModalResult = mrOK);
  223.   if CanClose then
  224.     MastData.Transaction.CommitRetaining;
  225. end;
  226.  
  227. procedure TEdOrderForm.SoldByComboKeyPress(Sender: TObject; var Key: Char);
  228. begin
  229.   if not (Key in [#13, #27]) then
  230.     Key := #0;
  231. end;
  232.  
  233. end.
  234.