root / UnitFeedEdition.pas @ 11
Historique | Voir | Annoter | Télécharger (29,218 ko)
1 |
unit UnitFeedEdition;
|
---|---|
2 |
|
3 |
interface
|
4 |
|
5 |
uses
|
6 |
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
7 |
Dialogs, gnugettext, StdCtrls, Grids, DBGrids, Buttons, Mask, DBCtrls, DB, |
8 |
JvExStdCtrls, JvEdit, JvValidateEdit, JvExControls, JvEnterTab, JvExMask, |
9 |
JvSpin, ExtCtrls, ComCtrls, ToolWin, ActnList, ImgList, JvButton, JvCtrls; |
10 |
|
11 |
type
|
12 |
TFormFeedEdition = class(TForm)
|
13 |
GroupBoxIngredients: TGroupBox; |
14 |
GroupBoxComposition: TGroupBox; |
15 |
DBGridIngredients: TDBGrid; |
16 |
SpeedButtonAppend: TSpeedButton; |
17 |
SpeedButtonDelete: TSpeedButton; |
18 |
SpeedButtonReplace: TSpeedButton; |
19 |
DBEditTotal: TDBEdit; |
20 |
SpeedButtonUp: TSpeedButton; |
21 |
SpeedButtonDown: TSpeedButton; |
22 |
SpeedButtonName: TSpeedButton; |
23 |
SpeedButtonLevel: TSpeedButton; |
24 |
DBEditRemain: TDBEdit; |
25 |
CheckBoxPhytase: TCheckBox; |
26 |
DBGridComposition: TDBGrid; |
27 |
DBEditName: TDBEdit; |
28 |
GroupBoxPhytase: TGroupBox; |
29 |
DBEditPhytaseLevel: TDBEdit; |
30 |
DBEditPhytaseConcentration: TDBEdit; |
31 |
DBEditPhytaseIncorporation: TDBEdit; |
32 |
DBLookupComboBoxPhytase: TDBLookupComboBox; |
33 |
EnterAsTab: TJvEnterAsTab; |
34 |
SpinEditBonusC: TJvSpinEdit; |
35 |
SpinEditBonusT: TJvSpinEdit; |
36 |
GroupBoxPresentation: TGroupBox; |
37 |
GroupBoxBonus: TGroupBox; |
38 |
PanelHeader: TPanel; |
39 |
PanelButtons: TPanel; |
40 |
PanelMain: TPanel; |
41 |
ImageListIcons: TImageList; |
42 |
ActionListButtons: TActionList; |
43 |
ActionRename: TAction; |
44 |
ActionComment: TAction; |
45 |
ActionHelp: TAction; |
46 |
ActionOK: TAction; |
47 |
ActionCancel: TAction; |
48 |
LabelName: TLabel; |
49 |
LabelWarning: TLabel; |
50 |
LabelCrois: TLabel; |
51 |
LabelTruie: TLabel; |
52 |
LabelTotal: TLabel; |
53 |
LabelRemain: TLabel; |
54 |
LabelType: TLabel; |
55 |
LabelConcentration: TLabel; |
56 |
LabelIncorporation: TLabel; |
57 |
LabelClass: TLabel; |
58 |
ComboBoxClass: TComboBox; |
59 |
ComboBoxPresentation: TComboBox; |
60 |
JvImgBtnCancel: TJvImgBtn; |
61 |
JvImgBtnOK: TJvImgBtn; |
62 |
JvImgBtnHelp: TJvImgBtn; |
63 |
JvImgBtnRename: TJvImgBtn; |
64 |
JvImgBtnComment: TJvImgBtn; |
65 |
procedure FormCreate(Sender: TObject);
|
66 |
procedure ComboBoxClassChange(Sender: TObject);
|
67 |
procedure DBGridIngredientsDrawColumnCell(Sender: TObject;
|
68 |
const Rect: TRect; DataCol: Integer; Column: TColumn;
|
69 |
State: TGridDrawState); |
70 |
procedure DBGridIngredientsTitleClick(Column: TColumn);
|
71 |
procedure SpeedButtonAppendClick(Sender: TObject);
|
72 |
procedure SpeedButtonDeleteClick(Sender: TObject);
|
73 |
procedure SpeedButtonReplaceClick(Sender: TObject);
|
74 |
procedure SpeedButtonUpClick(Sender: TObject);
|
75 |
procedure SpeedButtonDownClick(Sender: TObject);
|
76 |
procedure SpeedButtonNameClick(Sender: TObject);
|
77 |
procedure SpeedButtonLevelClick(Sender: TObject);
|
78 |
procedure DBGridCompositionDrawColumnCell(Sender: TObject;
|
79 |
const Rect: TRect; DataCol: Integer; Column: TColumn;
|
80 |
State: TGridDrawState); |
81 |
procedure DBGridCompositionKeyPress(Sender: TObject; var Key: Char); |
82 |
procedure CheckBoxPhytaseClick(Sender: TObject);
|
83 |
procedure FormDestroy(Sender: TObject);
|
84 |
procedure DBGridIngredientsDblClick(Sender: TObject);
|
85 |
procedure DBEditPhytaseConcentrationEnter(Sender: TObject);
|
86 |
procedure DBEditPhytaseConcentrationExit(Sender: TObject);
|
87 |
procedure FormShow(Sender: TObject);
|
88 |
procedure ActionRenameExecute(Sender: TObject);
|
89 |
procedure ActionCommentExecute(Sender: TObject);
|
90 |
procedure ActionHelpExecute(Sender: TObject);
|
91 |
procedure ActionOKExecute(Sender: TObject);
|
92 |
procedure ActionCancelExecute(Sender: TObject);
|
93 |
procedure NumEditKeyDown(Sender: TObject; var Key: Word; |
94 |
Shift: TShiftState); |
95 |
procedure NumEditKeyPress(Sender: TObject; var Key: Char); |
96 |
private
|
97 |
{ D?clarations priv?es }
|
98 |
public
|
99 |
{ D?clarations publiques }
|
100 |
end;
|
101 |
|
102 |
var
|
103 |
FormFeedEdition: TFormFeedEdition; |
104 |
|
105 |
implementation
|
106 |
|
107 |
{$R *.dfm}
|
108 |
|
109 |
uses
|
110 |
UnitDeclaration, UnitOptions, UnitRename, UnitComment; |
111 |
|
112 |
var
|
113 |
VK_Separator: boolean; |
114 |
|
115 |
procedure TFormFeedEdition.ActionCancelExecute(Sender: TObject);
|
116 |
begin
|
117 |
ModalResult := mrCancel; |
118 |
end;
|
119 |
|
120 |
procedure TFormFeedEdition.ActionCommentExecute(Sender: TObject);
|
121 |
begin
|
122 |
FormComment := TFormComment.Create(nil);
|
123 |
try
|
124 |
// FormComment.Caption := ButtonComment.Hint;
|
125 |
FormComment.Name := DataModuleDeclaration.ClientDataSetFeedsName.Value; |
126 |
FormComment.OldComment := DataModuleDeclaration.ClientDataSetFeedsDescription.Value; |
127 |
if (FormComment.ShowModal = mrOk) and (FormComment.NewComment <> FormComment.OldComment) |
128 |
then // Commenter |
129 |
with DataModuleDeclaration do |
130 |
begin
|
131 |
DBUser.BeginTransaction; |
132 |
try
|
133 |
DBUser.ExecSQL('UPDATE Feeds '
|
134 |
+ Format('SET Description = %s ', [QuotedStr(FormComment.NewComment)])
|
135 |
+ Format('WHERE Id = %d', [ClientDataSetFeedsId.Value]));
|
136 |
DBUser.Commit; |
137 |
except
|
138 |
DBUser.RollBack; |
139 |
MessageDlg(Format(_('Unknown error: %s %s %s'), ['UnitFeedEdition', 'ActionCommentExecute', 'DBUser (UPDATE Feeds)']), mtError, [mbOK], 0); |
140 |
Exit; |
141 |
end;
|
142 |
// Commenter dans ClientDataSetFeeds
|
143 |
ClientDataSetFeeds.Edit; |
144 |
ClientDataSetFeedsDescription.Value := FormComment.NewComment; |
145 |
ClientDataSetFeeds.Post; |
146 |
end;
|
147 |
finally
|
148 |
FormComment.Release; |
149 |
end;
|
150 |
end;
|
151 |
|
152 |
procedure TFormFeedEdition.ActionHelpExecute(Sender: TObject);
|
153 |
begin
|
154 |
Application.HelpContext(HelpContext); |
155 |
end;
|
156 |
|
157 |
procedure TFormFeedEdition.ActionOKExecute(Sender: TObject);
|
158 |
var
|
159 |
total: Double; |
160 |
USFormatSettings: TFormatSettings; |
161 |
begin
|
162 |
with DataModuleDeclaration do |
163 |
begin
|
164 |
if CheckBoxPhytase.Checked
|
165 |
then // V?rifier la saisie de la phytase |
166 |
begin
|
167 |
if ClientDataSetFeedsPhytaseId.IsNull
|
168 |
then
|
169 |
begin
|
170 |
MessageDlg(_('You must select a phytase name.'), mtError, [mbOK], 0); |
171 |
ActiveControl := DBLookupComboBoxPhytase; |
172 |
Exit; |
173 |
end;
|
174 |
if ClientDataSetFeedsPhytaseConcentration.Value = 0 |
175 |
then
|
176 |
begin
|
177 |
MessageDlg(_('You must specify a phytase concentration level.'), mtError, [mbOK], 0); |
178 |
ActiveControl := DBEditPhytaseConcentration; |
179 |
Exit; |
180 |
end;
|
181 |
if ClientDataSetFeedsPhytaseIncorporation.Value = 0 |
182 |
then
|
183 |
begin
|
184 |
MessageDlg(_('You must specify a phytase incorporation level.'), mtError, [mbOK], 0); |
185 |
ActiveControl := DBEditPhytaseIncorporation; |
186 |
Exit; |
187 |
end;
|
188 |
end;
|
189 |
total := 0;
|
190 |
ClientDataSetComposition.DisableControls; |
191 |
try
|
192 |
ClientDataSetComposition.First; |
193 |
while not ClientDataSetComposition.Eof do |
194 |
begin // V?rifier la saisie de chaques mati?res premi?res utilis?es |
195 |
if ClientDataSetCompositionMS.Value = 0 |
196 |
then
|
197 |
begin
|
198 |
MessageDlg(_('You must specify a dry matter value for this ingredient.'), mtError, [mbOK], 0); |
199 |
ActiveControl := DBGridComposition; |
200 |
DBGridComposition.SelectedField := ClientDataSetCompositionMS; |
201 |
Exit; |
202 |
end;
|
203 |
if ClientDataSetCompositionLevel.Value = 0 |
204 |
then
|
205 |
begin
|
206 |
MessageDlg(_('You must specify an incorporation rate for this ingredient.'), mtError, [mbOK], 0); |
207 |
ActiveControl := DBGridComposition; |
208 |
DBGridComposition.SelectedField := ClientDataSetCompositionLevel; |
209 |
Exit; |
210 |
end;
|
211 |
total := total + ClientDataSetCompositionLevel.Value; |
212 |
ClientDataSetComposition.Next; |
213 |
end;
|
214 |
finally
|
215 |
ClientDataSetComposition.EnableControls; |
216 |
end;
|
217 |
if Abs(ClientDataSetFeedsRemain.Value) > 1 / 1000 |
218 |
then
|
219 |
if MessageDlg(_('The sum of ingredient incorporation rates is not equal to 100% of the diet composition.' + sLineBreak + 'Are you sure you want to continue?'), mtError, [mbYes, mbNo], 0) <> mrYes |
220 |
then
|
221 |
begin
|
222 |
Exit; |
223 |
end;
|
224 |
FilterOnClass := False; // Mise ? jour le 22/02/2008
|
225 |
// Modifier le r?gime
|
226 |
GetLocaleFormatSettings(1033, USFormatSettings);
|
227 |
DBUser.BeginTransaction; |
228 |
try
|
229 |
DBUser.ExecSQL('UPDATE Feeds '
|
230 |
+ Format('SET Presentation = %d, ', [ComboBoxPresentation.ItemIndex])
|
231 |
+ Format('BonusC = %.3f, ', [SpinEditBonusC.Value / 100], USFormatSettings) |
232 |
+ Format('BonusT = %.3f ', [SpinEditBonusT.Value / 100], USFormatSettings) |
233 |
+ Format('WHERE Id = %d', [ClientDataSetFeedsId.Value]));
|
234 |
// Phytase
|
235 |
if CheckBoxPhytase.Checked
|
236 |
then
|
237 |
DBUser.ExecSQL('UPDATE Feeds '
|
238 |
+ Format('SET Phytase = %d, ', [ClientDataSetFeedsPhytaseId.Value])
|
239 |
+ Format('Concentration = %.0f, ', [ClientDataSetFeedsPhytaseConcentration.Value], USFormatSettings)
|
240 |
+ Format('Incorporation = %.0f ', [ClientDataSetFeedsPhytaseIncorporation.Value], USFormatSettings)
|
241 |
+ Format('WHERE Id = %d', [ClientDataSetFeedsId.Value]))
|
242 |
else
|
243 |
DBUser.ExecSQL('UPDATE Feeds '
|
244 |
+ 'SET Phytase = null, '
|
245 |
+ 'Concentration = null, '
|
246 |
+ 'Incorporation = null '
|
247 |
+ Format('WHERE Id = %d', [ClientDataSetFeedsId.Value]));
|
248 |
DBUser.Commit; |
249 |
except
|
250 |
DBUser.RollBack; |
251 |
MessageDlg(Format(_('Unknown error: %s %s %s'), ['UnitFeedEdition', 'ActionOKExecute', 'DBUser (UPDATE Feeds)']), mtError, [mbOK], 0); |
252 |
Exit; |
253 |
end;
|
254 |
// Suppression de l'ancienne composition
|
255 |
DBUser.BeginTransaction; |
256 |
try
|
257 |
DBUser.ExecSQL('DELETE FROM Composition '
|
258 |
+ Format('WHERE Feed = %d', [ClientDataSetFeedsId.Value]));
|
259 |
DBUser.Commit; |
260 |
except
|
261 |
DBUser.RollBack; |
262 |
MessageDlg(Format(_('Unknown error: %s %s %s'), ['UnitFeedEdition', 'ActionOKExecute', 'DBUser (DELETE FROM Composition)']), mtError, [mbOK], 0); |
263 |
Exit; |
264 |
end;
|
265 |
// Enregistrement de la nouvelle composition
|
266 |
ClientDataSetComposition.DisableControls; |
267 |
try
|
268 |
DBUser.BeginTransaction; |
269 |
try
|
270 |
ClientDataSetComposition.First; |
271 |
while not ClientDataSetComposition.Eof do |
272 |
begin
|
273 |
ClientDataSetCompositionUser.DisplayValues := DefaultTrueBoolStr + ';' + DefaultFalseBoolStr;
|
274 |
DBUser.ExecSQL('INSERT INTO Composition (Feed, Ingredient, User, Rank, MS, Level) VALUES ('
|
275 |
+ Format('%d, ', [ClientDataSetFeedsId.Value])
|
276 |
+ Format('%d, ', [ClientDataSetCompositionIngredient.Value])
|
277 |
+ Format('''%s'', ', [ClientDataSetCompositionUser.AsString])
|
278 |
+ Format('%d, ', [ClientDataSetCompositionRank.Value])
|
279 |
+ Format('%.15f, ', [InputProximal(ClientDataSetCompositionMS.Value, 1, 1, FormOptions.Proximal)], USFormatSettings) |
280 |
+ Format('%.15f)', [InputIncorporation(ClientDataSetCompositionLevel.Value, FormOptions.Incorporation)], USFormatSettings));
|
281 |
ClientDataSetComposition.Next; |
282 |
end;
|
283 |
DBUser.Commit; |
284 |
except
|
285 |
DBUser.RollBack; |
286 |
MessageDlg(Format(_('Unknown error: %s %s %s'), ['UnitFeedEdition', 'ActionOKExecute', 'DBUser (INSERT INTO Composition)']), mtError, [mbOK], 0); |
287 |
Exit; |
288 |
end;
|
289 |
finally
|
290 |
ClientDataSetComposition.EnableControls; |
291 |
end;
|
292 |
// Calculer les valeurs de ClientDataSetFeeds
|
293 |
TableFeeds := DBUser.GetTable('SELECT * FROM Feeds '
|
294 |
+ Format('WHERE Id = %d', [ClientDataSetFeedsId.Value]));
|
295 |
ClientDataSetFeeds.Edit; |
296 |
try
|
297 |
ClientDataSetFeedsPresentation.Value := ComboBoxPresentation.ItemIndex; |
298 |
ClientDataSetFeedsBonusC.Value := SpinEditBonusC.Value; |
299 |
ClientDataSetFeedsBonusT.Value := SpinEditBonusT.Value; |
300 |
CalcFeed; |
301 |
ClientDataSetFeeds.Post; |
302 |
except
|
303 |
ClientDataSetFeeds.Cancel; |
304 |
MessageDlg(Format(_('Unknown error: %s %s %s'), ['UnitFeedEdition', 'ActionOKExecute', 'ClientDataSetFeeds']), mtError, [mbOK], 0); |
305 |
Exit; |
306 |
end;
|
307 |
TableFeeds.Free; |
308 |
end;
|
309 |
ModalResult := mrOk; |
310 |
end;
|
311 |
|
312 |
procedure TFormFeedEdition.ActionRenameExecute(Sender: TObject);
|
313 |
begin
|
314 |
FormRename := TFormRename.Create(nil);
|
315 |
try
|
316 |
// FormRename.Caption := ButtonRename.Hint;
|
317 |
FormRename.OldName := DataModuleDeclaration.ClientDataSetFeedsName.Value; |
318 |
FormRename.NameList.Assign(DataModuleDeclaration.FeedList); |
319 |
if (FormRename.ShowModal = mrOk) and (FormRename.NewName <> FormRename.OldName) |
320 |
then // Renommer |
321 |
with DataModuleDeclaration do |
322 |
begin
|
323 |
DBUser.BeginTransaction; |
324 |
try
|
325 |
DBUser.ExecSQL('UPDATE Feeds '
|
326 |
+ Format('SET Name = %s ', [QuotedStr(FormRename.NewName)])
|
327 |
+ Format('WHERE Id = %d', [ClientDataSetFeedsId.Value]));
|
328 |
DBUser.Commit; |
329 |
except
|
330 |
DBUser.RollBack; |
331 |
MessageDlg(Format(_('Unknown error: %s %s %s'), ['UnitFeedEdition', 'ActionRenameExecute', 'DBUser (UPDATE Feeds)']), mtError, [mbOK], 0); |
332 |
Exit; |
333 |
end;
|
334 |
// Renommer dans ClientDataSetFeeds
|
335 |
ClientDataSetFeeds.Edit; |
336 |
ClientDataSetFeedsName.Value := FormRename.NewName; |
337 |
ClientDataSetFeeds.Post; |
338 |
// Modifier le nom dans la liste des r?gimes
|
339 |
FeedList[FeedList.IndexOf(FormRename.OldName)] := FormRename.NewName; |
340 |
end;
|
341 |
finally
|
342 |
FormRename.Release; |
343 |
end;
|
344 |
end;
|
345 |
|
346 |
procedure TFormFeedEdition.CheckBoxPhytaseClick(Sender: TObject);
|
347 |
begin
|
348 |
if CheckBoxPhytase.Checked
|
349 |
then
|
350 |
begin
|
351 |
DBLookupComboBoxPhytase.Enabled := True; |
352 |
DBEditPhytaseConcentration.Enabled := True; |
353 |
DBEditPhytaseIncorporation.Enabled := True; |
354 |
ActiveControl := DBLookupComboBoxPhytase; |
355 |
end
|
356 |
else
|
357 |
begin
|
358 |
with DataModuleDeclaration do |
359 |
begin
|
360 |
ClientDataSetFeeds.Edit; |
361 |
ClientDataSetFeedsPhytaseId.Clear; |
362 |
ClientDataSetFeedsPhytaseConcentration.Clear; |
363 |
ClientDataSetFeedsPhytaseIncorporation.Clear; |
364 |
ClientDataSetFeeds.Post; |
365 |
end;
|
366 |
DBLookupComboBoxPhytase.Enabled := False; |
367 |
DBEditPhytaseConcentration.Enabled := False; |
368 |
DBEditPhytaseIncorporation.Enabled := False; |
369 |
end;
|
370 |
end;
|
371 |
|
372 |
procedure TFormFeedEdition.ComboBoxClassChange(Sender: TObject);
|
373 |
begin
|
374 |
with DataModuleDeclaration do |
375 |
begin
|
376 |
ClientDataSetIngredients.Filtered := False; |
377 |
FilterOnClass := True; |
378 |
FilteredClass := ComboBoxClass.ItemIndex; |
379 |
if FilteredClass <> 0 |
380 |
then
|
381 |
ClientDataSetIngredients.Filtered := True; |
382 |
end;
|
383 |
end;
|
384 |
|
385 |
procedure TFormFeedEdition.DBEditPhytaseConcentrationEnter(Sender: TObject);
|
386 |
begin
|
387 |
// DataModuleDeclaration.ClientDataSetFeedsPhytaseConcentration.DisplayFormat := '0';
|
388 |
// DBEditPhytaseConcentration.SelectAll;
|
389 |
end;
|
390 |
|
391 |
procedure TFormFeedEdition.DBEditPhytaseConcentrationExit(Sender: TObject);
|
392 |
begin
|
393 |
// DataModuleDeclaration.ClientDataSetFeedsPhytaseConcentration.DisplayFormat := '#,###,##0';
|
394 |
end;
|
395 |
|
396 |
procedure TFormFeedEdition.DBGridCompositionDrawColumnCell(Sender: TObject;
|
397 |
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
|
398 |
begin
|
399 |
with DBGridComposition do |
400 |
begin
|
401 |
if Column.FieldName = 'IngredientName' |
402 |
then // Couleur particuli?re pour indiquer la base d'origine |
403 |
if gdSelected in State |
404 |
then // Cellule courante |
405 |
begin
|
406 |
if DataModuleDeclaration.ClientDataSetCompositionUser.Value
|
407 |
then // User |
408 |
Canvas.Font.Color := clWebPaleTurquoise |
409 |
else // InraAfz |
410 |
Canvas.Font.Color := clWebLightPink; |
411 |
Canvas.Brush.Color := clWebGray; |
412 |
end
|
413 |
else // Cellule normale |
414 |
begin
|
415 |
Canvas.Font.Color := clWebBlack; |
416 |
if DataModuleDeclaration.ClientDataSetCompositionUser.Value
|
417 |
then // User |
418 |
Canvas.Brush.Color := clWebPaleTurquoise |
419 |
else // InraAfz |
420 |
Canvas.Brush.Color := clWebLightPink; |
421 |
end
|
422 |
else // Cellule modifiable |
423 |
if gdSelected in State |
424 |
then // Cellule courante |
425 |
begin
|
426 |
Canvas.Font.Color := clWebWhite; |
427 |
Canvas.Brush.Color := clWebGray; |
428 |
end
|
429 |
else
|
430 |
begin
|
431 |
Canvas.Font.Color := clWebBlack; |
432 |
Canvas.Brush.Color := clWebWhite; |
433 |
end;
|
434 |
DefaultDrawColumnCell(Rect, DataCol, Column, State); |
435 |
end;
|
436 |
end;
|
437 |
|
438 |
procedure TFormFeedEdition.DBGridCompositionKeyPress(Sender: TObject; var Key: Char); |
439 |
begin
|
440 |
if Key = AnsiChar(#13) |
441 |
then
|
442 |
begin
|
443 |
if DBGridComposition.EditorMode
|
444 |
then
|
445 |
begin
|
446 |
DBGridComposition.EditorMode := False; |
447 |
with DataModuleDeclaration.ClientDataSetComposition do |
448 |
if Modified
|
449 |
then
|
450 |
Post; |
451 |
end;
|
452 |
Key := AnsiChar(#0);
|
453 |
end
|
454 |
else
|
455 |
NumEditKeyPress(Sender, Key); |
456 |
end;
|
457 |
|
458 |
procedure TFormFeedEdition.DBGridIngredientsDblClick(Sender: TObject);
|
459 |
begin
|
460 |
SpeedButtonAppendClick(nil);
|
461 |
end;
|
462 |
|
463 |
procedure TFormFeedEdition.DBGridIngredientsDrawColumnCell(Sender: TObject;
|
464 |
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
|
465 |
begin
|
466 |
with DBGridIngredients do |
467 |
begin
|
468 |
if Column.FieldName = DataModuleDeclaration.ClientDataSetIngredients.IndexFieldNames
|
469 |
then // Colonne tri?e |
470 |
Canvas.Font.Style := Canvas.Font.Style + [fsBold]; |
471 |
if Column.FieldName = 'Name' |
472 |
then // Couleur particuli?re pour indiquer la base d'origine |
473 |
if gdSelected in State |
474 |
then // Cellule courante |
475 |
begin
|
476 |
if DataModuleDeclaration.ClientDataSetIngredientsUser.Value
|
477 |
then // User |
478 |
Canvas.Font.Color := clWebPaleTurquoise |
479 |
else // InraAfz |
480 |
Canvas.Font.Color := clWebLightPink; |
481 |
Canvas.Brush.Color := clWebGray; |
482 |
end
|
483 |
else // Cellule normale |
484 |
begin
|
485 |
Canvas.Font.Color := clWebBlack; |
486 |
if DataModuleDeclaration.ClientDataSetIngredientsUser.Value
|
487 |
then // User |
488 |
Canvas.Brush.Color := clWebPaleTurquoise |
489 |
else // InraAfz |
490 |
Canvas.Brush.Color := clWebLightPink; |
491 |
end
|
492 |
else // Valeurs |
493 |
if gdSelected in State |
494 |
then // Cellule courante |
495 |
begin
|
496 |
Canvas.Font.Color := clWebWhite; |
497 |
Canvas.Brush.Color := clWebGray; |
498 |
end
|
499 |
else
|
500 |
begin
|
501 |
Canvas.Font.Color := clWebBlack; |
502 |
Canvas.Brush.Color := clWebLightGrey; |
503 |
end;
|
504 |
DefaultDrawColumnCell(Rect, DataCol, Column, State); |
505 |
end;
|
506 |
end;
|
507 |
|
508 |
procedure TFormFeedEdition.DBGridIngredientsTitleClick(Column: TColumn);
|
509 |
begin
|
510 |
with DataModuleDeclaration.ClientDataSetIngredients do |
511 |
if IndexFieldNames = Column.FieldName
|
512 |
then // C'est d?j? l'index => tri selon le num?ro |
513 |
IndexFieldNames := 'Name'
|
514 |
else
|
515 |
IndexFieldNames := Column.FieldName; |
516 |
end;
|
517 |
|
518 |
procedure TFormFeedEdition.FormCreate(Sender: TObject);
|
519 |
begin
|
520 |
if Screen.Fonts.IndexOf('Arial Unicode MS') <> -1 |
521 |
then
|
522 |
Font.Name := 'Arial Unicode MS';
|
523 |
// PanelButtons.Font.Size := PanelButtons.Font.Size + 2;
|
524 |
PanelButtons.Font.Style := [fsBold]; |
525 |
LabelName.Font.Style := [fsBold]; |
526 |
DBEditName.Font.Style := [fsBold]; |
527 |
LabelWarning.Font.Color := clRed; |
528 |
TranslateComponent(Self); |
529 |
with DataModuleDeclaration do |
530 |
begin
|
531 |
// Classes
|
532 |
ComboBoxClass.Items.Add(_('(All)'));
|
533 |
ClientDataSetClasses.First; |
534 |
while not ClientDataSetClasses.Eof do |
535 |
begin
|
536 |
ComboBoxClass.Items.Add(ClientDataSetClassesName.Value); |
537 |
ClientDataSetClasses.Next; |
538 |
end;
|
539 |
ComboBoxClass.ItemIndex := 0; // (All) par d?faut |
540 |
// Composition
|
541 |
ClientDataSetComposition.Filter := Format('Feed = %d', [ClientDataSetFeedsId.Value]);
|
542 |
ClientDataSetComposition.Filtered := True; |
543 |
ClientDataSetComposition.First; |
544 |
end;
|
545 |
with FormOptions do |
546 |
begin
|
547 |
DBGridComposition.Columns[1].Title.Caption := Format('%s (%s)', [DBGridComposition.Columns[1].Title.Caption, ComboBoxProximal.Items[Proximal]]); |
548 |
DBGridComposition.Columns[2].Title.Caption := Format('%s (%s)', [DBGridComposition.Columns[2].Title.Caption, ComboBoxIncorporation.Items[Incorporation]]); |
549 |
end;
|
550 |
GroupBoxBonus.Caption := GroupBoxBonus.Caption + ' (%)';
|
551 |
end;
|
552 |
|
553 |
procedure TFormFeedEdition.FormShow(Sender: TObject);
|
554 |
begin
|
555 |
with DataModuleDeclaration do |
556 |
begin
|
557 |
ComboBoxPresentation.ItemIndex := ClientDataSetFeedsPresentation.Value; |
558 |
SpinEditBonusC.Value := ClientDataSetFeedsBonusC.Value; |
559 |
SpinEditBonusT.Value := ClientDataSetFeedsBonusT.Value; |
560 |
// Phytase
|
561 |
if ClientDataSetFeedsPhytaseId.IsNull
|
562 |
then
|
563 |
CheckBoxPhytase.Checked := False; |
564 |
// Taux d'incorporation total
|
565 |
ClientDataSetFeeds.Edit; |
566 |
if VarIsEmpty(ClientDataSetComposition.Aggregates[0].Value) |
567 |
or VarIsNull(ClientDataSetComposition.Aggregates[0].Value) |
568 |
then
|
569 |
ClientDataSetFeedsLevelSum.Clear |
570 |
else
|
571 |
ClientDataSetFeedsLevelSum.Value := ClientDataSetComposition.Aggregates[0].Value;
|
572 |
ClientDataSetFeeds.Post; |
573 |
end;
|
574 |
with DBGridComposition do |
575 |
Columns[0].Width := Width - Columns[1].Width - Columns[2].Width - 28; |
576 |
end;
|
577 |
|
578 |
procedure TFormFeedEdition.FormDestroy(Sender: TObject);
|
579 |
begin
|
580 |
with DataModuleDeclaration do |
581 |
begin
|
582 |
ClientDataSetIngredients.Filtered := False; |
583 |
ClientDataSetIngredients.Filter := '';
|
584 |
FilterOnClass := False; |
585 |
ClientDataSetComposition.Filtered := False; |
586 |
ClientDataSetComposition.Filter := '';
|
587 |
end;
|
588 |
end;
|
589 |
|
590 |
procedure TFormFeedEdition.SpeedButtonAppendClick(Sender: TObject);
|
591 |
begin
|
592 |
with DataModuleDeclaration do |
593 |
if ClientDataSetIngredients.RecordCount > 0 |
594 |
then
|
595 |
begin
|
596 |
ClientDataSetComposition.Append; |
597 |
ClientDataSetCompositionFeed.Value := ClientDataSetFeedsId.Value; |
598 |
ClientDataSetCompositionRank.Value := ClientDataSetComposition.RecordCount + 1;
|
599 |
ClientDataSetCompositionIngredient.Value := ClientDataSetIngredientsId.Value; |
600 |
ClientDataSetCompositionUser.Value := ClientDataSetIngredientsUser.Value; |
601 |
ClientDataSetCompositionIngredientName.Value := ClientDataSetIngredientsName.Value; |
602 |
ClientDataSetCompositionMS.Value := ClientDataSetIngredientsMS.Value; |
603 |
ClientDataSetCompositionLevel.Value := 0;
|
604 |
ClientDataSetComposition.Post; |
605 |
ActiveControl := DBGridComposition; |
606 |
DBGridComposition.SelectedField := ClientDataSetCompositionLevel; |
607 |
end;
|
608 |
end;
|
609 |
|
610 |
procedure TFormFeedEdition.SpeedButtonDeleteClick(Sender: TObject);
|
611 |
var
|
612 |
Distance: Integer; |
613 |
begin
|
614 |
with DataModuleDeclaration do |
615 |
if ClientDataSetComposition.RecordCount > 0 |
616 |
then
|
617 |
begin
|
618 |
ClientDataSetComposition.DisableControls; |
619 |
ClientDataSetComposition.Delete; |
620 |
// Recalculer l'agr?gat
|
621 |
AggregateLevelSumUpdate(ClientDataSetComposition.Aggregates[0]);
|
622 |
Distance := ClientDataSetComposition.RecNo - ClientDataSetComposition.RecordCount; |
623 |
while not ClientDataSetComposition.Eof do |
624 |
begin
|
625 |
ClientDataSetComposition.Edit; |
626 |
ClientDataSetCompositionRank.Value := ClientDataSetCompositionRank.Value - 1;
|
627 |
ClientDataSetComposition.Post; |
628 |
ClientDataSetComposition.Next; |
629 |
end;
|
630 |
// Res?lectionner l'?l?ment courant
|
631 |
if Distance < 0 then ClientDataSetComposition.MoveBy(Distance); |
632 |
ClientDataSetComposition.EnableControls; |
633 |
end;
|
634 |
end;
|
635 |
|
636 |
procedure TFormFeedEdition.SpeedButtonDownClick(Sender: TObject);
|
637 |
var
|
638 |
Position: Integer; |
639 |
begin
|
640 |
with DataModuleDeclaration do |
641 |
if ClientDataSetComposition.RecNo < ClientDataSetComposition.RecordCount
|
642 |
then
|
643 |
begin
|
644 |
ClientDataSetComposition.DisableControls; |
645 |
Position := ClientDataSetComposition.RecNo; |
646 |
// D?caler les ?l?ments suivant l'?l?ment courant
|
647 |
ClientDataSetComposition.Last; |
648 |
while ClientDataSetComposition.RecNo > Position do |
649 |
begin
|
650 |
ClientDataSetComposition.Edit; |
651 |
ClientDataSetCompositionRank.Value := ClientDataSetCompositionRank.Value + 1;
|
652 |
ClientDataSetComposition.Post; |
653 |
ClientDataSetComposition.Prior; |
654 |
end;
|
655 |
// L'?l?ment courant deviendra le suivant
|
656 |
ClientDataSetComposition.Edit; |
657 |
ClientDataSetCompositionRank.Value := ClientDataSetCompositionRank.Value + 1;
|
658 |
ClientDataSetComposition.Post; |
659 |
// L'?l?ment suivant devient le pr?c?dent
|
660 |
ClientDataSetComposition.Next; |
661 |
ClientDataSetComposition.Edit; |
662 |
ClientDataSetCompositionRank.Value := ClientDataSetCompositionRank.Value - 2;
|
663 |
ClientDataSetComposition.Post; |
664 |
// Ravancer les ?l?ments d?cal?s
|
665 |
ClientDataSetComposition.Last; |
666 |
while ClientDataSetComposition.RecNo > Position + 1 do |
667 |
begin
|
668 |
ClientDataSetComposition.Edit; |
669 |
ClientDataSetCompositionRank.Value := ClientDataSetCompositionRank.Value - 1;
|
670 |
ClientDataSetComposition.Post; |
671 |
ClientDataSetComposition.Prior; |
672 |
end;
|
673 |
ClientDataSetComposition.EnableControls; |
674 |
end;
|
675 |
end;
|
676 |
|
677 |
procedure TFormFeedEdition.SpeedButtonLevelClick(Sender: TObject);
|
678 |
var
|
679 |
Position, Distance: Integer; |
680 |
begin
|
681 |
with DataModuleDeclaration do |
682 |
begin
|
683 |
Distance := 0;
|
684 |
Position := ClientDataSetCompositionRank.Value; |
685 |
ClientDataSetComposition.DisableControls; |
686 |
ClientDataSetComposition.AggregatesActive := False; |
687 |
ClientDataSetComposition.IndexName := 'IndexLevel';
|
688 |
ClientDataSetComposition.First; |
689 |
while not ClientDataSetComposition.Eof do |
690 |
begin
|
691 |
if ClientDataSetCompositionRank.Value = Position
|
692 |
then // Enregistrement courant |
693 |
Distance := ClientDataSetComposition.RecNo - ClientDataSetComposition.RecordCount; |
694 |
ClientDataSetComposition.Edit; |
695 |
ClientDataSetCompositionRank.Value := ClientDataSetComposition.RecNo; |
696 |
ClientDataSetComposition.Post; |
697 |
ClientDataSetComposition.Next; |
698 |
end;
|
699 |
// Res?lectionner l'?l?ment courant
|
700 |
if Distance < 0 then ClientDataSetComposition.MoveBy(Distance); |
701 |
ClientDataSetComposition.IndexName := 'IndexRank';
|
702 |
ClientDataSetComposition.AggregatesActive := True; |
703 |
ClientDataSetComposition.EnableControls; |
704 |
end;
|
705 |
end;
|
706 |
|
707 |
procedure TFormFeedEdition.SpeedButtonNameClick(Sender: TObject);
|
708 |
var
|
709 |
Position, Distance: Integer; |
710 |
begin
|
711 |
with DataModuleDeclaration do |
712 |
begin
|
713 |
Distance := 0;
|
714 |
Position := ClientDataSetCompositionRank.Value; |
715 |
ClientDataSetComposition.DisableControls; |
716 |
ClientDataSetComposition.AggregatesActive := False; |
717 |
ClientDataSetComposition.IndexName := 'IndexIngredientName';
|
718 |
ClientDataSetComposition.First; |
719 |
while not ClientDataSetComposition.Eof do |
720 |
begin
|
721 |
if ClientDataSetCompositionRank.Value = Position
|
722 |
then // Enregistrement courant |
723 |
Distance := ClientDataSetComposition.RecNo - ClientDataSetComposition.RecordCount; |
724 |
ClientDataSetComposition.Edit; |
725 |
ClientDataSetCompositionRank.Value := ClientDataSetComposition.RecNo; |
726 |
ClientDataSetComposition.Post; |
727 |
ClientDataSetComposition.Next; |
728 |
end;
|
729 |
// Res?lectionner l'?l?ment courant
|
730 |
if Distance < 0 then ClientDataSetComposition.MoveBy(Distance); |
731 |
ClientDataSetComposition.IndexName := 'IndexRank';
|
732 |
ClientDataSetComposition.AggregatesActive := True; |
733 |
ClientDataSetComposition.EnableControls; |
734 |
end;
|
735 |
end;
|
736 |
|
737 |
procedure TFormFeedEdition.SpeedButtonReplaceClick(Sender: TObject);
|
738 |
begin
|
739 |
with DataModuleDeclaration do |
740 |
if (ClientDataSetIngredients.RecordCount > 0) and (ClientDataSetComposition.RecordCount > 0) |
741 |
then
|
742 |
begin
|
743 |
ClientDataSetComposition.Edit; |
744 |
ClientDataSetCompositionUser.Value := ClientDataSetIngredientsUser.Value; |
745 |
ClientDataSetCompositionIngredient.Value := ClientDataSetIngredientsId.Value; |
746 |
ClientDataSetCompositionIngredientName.Value := ClientDataSetIngredientsName.Value; |
747 |
ClientDataSetCompositionMS.Value := ClientDataSetIngredientsMS.Value; |
748 |
ClientDataSetComposition.Post; |
749 |
ActiveControl := DBGridComposition; |
750 |
DBGridComposition.SelectedField := ClientDataSetCompositionMS; |
751 |
end;
|
752 |
end;
|
753 |
|
754 |
procedure TFormFeedEdition.SpeedButtonUpClick(Sender: TObject);
|
755 |
var
|
756 |
Position: Integer; |
757 |
begin
|
758 |
with DataModuleDeclaration do |
759 |
if ClientDataSetComposition.RecNo > 1 |
760 |
then
|
761 |
begin
|
762 |
ClientDataSetComposition.DisableControls; |
763 |
Position := ClientDataSetComposition.RecNo; |
764 |
// D?caler les ?l?ments ? partir de l'?l?ment courant
|
765 |
ClientDataSetComposition.Last; |
766 |
while ClientDataSetComposition.RecNo > Position - 1 do |
767 |
begin
|
768 |
ClientDataSetComposition.Edit; |
769 |
ClientDataSetCompositionRank.Value := ClientDataSetCompositionRank.Value + 1;
|
770 |
ClientDataSetComposition.Post; |
771 |
ClientDataSetComposition.Prior; |
772 |
end;
|
773 |
// L'?l?ment pr?c?dent deviendra le suivant
|
774 |
ClientDataSetComposition.Edit; |
775 |
ClientDataSetCompositionRank.Value := ClientDataSetCompositionRank.Value + 1;
|
776 |
ClientDataSetComposition.Post; |
777 |
// L'?l?ment courant devient le pr?c?dent
|
778 |
ClientDataSetComposition.Next; |
779 |
ClientDataSetComposition.Edit; |
780 |
ClientDataSetCompositionRank.Value := ClientDataSetCompositionRank.Value - 2;
|
781 |
ClientDataSetComposition.Post; |
782 |
// Ravancer les ?l?ments d?cal?s
|
783 |
ClientDataSetComposition.Last; |
784 |
while ClientDataSetComposition.RecNo > Position do |
785 |
begin
|
786 |
ClientDataSetComposition.Edit; |
787 |
ClientDataSetCompositionRank.Value := ClientDataSetCompositionRank.Value - 1;
|
788 |
ClientDataSetComposition.Post; |
789 |
ClientDataSetComposition.Prior; |
790 |
end;
|
791 |
// Res?lectionner l'?l?ment courant (Position - 1)
|
792 |
ClientDataSetComposition.Prior; |
793 |
ClientDataSetComposition.EnableControls; |
794 |
end;
|
795 |
end;
|
796 |
|
797 |
procedure TFormFeedEdition.NumEditKeyDown(Sender: TObject;
|
798 |
var Key: Word; Shift: TShiftState);
|
799 |
begin
|
800 |
// D?tection de l'appui sur le s?parateur d?cimal du pav? num?rique
|
801 |
VK_Separator := (Key = VK_DECIMAL); |
802 |
end;
|
803 |
|
804 |
procedure TFormFeedEdition.NumEditKeyPress(Sender: TObject;
|
805 |
var Key: Char);
|
806 |
begin
|
807 |
if VK_Separator then |
808 |
// Renvoyer le s?parateur d?cimal des options r?gionales et linguistiques
|
809 |
Key := DecimalSeparator; |
810 |
end;
|
811 |
|
812 |
end.
|