Changeset 6 for trunk/FormMain.pas
- Timestamp:
- Apr 13, 2026, 2:01:36 PM (2 weeks ago)
- File:
-
- 1 edited
-
trunk/FormMain.pas (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/FormMain.pas
r5 r6 5 5 uses 6 6 Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls, 7 EditBtn, TAGraph, TASeries, Generics.Collections, Generics.Defaults,7 EditBtn, Menus, TAGraph, TASeries, Generics.Collections, Generics.Defaults, 8 8 DateUtils, Ean, Translator, ApplicationInfo, RegistryEx, PersistentForm, 9 Theme, Common, XML, DOM, XMLRead, XMLWrite;9 Theme, Common, XML, DOM, XMLRead, EdcProject; 10 10 11 11 type … … 20 20 ButtonIntervalRight: TButton; 21 21 ButtonIntervalLeft: TButton; 22 ButtonLoad: TButton;23 22 Chart1: TChart; 24 23 Chart1LineSeries1: TLineSeries; … … 44 43 ListView1: TListView; 45 44 ListView2: TListView; 45 MainMenu1: TMainMenu; 46 46 Memo1: TMemo; 47 MenuItem1: TMenuItem; 48 MenuItem2: TMenuItem; 49 MenuItem3: TMenuItem; 47 50 PageControl1: TPageControl; 48 51 PersistentForm1: TPersistentForm; … … 56 59 procedure ButtonIntervalLeftClick(Sender: TObject); 57 60 procedure ButtonIntervalRightClick(Sender: TObject); 58 procedure ButtonLoadClick(Sender: TObject);59 61 procedure CheckBoxShowResultChange(Sender: TObject); 60 62 procedure ComboBoxEanSelect(Sender: TObject); … … 65 67 procedure FormDestroy(Sender: TObject); 66 68 procedure FormShow(Sender: TObject); 69 procedure MenuItem2Click(Sender: TObject); 70 procedure MenuItem3Click(Sender: TObject); 67 71 procedure TabSheetOverviewShow(Sender: TObject); 68 72 procedure TabSheetChartShow(Sender: TObject); … … 72 76 procedure Translator1Translate(Sender: TObject); 73 77 private 74 Eans: TEans;75 78 IntervalFrom: TDateTime; 76 79 IntervalTo: TDateTime; … … 80 83 OwnersFileName: string; 81 84 ShowResult: Boolean; 82 function FileNameFilter(FileName: string): Boolean; 85 EdcProject: TEdcProject; 86 procedure LoadReports; 83 87 function MeasureToFloat(Value: Double; Interval: Double): Double; 84 88 function MeasureToStr(Value: Double): string; 85 procedure CreateEan(Number, Owner: string; Kind: TEanKind);86 89 procedure LoadConfig; 87 90 procedure Report; 88 91 procedure ReloadListViewOverview; 89 92 procedure ReloadListViewData; 90 procedure LoadOwners(FileName: string);91 procedure LoadEdcReport(FileName: string);92 93 procedure ReloadChart; 93 94 function GetIntervalLength: TDateTime; … … 113 114 114 115 resourcestring 115 STotalSupply = 'Total supply';116 STotalConsumtion = 'Total consumption';117 116 SEAN = 'EAN'; 118 117 SOwner = 'Owner'; … … 124 123 SMonth = 'Month'; 125 124 SYear = 'Year'; 126 SWrongFileFormat = 'Wrong file format';127 125 128 126 { TFormMain } 129 130 function TFormMain.FileNameFilter(FileName: string): Boolean;131 begin132 Result := ExtractFileExt(FileName) = '.csv';133 end;134 135 procedure TFormMain.ButtonLoadClick(Sender: TObject);136 var137 Reports: TStringList;138 I: Integer;139 begin140 LoadOwners(OwnersFileName);141 142 Reports := TStringList.Create;143 try144 SearchFiles(Reports, ReportsDir, FileNameFilter);145 for I := 0 to Reports.Count - 1 do146 LoadEdcReport(Reports[I]);147 finally148 Reports.Free;149 end;150 151 for I := 0 to Eans.Count - 1 do152 Eans[I].Values.Sort(TComparer<TEanValue>.Construct(Eans[I].Values.Comparer));153 154 CreateEan('', STotalSupply, ekSupply);155 CreateEan('', STotalConsumtion, ekConsumption);156 157 if (Eans.Count > 0) and (Eans[0].Values.Count > 0) then158 IntervalTo := Eans[0].Values.Last.Time + 15 * OneMinute;159 UpdateInterval;160 UpdateInterface;161 end;162 127 163 128 procedure TFormMain.CheckBoxShowResultChange(Sender: TObject); … … 212 177 begin 213 178 PageControl1.TabIndex := 0; 214 E ans := TEans.Create;179 EdcProject := TEdcProject.Create; 215 180 LoadConfig; 216 181 end; … … 219 184 begin 220 185 SaveConfig; 221 FreeAndNil(E ans);186 FreeAndNil(EdcProject); 222 187 end; 223 188 224 189 procedure TFormMain.FormShow(Sender: TObject); 225 190 begin 226 ButtonLoadClick(nil); 191 LoadReports; 192 end; 193 194 procedure TFormMain.MenuItem2Click(Sender: TObject); 195 begin 196 LoadReports; 197 end; 198 199 procedure TFormMain.MenuItem3Click(Sender: TObject); 200 begin 201 EdcProject.SpotPrices.LoadSpotPrices(StrToDate('1.4.2026')); 227 202 end; 228 203 … … 234 209 procedure TFormMain.TabSheetChartShow(Sender: TObject); 235 210 begin 236 Eans.LoadToStrings(ComboBoxEan.Items, True); 237 if (ComboBoxEan.Items.Count > 1) and (ComboBoxEan.ItemIndex = -1) then ComboBoxEan.ItemIndex := 1; 238 Eans.LoadToStrings(ComboBoxEan2.Items, True); 239 Eans.LoadToStrings(ComboBoxEan3.Items, True); 211 EdcProject.Eans.LoadToStrings(ComboBoxEan.Items, True); 212 if (ComboBoxEan.Items.Count > 1) and (ComboBoxEan.ItemIndex = -1) then 213 ComboBoxEan.ItemIndex := 1; 214 EdcProject.Eans.LoadToStrings(ComboBoxEan2.Items, True); 215 EdcProject.Eans.LoadToStrings(ComboBoxEan3.Items, True); 240 216 ReloadChart; 241 217 end; … … 243 219 procedure TFormMain.TabSheetDataShow(Sender: TObject); 244 220 begin 245 E ans.LoadToStrings(ComboBoxEanData.Items);221 EdcProject.Eans.LoadToStrings(ComboBoxEanData.Items); 246 222 if (ComboBoxEanData.Items.Count > 0) and (ComboBoxEanData.ItemIndex = -1) then 247 223 ComboBoxEanData.ItemIndex := 0; … … 272 248 ComboBoxPeriod.Items[Integer(prYear)] := SYear; 273 249 Ean.Translate; 250 end; 251 252 procedure TFormMain.LoadReports; 253 begin 254 EdcProject.LoadFromFile(OwnersFileName); 255 EdcProject.Import(ReportsDir); 256 257 if (EdcProject.Eans.Count > 0) and (EdcProject.Eans[0].Values.Count > 0) then 258 IntervalTo := EdcProject.Eans[0].Values.Last.Time + 15 * OneMinute; 259 UpdateInterval; 260 UpdateInterface; 274 261 end; 275 262 … … 290 277 end; 291 278 292 procedure TFormMain.CreateEan(Number, Owner: string; Kind: TEanKind);293 var294 Ean: TEan;295 Values: TDictionary<TDateTime, TEanValue>;296 ValuesArray: TArray<TPair<TDateTime, TEanValue>>;297 I: Integer;298 E: Integer;299 Value: TEanValue;300 begin301 Ean := TEan.Create;302 Ean.Number := Number;303 Ean.Owner := Owner;304 Ean.Kind := Kind;305 306 Values := TDictionary<TDateTime, TEanValue>.Create;307 for E := 0 to Eans.Count - 1 do308 if Eans[E].Kind = Kind then begin309 for I := 0 to Eans[E].Values.Count - 1 do begin310 if Values.TryGetValue(Eans[E].Values[I].Time, Value) then begin311 Value.ValueIn := Value.ValueIn + Eans[E].Values[I].ValueIn;312 Value.ValueOut := Value.ValueOut + Eans[E].Values[I].ValueOut;313 Values[Eans[E].Values[I].Time] := Value;314 end else begin315 Values.Add(Eans[E].Values[I].Time, TEanValue.Create(0, Eans[E].Values[I].ValueIn, Eans[E].Values[I].ValueOut));316 end;317 end;318 end;319 320 ValuesArray := Values.ToArray;321 for I := 0 to Values.Count - 1 do begin322 Ean.Values.Add(TEanValue.Create(ValuesArray[I].Key, ValuesArray[I].Value.ValueIn, ValuesArray[I].Value.ValueOut));323 end;324 Ean.Values.Sort(TComparer<TEanValue>.Construct(Ean.Values.Comparer));325 326 Values.Free;327 328 Eans.Add(Ean);329 end;330 331 279 procedure TFormMain.Report; 332 280 var … … 337 285 try 338 286 Memo1.Lines.Clear; 339 for I := 0 to Eans.Count - 1 do begin 340 Memo1.Lines.Add(SEAN + ': ' + Eans[I].Number); 341 Memo1.Lines.Add(SOwner + ': ' + Eans[I].Owner); 342 TotalIn := Eans[I].GetTotalIn(IntervalFrom, IntervalTo); 343 TotalOut := Eans[I].GetTotalOut(IntervalFrom, IntervalTo); 287 for I := 0 to EdcProject.Eans.Count - 1 do 288 with EdcProject.Eans[I] do begin 289 Memo1.Lines.Add(SEAN + ': ' + Number); 290 Memo1.Lines.Add(SOwner + ': ' + Owner); 291 TotalIn := GetTotalIn(IntervalFrom, IntervalTo); 292 TotalOut := GetTotalOut(IntervalFrom, IntervalTo); 344 293 Memo1.Lines.Add(SMeasured + ': ' + IntToStr(Trunc(TotalIn))); 345 294 Memo1.Lines.Add(SResult + ': ' + IntToStr(Trunc(TotalOut))); 346 295 if TotalIn <> 0 then 347 Memo1.Lines.Add(SShared + ': ' + IntToStr(Trunc( Eans[I].GetShared(IntervalFrom, IntervalTo))) + ' %');296 Memo1.Lines.Add(SShared + ': ' + IntToStr(Trunc(GetShared(IntervalFrom, IntervalTo))) + ' %'); 348 297 Memo1.Lines.Add(''); 349 298 end; … … 361 310 try 362 311 ListView1.Items.Clear; 363 for I := 0 to E ans.Count - 1 do364 with E ans[I] do begin312 for I := 0 to EdcProject.Eans.Count - 1 do 313 with EdcProject.Eans[I] do begin 365 314 ListItem := ListView1.Items.Add; 366 315 ListItem.Caption := Number; … … 401 350 ListView2.EndUpdate; 402 351 end; 403 end;404 end;405 406 procedure TFormMain.LoadOwners(FileName: string);407 var408 Ean: TEan;409 Doc: TXMLDocument;410 RootNode: TDOMNode;411 NewNode: TDOMNode;412 Node2: TDOMNode;413 const414 EdcProjectName = 'EdcProject';415 EansName = 'Eans';416 EanName = 'Ean';417 begin418 ReadXMLFile(Doc, FileName);419 Eans.Clear;420 with Doc do421 try422 if Doc.DocumentElement.NodeName <> EdcProjectName then423 raise Exception.Create(SWrongFileFormat);424 RootNode := Doc.DocumentElement;425 426 NewNode := RootNode.FindNode(EansName);427 if Assigned(NewNode) then begin428 Node2 := NewNode.FirstChild;429 while Assigned(Node2) and (Node2.NodeName = EanName) do begin430 Ean := TEan.Create;431 Ean.Number := ReadString(Node2, 'Number', '');432 Ean.Owner := ReadString(Node2, 'Owner', '');433 Ean.DistributionTariff := ReadString(Node2, 'DistributionTariff', '');434 Ean.PriceLow := ReadDouble(Node2, 'PriceLow', 0);435 Ean.PriceHigh := ReadDouble(Node2, 'PriceHigh', 0);436 Ean.PriceSpot := ReadDouble(Node2, 'PriceSpot', 0);437 Eans.Add(Ean);438 Node2 := Node2.NextSibling;439 end;440 end;441 finally442 FreeAndNil(Doc);443 end;444 end;445 446 procedure TFormMain.LoadEdcReport(FileName: string);447 var448 R: Integer;449 C: Integer;450 CSVDoc: TCSVDocument;451 TimeFrom: TDateTime;452 TimeTo: TDateTime;453 CellValueIn: Double;454 CellValueOut: Double;455 Ean: TEan;456 EanKind: TEanKind;457 Number: string;458 BufferedFileStream: TBufferedFileStream;459 begin460 CSVDoc := TCSVDocument.Create;461 try462 CSVDoc.Delimiter := ';';463 //BufferedFileStream := TBufferedFileStream.Create(FileName, fmOpenRead);464 //CSVDoc.LoadFromStream(BufferedFileStream);465 CSVDoc.LoadFromFile(FileName);466 //BufferedFileStream.Free;467 468 for C := 0 to ((CSVDoc.ColCount[0] - 3) div 2) - 1 do begin469 Number := CSVDoc.Cells[3 + C * 2, 0];470 if Copy(Number, 1, 3) = 'IN-' then Number := Copy(Number, 4, MaxInt);471 if Copy(Number, 1, 4) = 'OUT-' then Number := Copy(Number, 5, MaxInt);472 if Copy(Number, Length(Number) - 1, 2) = '-D' then begin473 EanKind := ekSupply;474 Number := Copy(Number, 1, Length(Number) - 2);475 end;476 if Copy(Number, Length(Number) - 1, 2) = '-O' then begin477 EanKind := ekConsumption;478 Number := Copy(Number, 1, Length(Number) - 2);479 end;480 Ean := Eans.SearchByNumber(Number);481 if not Assigned(Ean) then begin482 Ean := TEan.Create;483 Ean.Number := Number;484 Eans.Add(Ean);485 end;486 Ean.Kind := EanKind;487 488 for R := 1 to CSVDoc.RowCount - 1 do begin489 TimeFrom := StrToDate(CSVDoc.Cells[0, R]) + StrToTime(CSVDoc.Cells[1, R]);490 TimeTo := StrToDate(CSVDoc.Cells[0, R]) + StrToTime(CSVDoc.Cells[2, R]);491 492 CellValueIn := 0;493 if TryStrToFloat(CSVDoc.Cells[3 + C * 2, R], CellValueIn) then begin494 if EanKind = ekConsumption then CellValueIn := -CellValueIn;495 end;496 497 CellValueOut := 0;498 if TryStrToFloat(CSVDoc.Cells[3 + C * 2 + 1, R], CellValueOut) then begin499 if EanKind = ekConsumption then CellValueOut := -CellValueOut;500 end;501 502 Ean.Values.Add(TEanValue.Create(TimeFrom, CellValueIn, CellValueOut));503 end;504 end;505 finally506 CSVDoc.Free;507 352 end; 508 353 end;
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/edc-stats/chrome/site/your_project_logo.png)