Changeset 7 for trunk/Ean.pas


Ignore:
Timestamp:
Apr 13, 2026, 7:11:03 PM (2 weeks ago)
Author:
chronos
Message:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ean.pas

    r6 r7  
    1717    class function Create(Time: TDateTime; ValueIn, ValueOut: Single): TEanValue; static;
    1818    function GetShared: Double;
     19    procedure LoadFromXmlNode(Node: TDOMNode);
     20    procedure SaveToXmlNode(Node: TDOMNode);
    1921  end;
    2022
     
    2325  TEanValues = class(TList<TEanValue>)
    2426    function Comparer(constref Left, Right: TEanValue): Integer;
     27    procedure LoadFromXmlNode(Node: TDOMNode);
     28    procedure SaveToXmlNode(Node: TDOMNode);
    2529  end;
    2630
     
    5155  TEans = class(TObjectList<TEan>)
    5256    function SearchByNumber(Number: string): TEan;
     57    function SearchByOwner(Owner: string): TEan;
    5358    procedure LoadToStrings(Strings: TStrings; AllowNone: Boolean = False);
    5459    procedure LoadFromXmlNode(Node: TDOMNode);
     
    6469  EansName = 'Eans';
    6570  EanName = 'Ean';
     71  EanValueName = 'EanValue';
     72  EanValuesName = 'EanValues';
    6673
    6774
     
    94101end;
    95102
     103procedure TEanValue.LoadFromXmlNode(Node: TDOMNode);
     104begin
     105  Time := ReadDateTime(Node, 'Time', Time);
     106  ValueIn := ReadDouble(Node, 'ValueIn', ValueIn);
     107  ValueOut := ReadDouble(Node, 'ValueOut', ValueOut);
     108end;
     109
     110procedure TEanValue.SaveToXmlNode(Node: TDOMNode);
     111begin
     112  if Time <> 0 then WriteDateTime(Node, 'Time', Time);
     113  if ValueIn <> 0 then WriteDouble(Node, 'ValueIn', ValueIn);
     114  if ValueOut <> 0 then WriteDouble(Node, 'ValueOut', ValueOut);
     115end;
     116
    96117{ TEanValues }
    97118
     
    99120begin
    100121  Result := CompareDateTime(Left.Time, Right.Time);
     122end;
     123
     124procedure TEanValues.LoadFromXmlNode(Node: TDOMNode);
     125var
     126  Node2: TDOMNode;
     127  EanValue: TEanValue;
     128begin
     129  Node2 := Node.FirstChild;
     130  while Assigned(Node2) and (Node2.NodeName = EanValueName) do begin
     131    EanValue.LoadFromXmlNode(Node2);
     132    Add(EanValue);
     133    Node2 := Node2.NextSibling;
     134  end;
     135end;
     136
     137procedure TEanValues.SaveToXmlNode(Node: TDOMNode);
     138var
     139  Node2: TDOMNode;
     140  I: Integer;
     141begin
     142  for I := 0 to Count - 1 do begin
     143    Node2 := Node.OwnerDocument.CreateElement(EanValueName);
     144    Items[I].SaveToXmlNode(Node2);
     145    Node.AppendChild(Node2);
     146  end;
    101147end;
    102148
     
    133179
    134180procedure TEan.LoadFromXmlNode(Node: TDOMNode);
     181var
     182  NewNode: TDOMNode;
    135183begin
    136184  Number := ReadString(Node, 'Number', Number);
     
    140188  PriceHigh := ReadDouble(Node, 'PriceHigh', PriceHigh);
    141189  PriceSpot := ReadDouble(Node, 'PriceSpot', PriceSpot);
     190  Kind := TEanKind(ReadInteger(Node, 'Kind', Integer(Kind)));
     191
     192  NewNode := Node.FindNode(EanValuesName);
     193  if Assigned(NewNode) then
     194    Values.LoadFromXmlNode(NewNode);
    142195end;
    143196
    144197procedure TEan.SaveToXmlNode(Node: TDOMNode);
    145 begin
    146   WriteString(Node, 'Number', Number);
    147   WriteString(Node, 'Owner', Owner);
    148   WriteString(Node, 'DistributionTariff', DistributionTariff);
    149   WriteDouble(Node, 'PriceLow', PriceLow);
    150   WriteDouble(Node, 'PriceHigh', PriceHigh);
    151   WriteDouble(Node, 'PriceSpot', PriceSpot);
     198var
     199  NewNode: TDOMNode;
     200begin
     201  if Number <> '' then WriteString(Node, 'Number', Number);
     202  if Owner <> '' then WriteString(Node, 'Owner', Owner);
     203  if DistributionTariff <> '' then WriteString(Node, 'DistributionTariff', DistributionTariff);
     204  if PriceLow <> 0 then WriteDouble(Node, 'PriceLow', PriceLow);
     205  if PriceHigh <> 0 then WriteDouble(Node, 'PriceHigh', PriceHigh);
     206  if PriceSpot <> 0 then WriteDouble(Node, 'PriceSpot', PriceSpot);
     207  WriteInteger(Node, 'Kind', Integer(Kind));
     208
     209  if Values.Count > 0 then begin
     210    NewNode := Node.OwnerDocument.CreateElement(EanValuesName);
     211    Node.AppendChild(NewNode);
     212    Values.SaveToXmlNode(NewNode);
     213  end;
    152214end;
    153215
     
    171233  I := 0;
    172234  while (I < Count) and (Items[I].Number <> Number) do Inc(I);
     235  if I < Count then Result := Items[I]
     236    else Result := nil;
     237end;
     238
     239function TEans.SearchByOwner(Owner: string): TEan;
     240var
     241  I: Integer;
     242begin
     243  I := 0;
     244  while (I < Count) and (Items[I].Owner <> Owner) do Inc(I);
    173245  if I < Count then Result := Items[I]
    174246    else Result := nil;
Note: See TracChangeset for help on using the changeset viewer.