Changeset 9 for trunk/Ean.pas


Ignore:
Timestamp:
Apr 14, 2026, 12:57:08 PM (2 weeks ago)
Author:
chronos
Message:
  • Modified: Loading of spot prices and calculation prices for each EAN.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ean.pas

    r8 r9  
    55uses
    66  Classes, SysUtils, Generics.Collections, Generics.Defaults, DateUtils, DOM,
    7   XML;
     7  XML, SpotPrice;
    88
    99type
     
    4545    function GetTotalOut(TimeFrom, TimeTo: TDateTime): Double;
    4646    function GetShared(TimeFrom, TimeTo: TDateTime): Double;
    47     function GetSavings(TimeFrom, TimeTo: TDateTime): Integer;
     47    function GetSharedPercent(TimeFrom, TimeTo: TDateTime): Double;
     48    function GetSavings(TimeFrom, TimeTo: TDateTime; SpotPrices: TSpotPrices): Currency;
     49    function GetPrice(TimeFrom, TimeTo: TDateTime; SpotPrices: TSpotPrices): Currency;
    4850    procedure LoadFromXmlNode(Node: TDOMNode);
    4951    procedure SaveToXmlNode(Node: TDOMNode);
     
    173175var
    174176  TotalIn: Double;
     177  TotalOut: Double;
     178begin
     179  TotalIn := GetTotalIn(TimeFrom, TimeTo);
     180  TotalOut := GetTotalOut(TimeFrom, TimeTo);
     181  if TotalIn <> 0 then Result := TotalIn - TotalOut
     182    else Result := 0;
     183end;
     184
     185function TEan.GetSharedPercent(TimeFrom, TimeTo: TDateTime): Double;
     186var
     187  TotalIn: Double;
    175188begin
    176189  TotalIn := GetTotalIn(TimeFrom, TimeTo);
     
    179192end;
    180193
    181 function TEan.GetSavings(TimeFrom, TimeTo: TDateTime): Integer;
     194function TEan.GetSavings(TimeFrom, TimeTo: TDateTime; SpotPrices: TSpotPrices): Currency;
    182195var
    183196  TotalIn: Double;
    184197  TotalOut: Double;
    185 begin
    186   TotalIn := GetTotalIn(TimeFrom, TimeTo);
    187   TotalOut := GetTotalOut(TimeFrom, TimeTo);
    188   Result := Trunc((TotalIn - TotalOut) * PriceLow);
     198  I: Integer;
     199  SpotPrice: TSpotPrice;
     200begin
     201    if PriceLow = 0 then begin
     202    Result := 0;
     203    for I := 0 to Values.Count - 1 do
     204      if (Values[I].Time >= TimeFrom) and (Values[I].Time < TimeTo) then begin
     205        SpotPrice := SpotPrices.SearchByTime(Values[I].Time);
     206        if SpotPrice.Value <> 0 then
     207          Result := Result + (Values[I].ValueIn - Values[I].ValueOut) * (SpotPrice.Value - PriceSpot);
     208      end;
     209  end else begin
     210    TotalIn := GetTotalIn(TimeFrom, TimeTo);
     211    TotalOut := GetTotalOut(TimeFrom, TimeTo);
     212    Result := (TotalIn - TotalOut) * PriceLow;
     213  end;
     214end;
     215
     216function TEan.GetPrice(TimeFrom, TimeTo: TDateTime; SpotPrices: TSpotPrices): Currency;
     217var
     218  I: Integer;
     219  SpotPrice: TSpotPrice;
     220begin
     221  if PriceLow = 0 then begin
     222    Result := 0;
     223    for I := 0 to Values.Count - 1 do
     224      if (Values[I].Time >= TimeFrom) and (Values[I].Time < TimeTo) then begin
     225        SpotPrice := SpotPrices.SearchByTime(Values[I].Time);
     226        if SpotPrice.Value <> 0 then
     227          Result := Result + Values[I].ValueIn * (SpotPrice.Value - PriceSpot);
     228      end;
     229  end else Result := GetTotalIn(TimeFrom, TimeTo) * PriceLow;
    189230end;
    190231
Note: See TracChangeset for help on using the changeset viewer.