Changeset 5 for trunk/FormMain.pas


Ignore:
Timestamp:
Apr 13, 2026, 9:08:21 AM (2 weeks ago)
Author:
chronos
Message:
  • Modified: Load Owners from XML file with additional information about prices.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/FormMain.pas

    r4 r5  
    77  EditBtn, TAGraph, TASeries, Generics.Collections, Generics.Defaults,
    88  DateUtils, Ean, Translator, ApplicationInfo, RegistryEx, PersistentForm,
    9   Theme, Common;
     9  Theme, Common, XML, DOM, XMLRead, XMLWrite;
    1010
    1111type
     
    110110
    111111uses
    112   csvdocument;
     112  csvdocument, BufferedFileStream;
    113113
    114114resourcestring
     
    124124  SMonth = 'Month';
    125125  SYear = 'Year';
     126  SWrongFileFormat = 'Wrong file format';
    126127
    127128{ TFormMain }
     
    140141
    141142  Reports := TStringList.Create;
    142   SearchFiles(Reports, ReportsDir, FileNameFilter);
    143   for I := 0 to Reports.Count - 1 do
    144     LoadEdcReport(Reports[I]);
    145   Reports.Free;
     143  try
     144    SearchFiles(Reports, ReportsDir, FileNameFilter);
     145    for I := 0 to Reports.Count - 1 do
     146      LoadEdcReport(Reports[I]);
     147  finally
     148    Reports.Free;
     149  end;
    146150
    147151  for I := 0 to Eans.Count - 1 do
     
    151155  CreateEan('', STotalConsumtion, ekConsumption);
    152156
    153   IntervalTo := Eans[0].Values.Last.Time + 15 * OneMinute;
     157  if (Eans.Count > 0) and (Eans[0].Values.Count > 0) then
     158    IntervalTo := Eans[0].Values.Last.Time + 15 * OneMinute;
    154159  UpdateInterval;
    155160  UpdateInterface;
     
    356361  try
    357362    ListView1.Items.Clear;
    358     for I := 0 to Eans.Count - 1 do begin
     363    for I := 0 to Eans.Count - 1 do
     364    with Eans[I] do begin
    359365      ListItem := ListView1.Items.Add;
    360       ListItem.Caption := Eans[I].Number;
    361       ListItem.SubItems.Add(Eans[I].Owner);
    362       ListItem.SubItems.Add(MeasureToStr(Eans[I].GetTotalIn(IntervalFrom, IntervalTo)));
    363       ListItem.SubItems.Add(MeasureToStr(Eans[I].GetTotalOut(IntervalFrom, IntervalTo)));
    364       ListItem.SubItems.Add(IntToStr(Trunc(Eans[I].GetShared(IntervalFrom, IntervalTo))));
    365       ListItem.SubItems.Add(EanKindText[Eans[I].Kind]);
     366      ListItem.Caption := Number;
     367      ListItem.SubItems.Add(Owner);
     368      ListItem.SubItems.Add(MeasureToStr(GetTotalIn(IntervalFrom, IntervalTo)));
     369      ListItem.SubItems.Add(MeasureToStr(GetTotalOut(IntervalFrom, IntervalTo)));
     370      ListItem.SubItems.Add(IntToStr(Trunc(GetShared(IntervalFrom, IntervalTo))));
     371      ListItem.SubItems.Add(EanKindText[Kind]);
     372      ListItem.SubItems.Add(FloatToStr(PriceLow));
     373      ListItem.SubItems.Add(FloatToStr(PriceHigh));
     374      ListItem.SubItems.Add(FloatToStr(PriceSpot));
    366375    end;
    367376  finally
     
    397406procedure TFormMain.LoadOwners(FileName: string);
    398407var
    399   Owners: TStringList;
    400408  Ean: TEan;
    401   I: Integer;
    402 begin
    403   Owners := TStringList.Create;
    404   Owners.LoadFromFile(FileName);
     409  Doc: TXMLDocument;
     410  RootNode: TDOMNode;
     411  NewNode: TDOMNode;
     412  Node2: TDOMNode;
     413const
     414  EdcProjectName = 'EdcProject';
     415  EansName = 'Eans';
     416  EanName = 'Ean';
     417begin
     418  ReadXMLFile(Doc, FileName);
    405419  Eans.Clear;
    406   for I := 0 to Owners.Count - 1 do begin
    407     Ean := TEan.Create;
    408     Ean.Number := Owners.Names[I];
    409     Ean.Owner := Owners.ValueFromIndex[I];
    410     Eans.Add(Ean);
    411   end;
    412   Owners.Free;
     420  with Doc do
     421  try
     422    if Doc.DocumentElement.NodeName <> EdcProjectName then
     423      raise Exception.Create(SWrongFileFormat);
     424    RootNode := Doc.DocumentElement;
     425
     426    NewNode := RootNode.FindNode(EansName);
     427    if Assigned(NewNode) then begin
     428      Node2 := NewNode.FirstChild;
     429      while Assigned(Node2) and (Node2.NodeName = EanName) do begin
     430        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  finally
     442    FreeAndNil(Doc);
     443  end;
    413444end;
    414445
     
    425456  EanKind: TEanKind;
    426457  Number: string;
     458  BufferedFileStream: TBufferedFileStream;
    427459begin
    428460  CSVDoc := TCSVDocument.Create;
    429461  try
    430462    CSVDoc.Delimiter := ';';
     463    //BufferedFileStream := TBufferedFileStream.Create(FileName, fmOpenRead);
     464    //CSVDoc.LoadFromStream(BufferedFileStream);
    431465    CSVDoc.LoadFromFile(FileName);
     466    //BufferedFileStream.Free;
    432467
    433468    for C := 0 to ((CSVDoc.ColCount[0] - 3) div 2) - 1 do begin
Note: See TracChangeset for help on using the changeset viewer.