{*******************************************************} { } { Responsive Software http://www.responsive.co.nz } { } { Copyright (c) 2003-2006 Responsive Software Limited } { } {*******************************************************} unit Graph; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, BaseFrameUnit, ExtCtrls, StdCtrls, ImgList, ComCtrls, BusinessObjects, TeeProcs, TeEngine, Chart, Series; type TIncomeStatementNodeType = (plnUndefined,plnHeading,plnGroup,plnAccount,plnSubtotal,plnTotal,plnRetainedEarnings); TGraphFrame = class(TBaseFrame) HeadingLabel: TLabel; HeadingShape: TShape; EmailButton: TButton; PrintButton: TButton; UseBeginPeriodCheckBox: TCheckBox; BeginPeriodDateDateTimePicker: TDateTimePicker; UseEndPeriodCheckBox: TCheckBox; EndPeriodDateDateTimePicker: TDateTimePicker; DisplayButton: TButton; Shape1: TShape; Shape2: TShape; Shape3: TShape; Label1: TLabel; Label2: TLabel; Label3: TLabel; Chart: TChart; Shape4: TShape; Label4: TLabel; procedure EmailButtonClick(Sender: TObject); procedure PrintButtonClick(Sender: TObject); procedure UseBeginPeriodCheckBoxClick(Sender: TObject); procedure UseEndPeriodCheckBoxClick(Sender: TObject); procedure BeginPeriodDateDateTimePickerChange(Sender: TObject); procedure EndPeriodDateDateTimePickerChange(Sender: TObject); procedure DisplayButtonClick(Sender: TObject); private { Private declarations } GraphDisplayed : boolean; CompanyId : int64; ShowProgress : boolean; procedure PrintReport (Email : boolean); public { Public declarations } procedure UpdateDisplay; procedure Setup; override; procedure SetPeriod (UseBeginPeriod : boolean; BeginPeriodDate : TDateTime; UseEndPeriod : boolean; EndPeriodDate : TDateTime); end; var GraphFrame: TGraphFrame; implementation uses DatabaseManager, Globals, Utilities, Main; {$R *.dfm} procedure TGraphFrame.SetPeriod (UseBeginPeriod : boolean; BeginPeriodDate : TDateTime; UseEndPeriod : boolean; EndPeriodDate : TDateTime); begin UseBeginPeriodCheckBox.Checked := UseBeginPeriod; BeginPeriodDateDateTimePicker.Date := BeginPeriodDate; BeginPeriodDateDateTimePicker.Enabled := UseBeginPeriodCheckBox.Checked; UseEndPeriodCheckBox.Checked := UseEndPeriod; EndPeriodDateDateTimePicker.Date := EndPeriodDate; EndPeriodDateDateTimePicker.Enabled := UseEndPeriodCheckBox.Checked; // update display UpdateDisplay; end; procedure TGraphFrame.Setup; begin // default period values to that set as the default period SetPeriod( WorkstationConfiguration.UseBeginPeriod, WorkstationConfiguration.BeginPeriodDate, WorkstationConfiguration.UseEndPeriod, WorkstationConfiguration.EndPeriodDate); // set initial values for chart Chart.Title.Visible := false; Chart.AxisVisible := false; Chart.View3D := false; Chart.Legend.Visible := false; Chart.Frame.Visible := false; Chart.BevelOuter := bvNone; Chart.AllowZoom := false; GraphDisplayed := false; CompanyId := 0; UpdateDisplay; end; procedure TGraphFrame.UpdateDisplay; begin // only update if the graph has been displayed if GraphDisplayed then begin // only update if the company is the same if WorkstationConfiguration.CompanyId = CompanyId then DisplayGraph( Chart, CompanyId, UseBeginPeriodCheckBox.Checked, Trunc(BeginPeriodDateDateTimePicker.Date), UseEndPeriodCheckBox.Checked, Trunc(EndPeriodDateDateTimePicker.Date), ShowProgress, false) // otherwise clear the graph else begin ClearGraph(Chart); GraphDisplayed := false; end; end; end; procedure TGraphFrame.PrintReport (Email : boolean); begin PrintGraph( WorkstationConfiguration.CompanyId, UseBeginPeriodCheckBox.Checked, Trunc(BeginPeriodDateDateTimePicker.Date), UseEndPeriodCheckBox.Checked, Trunc(EndPeriodDateDateTimePicker.Date), Email); end; {******************************************************************************} procedure TGraphFrame.DisplayButtonClick(Sender: TObject); begin // don't bother showing progress if graph already displayed as // data will already be loaded into cache and it will be a lot quicker if GraphDisplayed and (CompanyId = WorkstationConfiguration.CompanyId) then ShowProgress := false else ShowProgress := true; CompanyId := WorkstationConfiguration.CompanyId; GraphDisplayed := true; UpdateDisplay; ShowProgress := false; end; procedure TGraphFrame.EmailButtonClick(Sender: TObject); begin PrintReport(true); end; procedure TGraphFrame.PrintButtonClick(Sender: TObject); begin PrintReport(false); end; {******************************************************************************} procedure TGraphFrame.UseBeginPeriodCheckBoxClick(Sender: TObject); begin BeginPeriodDateDateTimePicker.Enabled := UseBeginPeriodCheckBox.Checked; UpdateDisplay; end; procedure TGraphFrame.UseEndPeriodCheckBoxClick(Sender: TObject); begin EndPeriodDateDateTimePicker.Enabled := UseEndPeriodCheckBox.Checked; UpdateDisplay; end; procedure TGraphFrame.BeginPeriodDateDateTimePickerChange( Sender: TObject); var BeginDate, EndDate : TDateTime; EndDateDateTimePicker : TDateTimePicker; begin EndDateDateTimePicker := EndPeriodDateDateTimePicker; BeginDate := Trunc(TDateTimePicker(Sender).Date); EndDate := EndDateDateTimePicker.Date; // adjust end date if necessary if EndDate < BeginDate then begin EndDate := BeginDate; EndDateDateTimePicker.Date := EndDate; end; UpdateDisplay; end; procedure TGraphFrame.EndPeriodDateDateTimePickerChange( Sender: TObject); var BeginDate, EndDate : TDateTime; BeginDateDateTimePicker : TDateTimePicker; begin BeginDateDateTimePicker := BeginPeriodDateDateTimePicker; BeginDate := BeginDateDateTimePicker.Date; EndDate := Trunc(TDateTimePicker(Sender).Date); // adjust begin date if necessary if EndDate < BeginDate then begin BeginDate := EndDate; BeginDateDateTimePicker.Date := BeginDate; end; UpdateDisplay; end; end.