home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 August / VPR9608A.BIN / del20try / install / data.z / EDORDERS.PAS < prev    next >
Pascal/Delphi Source File  |  1996-05-08  |  6KB  |  235 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, DBTables, 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.     MastData.Orders.Insert;
  95.     ShowModal;
  96.   finally
  97.     MastData.OrdersSource.OnStateChange := nil;
  98.   end;
  99. end;
  100.  
  101. procedure TEdOrderForm.Edit(OrderNo: Double);
  102. begin
  103.   MastData.OrdersSource.OnStateChange := OrdersSourceStateChange;
  104.   try
  105.     MastData.Orders.Open;
  106.     MastData.Orders.Locate('OrderNo', OrderNo, []);
  107.     ShowModal;
  108.   finally
  109.     MastData.OrdersSource.OnStateChange := nil;
  110.   end;
  111. end;
  112.  
  113. { ======================  Event Handlers  ====================== }
  114.  
  115. { These two methods enable the navigators to service both the Orders
  116.   and Items tables by switching the ActiveSource between them. }
  117.  
  118. procedure TEdOrderForm.ItemsGridEnter(Sender: TObject);
  119. begin
  120.   ActiveSource.Dataset := MastData.Items;
  121. end;
  122.  
  123. procedure TEdOrderForm.ItemsGridExit(Sender: TObject);
  124. begin
  125.   ActiveSource.Dataset := MastData.Orders;
  126. end;
  127.  
  128. { Update the mode indicator when the state of the "Active" datasource
  129.   (Orders or Items) changes }
  130.  
  131. procedure TEdOrderForm.ActiveSourceStateChange(Sender: TObject);
  132. begin
  133.   with ActiveSource do
  134.   begin
  135.     if Dataset <> nil then ModeIndicator.Caption :=
  136.       Format('[%S: %S]', [Dataset.Name, DatasetStates[State]]);
  137.     if State in [dsEdit, dsInsert] then
  138.     begin
  139.       HelpContext := HelpTopicEdit;
  140.       ModeIndicator.Font.Color := clRed;
  141.     end
  142.     else
  143.     begin
  144.       HelpContext := HelpTopicBrowse;
  145.       ModeIndicator.Font.Color := clBlue;
  146.     end;
  147.   end;
  148. end;
  149.  
  150. { Enable or disable buttons as needed when the state of the orders table changes}
  151.  
  152. procedure TEdOrderForm.OrdersSourceStateChange(Sender: TObject);
  153. begin
  154.   PostBtn.Enabled := MastData.Orders.State in dsEditModes;
  155.   CancelBtn.Enabled := PostBtn.Enabled;
  156.   CloseBtn.Enabled := MastData.Orders.State = dsBrowse;
  157. end;
  158.  
  159. { Browse a calendar to pick an invoice date }
  160.  
  161. procedure TEdOrderForm.PickDate(Sender: TObject);
  162. begin
  163.   BrDateForm.Date := MastData.OrdersSaleDate.Value;     { start with current date }
  164.   if BrDateForm.ShowModal = mrOk then
  165.   begin
  166.     MastData.Orders.Edit;
  167.     MastData.OrdersSaleDate.Value := BrDateForm.Date;
  168.     SaleDateEdit.SelectAll;
  169.   end;
  170. end;
  171.  
  172. { Ctrl+Enter in the SaleDate edit control brings up PickDate dialog }
  173.  
  174. procedure TEdOrderForm.SaleDateEditKeyPress(Sender: TObject; var Key: Char);
  175. begin
  176.   if Key = ^J then
  177.   begin
  178.     PickDate(Sender);
  179.     Key := #0;
  180.   end;
  181. end;
  182.  
  183. { Clicking on the PartNo button in the grid brings up PickPartNo dialog }
  184.  
  185. procedure TEdOrderForm.PickPartNo(Sender: TObject);
  186. begin
  187.   if ItemsGrid.SelectedField = MastData.ItemsPartNo then    { PartNo column only }
  188.   begin
  189.     if MastData.ItemsPartNo.Value <> 0 then
  190.       SearchDlg.PartNo := MastData.ItemsPartNo.Value;    { start with current PartNo }
  191.     if SearchDlg.ShowModalParts = mrOk then
  192.     begin
  193.       MastData.Items.Edit;
  194.       MastData.ItemsPartNo.Value := SearchDlg.PartNo;
  195.     end;
  196.   end;
  197. end;
  198.  
  199. { Begins a series of cascading Before and After post events }
  200.  
  201. procedure TEdOrderForm.PostBtnClick(Sender: TObject);
  202. begin
  203.   MastData.Orders.Post;
  204. end;
  205.  
  206. { Cancels insert or edit on the Orders table }
  207.  
  208. procedure TEdOrderForm.CancelBtnClick(Sender: TObject);
  209. begin
  210.   MastData.OrdersAfterCancel(MastData.Orders);
  211. end;
  212.  
  213. { Prints snapshot of the form. An invoice report is available via the Main window }
  214.  
  215. procedure TEdOrderForm.PrintBtnClick(Sender: TObject);
  216. begin
  217.   if Confirm('Print image of this form window?') then Print;
  218. end;
  219.  
  220. procedure TEdOrderForm.FormCloseQuery(Sender: TObject;
  221.   var CanClose: Boolean);
  222. var
  223.   MsgResult: Integer;
  224. begin
  225.   CanClose := MastData.DataSetApplyUpdates(MastData.Orders, ModalResult = mrOK);
  226. end;
  227.  
  228. procedure TEdOrderForm.SoldByComboKeyPress(Sender: TObject; var Key: Char);
  229. begin
  230.   if not (Key in [#13, #27]) then
  231.     Key := #0;
  232. end;
  233.  
  234. end.
  235.