Ga naar de hoofdnavigatie Ga naar de hoofdinhoud Ga naar de voettekst van de pagina
pascal
 1unit BudgetForm;
 2
 3interface
 4
 5uses
 6  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls,
 7  Vcl.Forms, Vcl.Dialogs, DataModule, Data.DB, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls, Vcl.GraphUtil,
 8  FlatDesignColorsFull, TL.Components;
 9
10type
11  TfrmBudget = class(TLForm)
12    Panel1: TPanel;
13    LDBGrid1: TLDBGrid;
14    Panel2: TPanel;
15    Button1: TButton;
16    Panel3: TPanel;
17    LDBGrid2: TLDBGrid;
18    Panel4: TPanel;
19    LDBGrid3: TLDBGrid;
20    procedure Button1Click(Sender: TObject);
21    procedure LDBGrid3KeyDown(
22      Sender: TObject;
23      var Key: Word;
24      Shift: TShiftState);
25    procedure LDBGrid3DrawColumnCell(
26      Sender: TObject;
27      const Rect: TRect;
28      DataCol: Integer;
29      Column: TColumn;
30      State: TGridDrawState);
31    procedure LDBGrid2DrawColumnCell(
32      Sender: TObject;
33      const Rect: TRect;
34      DataCol: Integer;
35      Column: TColumn;
36      State: TGridDrawState);
37  private
38    { Private declarations }
39    procedure QueryInsert;
40  public
41    { Public declarations }
42    procedure InitGrids;
43  end;
44
45var
46  frmBudget: TfrmBudget;
47
48implementation
49
50{$R *.dfm}
51
52uses
53  BudgetEditForm;
54
55procedure TfrmBudget.InitGrids;
56begin
57  Self.LDBGrid1.SetColumnAttr;
58  Self.LDBGrid2.SetColumnAttr;
59  Self.LDBGrid3.SetColumnAttr;
60  Self.LDBGrid2.Columns[0].Width:= Self.LDBGrid3.Columns[0].Width + Self.LDBGrid3.Columns[1].Width;
61end;
62
63procedure TfrmBudget.QueryInsert;
64var
65  iAffectedRows: Integer;
66  JaarID: Integer;
67  { TODO 1 -oTL -cFeature :
68    Als er Subcategorieën worden toegevoegd met eventueel nieuwe Categorieën,
69    dan automatisch de budgetten aanvullen met deze records.
70    SET @Subcategorie = 124;
71
72    INSERT IGNORE INTO Budget (Budget.JaarID, Budget.CategorieID, Budget.SubcategorieID)
73    SELECT BudgetJaar.ID, Categorie.ID, Subcategorie.ID
74    FROM
75    Categorie
76    JOIN Subcategorie ON Categorie.ID = Subcategorie.CategorieID
77    JOIN BudgetJaar
78    WHERE
79    Subcategorie.ID = @Subcategorie;
80  }
81begin
82  dm.CommandAppendBudgetJaar.CommandText:=
83    'INSERT IGNORE INTO Budget (Budget.JaarID, Budget.CategorieID, Budget.SubcategorieID) ' +
84    'SELECT :Jaar, Categorie.ID, Subcategorie.ID ' + 'FROM ' + '  Categorie ' +
85    '  JOIN Subcategorie ON Categorie.ID = Subcategorie.CategorieID;';
86  JaarID:= dm.DataSetBudgetJaar.FieldByName('ID').Value;
87  dm.CommandAppendBudgetJaar.Execute(
88    iAffectedRows,
89    VarArrayOf([JaarID]));
90end;
91
92procedure TfrmBudget.Button1Click(Sender: TObject);
93var
94  j: Integer;
95begin
96  try
97    dm.DataSetBudgetJaar.Last;
98    j:= dm.DataSetBudgetJaar.FieldByName('Jaar').AsInteger;
99    if j <> 0 then
100      inc(j)
101    else
102      j:= CurrentYear;
103
104    { TODO 1 -oTL -cFeature :
105      Init procedure toevoegen
106      Query maken om alle jaren in het mutatie bestand te vinden
107      Als er nog geen Budget record voor dat jaar is er een aanmaken
108      SQL 'SELECT DISTINCT YEAR(Datum) AS Jaar FROM Mutaties ORDER BY Jaar ASC;' }
109
110(*    for j:= 2016 to 2024 do
111      begin
112*)
113        dm.DataSetBudgetJaar.Append;
114        dm.DataSetBudgetJaar.FieldByName('Jaar').AsInteger:= j;
115        dm.DataSetBudgetJaar.Post;
116        QueryInsert;
117(*
118      end;
119*)
120    dm.DataSetBudget.Active:= False;
121    dm.DataSetBudget.Active:= True;
122    dm.DataSetBudgetTotaal.Active:= False;
123    dm.DataSetBudgetTotaal.Active:= True;
124    dm.DataSetBudgetEdit.Active:= False;
125    dm.DataSetBudgetEdit.Active:= True;
126
127    Self.LDBGrid2.Refresh;
128    InitGrids;
129  except
130    dm.DataSetBudgetJaar.CancelUpdates;
131  end;
132end;
133
134procedure TfrmBudget.LDBGrid2DrawColumnCell(
135  Sender: TObject;
136  const Rect: TRect;
137  DataCol: Integer;
138  Column: TColumn;
139  State: TGridDrawState);
140var
141  Field: TField;
142  Grid: TLDBGrid;
143  DataSet: TDataSet;
144  R: TRect;
145begin
146  if Sender is TLDBGrid then
147    begin
148      // Create some local variables to write more readable code
149      Grid:= (Sender as TLDBGrid);
150      DataSet:= Grid.DataSource.DataSet;
151      Field:= Column.Field;
152
153      R:= Rect;
154      InflateRect(
155        R,
156        -10,
157        -15);
158
159      if Assigned(Field) and (DataCol = 0) then // Only color description column
160        begin
161          case DataSet.RecNo of
162            1: // Inkomsten
163              if not(gdSelected in State) then
164                Grid.Canvas.Brush.Color:= clGreen_sea_100
165              else
166                Grid.Canvas.Brush.Color:= clGreen_sea_200;
167            2: // Vaste lasten
168              if not(gdSelected in State) then
169                Grid.Canvas.Brush.Color:= clAlizarin_100
170              else
171                Grid.Canvas.Brush.Color:= clAlizarin_200;
172            3: // Variabele lasten
173              if not(gdSelected in State) then
174                Grid.Canvas.Brush.Color:= clMidnight_blue_100
175              else
176                Grid.Canvas.Brush.Color:= clMidnight_blue_200;
177            4: // Totaal
178              if not(gdSelected in State) then
179                Grid.Canvas.Brush.Color:= clMidnight_blue_100
180              else
181                Grid.Canvas.Brush.Color:= clMidnight_blue_200
182          end;
183
184          // Always use black for selected (highlighted) rows in desciption column
185          if (gdSelected in State) then
186            begin
187              Grid.Canvas.Font.Color:= clBlack;
188              Grid.Canvas.Font.Style:= [fsBold];
189            end;
190
191        end;
192
193      Grid.Canvas.FillRect(Rect);
194      Grid.DefaultDrawColumnCell(
195        R,
196        DataCol,
197        Column,
198        State);
199
200      // Decorate Total row)
201      if (DataSet.RecNo = 4) then
202        begin
203
204          if (gdSelected in State) and (Field.DataType = ftFloat) then
205            Grid.Canvas.Font.Color:= clWhite // Default behavior for numbers
206          else
207            Grid.Canvas.Font.Color:= clBlack; // Description always black
208          Grid.Canvas.Font.Style:= [fsBold]; // Total row in Bold
209
210          Grid.Canvas.FillRect(Rect);
211          // Grid.DefaultDrawColumnCell(R, DataCol, Column, State);
212
213          // Black line above total row
214          // Grid.Canvas.Pen.Color:= clBlack; // clpeter_river_500);
215          // Grid.Canvas.Pen.Width:= 15;
216          // Grid.Canvas.MoveTo(Rect.Left, Rect.Bottom+5);
217          // Grid.Canvas.LineTo(Rect.Right, Rect.Bottom+5);
218          Grid.TotalRow:= True;
219        end
220      else
221        begin // White lines for all other rows
222          // Grid.Canvas.Pen.Color:= clWhite;
223          // Grid.Canvas.Pen.Width:= 3;
224          // Grid.Canvas.MoveTo(Rect.Left, Rect.Top);
225          // Grid.Canvas.LineTo(Rect.Right, Rect.Top);
226        end;
227    end;
228end;
229
230procedure TfrmBudget.LDBGrid3DrawColumnCell(
231  Sender: TObject;
232  const Rect: TRect;
233  DataCol: Integer;
234  Column: TColumn;
235  State: TGridDrawState);
236begin
237  if Sender is TLDBGrid then
238    begin
239      if Assigned(Column.Field) and ((Column.Title.Caption = 'Categorie') or (Column.Title.Caption = 'Subcategorie'))
240      then
241        begin
242          if ((Sender as TLDBGrid).DataSource.DataSet.FieldByName('Inkomsten').AsInteger = 1) then
243            begin
244              if not(gdSelected in State) then
245                (Sender as TLDBGrid).Canvas.Brush.Color:= clGreen_sea_100
246              else
247                (Sender as TLDBGrid).Canvas.Brush.Color:= clGreen_sea_200;
248            end
249          else if ((Sender as TLDBGrid).DataSource.DataSet.FieldByName('Vaste kosten').AsInteger = 1) then
250            begin
251              if not(gdSelected in State) then
252                (Sender as TLDBGrid).Canvas.Brush.Color:= clAlizarin_100
253              else
254                (Sender as TLDBGrid).Canvas.Brush.Color:= clAlizarin_200
255            end
256          else
257            begin
258              if not(gdSelected in State) then
259                (Sender as TLDBGrid).Canvas.Brush.Color:= clMidnight_blue_100
260              else
261                (Sender as TLDBGrid).Canvas.Brush.Color:= clMidnight_blue_200;
262            end;
263          if (gdSelected in State) then
264            begin
265              (Sender as TLDBGrid).Canvas.Font.Color:= clBlack;
266              (Sender as TLDBGrid).Canvas.Font.Style:= [fsBold];
267            end;
268        end;
269    end;
270end;
271
272procedure TfrmBudget.LDBGrid3KeyDown(
273  Sender: TObject;
274  var Key: Word;
275  Shift: TShiftState);
276var
277  Bookmark: TBookmark;
278begin
279  if (Key = VK_F2) then
280    begin
281      case frmBudgetEdit.ShowModal of
282        mrOk:
283          begin
284            Bookmark:= Self.LDBGrid3.DataSource.DataSet.Bookmark;
285            if dm.DataSetBudgetEdit.State = dsEdit then
286              dm.DataSetBudgetEdit.Post;
287            Self.LDBGrid3.DataSource.DataSet.Active:= False;
288            Self.LDBGrid3.DataSource.DataSet.Active:= True;
289            Self.LDBGrid2.DataSource.DataSet.Active:= False;
290            Self.LDBGrid2.DataSource.DataSet.Active:= True;
291            InitGrids;
292            Self.LDBGrid3.DataSource.DataSet.Bookmark:= Bookmark;
293          end;
294        mrCancel:
295          begin
296            dm.DataSetBudgetEdit.Cancel;
297          end;
298      end;
299    end;
300
301end;
302
303end.
304