Changeset 8 for trunk


Ignore:
Timestamp:
Apr 13, 2026, 11:12:39 PM (2 weeks ago)
Author:
chronos
Message:
  • Fixed: Data tab populating and refreshing.
  • Fixed: Used currency as decimal type for measured values instead inaccurate double type.
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ean.pas

    r7 r8  
    1313  TEanValue = record
    1414    Time: TDateTime;
    15     ValueIn: Single;
    16     ValueOut: Single;
    17     class function Create(Time: TDateTime; ValueIn, ValueOut: Single): TEanValue; static;
     15    ValueIn: Currency;
     16    ValueOut: Currency;
     17    class function Create(Time: TDateTime; ValueIn, ValueOut: Currency): TEanValue; static;
    1818    function GetShared: Double;
    1919    procedure LoadFromXmlNode(Node: TDOMNode);
     
    4545    function GetTotalOut(TimeFrom, TimeTo: TDateTime): Double;
    4646    function GetShared(TimeFrom, TimeTo: TDateTime): Double;
     47    function GetSavings(TimeFrom, TimeTo: TDateTime): Integer;
    4748    procedure LoadFromXmlNode(Node: TDOMNode);
    4849    procedure SaveToXmlNode(Node: TDOMNode);
     
    8788{ TEanValue }
    8889
    89 class function TEanValue.Create(Time: TDateTime; ValueIn, ValueOut: Single
     90class function TEanValue.Create(Time: TDateTime; ValueIn, ValueOut: Currency
    9091  ): TEanValue;
    9192begin
     
    104105begin
    105106  Time := ReadDateTime(Node, 'Time', Time);
    106   ValueIn := ReadDouble(Node, 'ValueIn', ValueIn);
    107   ValueOut := ReadDouble(Node, 'ValueOut', ValueOut);
     107  ValueIn := ReadCurrency(Node, 'ValueIn', 0);
     108  ValueOut := ReadCurrency(Node, 'ValueOut', 0);
    108109end;
    109110
     
    111112begin
    112113  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);
     114  if ValueIn <> 0 then WriteCurrency(Node, 'ValueIn', ValueIn);
     115  if ValueOut <> 0 then WriteCurrency(Node, 'ValueOut', ValueOut);
    115116end;
    116117
     
    176177  if TotalIn <> 0 then Result := (1 - GetTotalOut(TimeFrom, TimeTo) / TotalIn) * 100
    177178    else Result := 0;
     179end;
     180
     181function TEan.GetSavings(TimeFrom, TimeTo: TDateTime): Integer;
     182var
     183  TotalIn: Double;
     184  TotalOut: Double;
     185begin
     186  TotalIn := GetTotalIn(TimeFrom, TimeTo);
     187  TotalOut := GetTotalOut(TimeFrom, TimeTo);
     188  Result := Trunc((TotalIn - TotalOut) * PriceLow);
    178189end;
    179190
  • trunk/EdcProject.pas

    r7 r8  
    147147  TimeFrom: TDateTime;
    148148  TimeTo: TDateTime;
    149   CellValueIn: Double;
    150   CellValueOut: Double;
     149  CellValueIn: Currency;
     150  CellValueOut: Currency;
    151151  Ean: TEan;
    152152  EanKind: TEanKind;
    153153  Number: string;
     154  A: Currency;
    154155begin
    155156  CSVDoc := TCSVDocument.Create;
     
    186187
    187188        CellValueIn := 0;
    188         if TryStrToFloat(CSVDoc.Cells[3 + C * 2, R], CellValueIn) then begin
     189        if TryStrToCurr(CSVDoc.Cells[3 + C * 2, R], CellValueIn) then begin
    189190          if EanKind = ekConsumption then CellValueIn := -CellValueIn;
    190191        end;
    191192
    192193        CellValueOut := 0;
    193         if TryStrToFloat(CSVDoc.Cells[3 + C * 2 + 1, R], CellValueOut) then begin
     194        if TryStrToCurr(CSVDoc.Cells[3 + C * 2 + 1, R], CellValueOut) then begin
    194195          if EanKind = ekConsumption then CellValueOut := -CellValueOut;
    195196        end;
  • trunk/FormMain.lfm

    r7 r8  
    2020    Top = 56
    2121    Width = 1176
    22     ActivePage = TabSheetOverview
     22    ActivePage = TabSheetData
    2323    Anchors = [akTop, akLeft, akRight, akBottom]
    24     TabIndex = 0
     24    TabIndex = 3
    2525    TabOrder = 0
    2626    object TabSheetOverview: TTabSheet
     
    6262          end       
    6363          item
    64             Caption = 'Low price'
    65             Width = 100
    66           end       
    67           item
    68             Caption = 'High price'
    69             Width = 100
    70           end       
    71           item
    72             Caption = 'Spot price'
    73             Width = 135
     64            Caption = 'Low price [Kč]'
     65            Width = 100
     66          end       
     67          item
     68            Caption = 'High price [Kč]'
     69            Width = 100
     70          end       
     71          item
     72            Caption = 'Spot price [Kč]'
     73            Width = 100
     74          end       
     75          item
     76            Caption = 'Savings [Kč]'
    7477          end>
    7578        PopupMenu = PopupMenuOverview
     
    228231          item
    229232            Caption = 'Time'
    230             Width = 100
     233            Width = 200
    231234          end       
    232235          item
     
    235238          end       
    236239          item
     240            Caption = 'Result'
     241            Width = 100
     242          end       
     243          item
    237244            Caption = 'Shared [%]'
    238             Width = 929
     245            Width = 729
    239246          end>
    240247        ReadOnly = True
     
    258265        Style = csDropDownList
    259266        TabOrder = 1
    260         OnSelect = ComboBoxEanSelect
     267        OnSelect = ComboBoxEanDataSelect
    261268      end
    262269    end
  • trunk/FormMain.lrj

    r7 r8  
    88{"hash":145998637,"name":"tformmain.listview1.columns[4].caption","sourcebytes":[83,104,97,114,101,100,32,91,37,93],"value":"Shared [%]"},
    99{"hash":335940,"name":"tformmain.listview1.columns[5].caption","sourcebytes":[75,105,110,100],"value":"Kind"},
    10 {"hash":158850293,"name":"tformmain.listview1.columns[6].caption","sourcebytes":[76,111,119,32,112,114,105,99,101],"value":"Low price"},
    11 {"hash":175333445,"name":"tformmain.listview1.columns[7].caption","sourcebytes":[72,105,103,104,32,112,114,105,99,101],"value":"High price"},
    12 {"hash":108144885,"name":"tformmain.listview1.columns[8].caption","sourcebytes":[83,112,111,116,32,112,114,105,99,101],"value":"Spot price"},
     10{"hash":237609437,"name":"tformmain.listview1.columns[6].caption","sourcebytes":[76,111,119,32,112,114,105,99,101,32,91,75,196,141,93],"value":"Low price [K\u010D]"},
     11{"hash":221060461,"name":"tformmain.listview1.columns[7].caption","sourcebytes":[72,105,103,104,32,112,114,105,99,101,32,91,75,196,141,93],"value":"High price [K\u010D]"},
     12{"hash":19813853,"name":"tformmain.listview1.columns[8].caption","sourcebytes":[83,112,111,116,32,112,114,105,99,101,32,91,75,196,141,93],"value":"Spot price [K\u010D]"},
     13{"hash":215185821,"name":"tformmain.listview1.columns[9].caption","sourcebytes":[83,97,118,105,110,103,115,32,91,75,196,141,93],"value":"Savings [K\u010D]"},
    1314{"hash":21335,"name":"tformmain.tabsheetlog.caption","sourcebytes":[76,111,103],"value":"Log"},
    1415{"hash":4843668,"name":"tformmain.tabsheetchart.caption","sourcebytes":[67,104,97,114,116],"value":"Chart"},
     
    2021{"hash":372789,"name":"tformmain.listview2.columns[0].caption","sourcebytes":[84,105,109,101],"value":"Time"},
    2122{"hash":193645956,"name":"tformmain.listview2.columns[1].caption","sourcebytes":[77,101,97,115,117,114,101,100],"value":"Measured"},
    22 {"hash":145998637,"name":"tformmain.listview2.columns[2].caption","sourcebytes":[83,104,97,114,101,100,32,91,37,93],"value":"Shared [%]"},
     23{"hash":93105204,"name":"tformmain.listview2.columns[2].caption","sourcebytes":[82,101,115,117,108,116],"value":"Result"},
     24{"hash":145998637,"name":"tformmain.listview2.columns[3].caption","sourcebytes":[83,104,97,114,101,100,32,91,37,93],"value":"Shared [%]"},
    2325{"hash":300570,"name":"tformmain.label4.caption","sourcebytes":[69,65,78,58],"value":"EAN:"},
    2426{"hash":19081,"name":"tformmain.comboboxperiod.text","sourcebytes":[68,97,121],"value":"Day"},
  • trunk/FormMain.pas

    r7 r8  
    6565    procedure ButtonIntervalRightClick(Sender: TObject);
    6666    procedure CheckBoxShowResultChange(Sender: TObject);
     67    procedure ComboBoxEanDataSelect(Sender: TObject);
    6768    procedure ComboBoxEanSelect(Sender: TObject);
    6869    procedure ComboBoxPeriodSelect(Sender: TObject);
     
    139140end;
    140141
     142procedure TFormMain.ComboBoxEanDataSelect(Sender: TObject);
     143begin
     144  ReloadListViewData;
     145end;
     146
    141147procedure TFormMain.ButtonIntervalRightClick(Sender: TObject);
    142148begin
     
    348354      ListItem.SubItems.Add(FloatToStr(PriceHigh));
    349355      ListItem.SubItems.Add(FloatToStr(PriceSpot));
     356      ListItem.SubItems.Add(IntToStr(GetSavings(IntervalFrom, IntervalTo)));
    350357    end;
    351358  finally
     
    367374    ListView2.BeginUpdate;
    368375    try
    369       for I := 0 to Ean.Values.Count - 1 do begin
     376      for I := 0 to Ean.Values.Count - 1 do
     377      with Ean.Values[I] do
     378      if (Time >= IntervalFrom) and (Time < IntervalTo) then begin
    370379        ListItem := ListView2.Items.Add;
    371         ListItem.Caption := DateTimeToStr(Ean.Values[I].Time);
    372         ListItem.SubItems.Add(FloatToStr(Ean.Values[I].ValueIn));
    373         ListItem.SubItems.Add(IntToStr(Trunc(Ean.Values[I].GetShared)));
     380        ListItem.Caption := DateTimeToStr(Time);
     381        ListItem.SubItems.Add(FloatToStr(ValueIn));
     382        ListItem.SubItems.Add(FloatToStr(ValueOut));
     383        ListItem.SubItems.Add(IntToStr(Trunc(GetShared)));
    374384      end;
    375385    finally
  • trunk/Languages/EdcStats.cs.po

    r7 r8  
    154154
    155155#: tformmain.listview1.columns[6].caption
    156 msgid "Low price"
    157 msgstr "Nízka cena"
     156msgid "Low price [Kč]"
     157msgstr "Nízká cena [Kč]"
    158158
    159159#: tformmain.listview1.columns[7].caption
    160 msgid "High price"
    161 msgstr "Vysoká cena"
     160msgid "High price [Kč]"
     161msgstr "Vysoká cena [Kč]"
    162162
    163163#: tformmain.listview1.columns[8].caption
    164 msgid "Spot price"
    165 msgstr "Spotová cena"
     164msgid "Spot price [Kč]"
     165msgstr "Spotová cena [Kč]"
     166
     167#: tformmain.listview1.columns[9].caption
     168msgid "Savings [Kč]"
     169msgstr "Úspory [Kč]"
    166170
    167171#: tformmain.listview2.columns[0].caption
     
    177181#: tformmain.listview2.columns[2].caption
    178182msgctxt "tformmain.listview2.columns[2].caption"
     183msgid "Result"
     184msgstr "Výsledek"
     185
     186#: tformmain.listview2.columns[3].caption
     187msgctxt "tformmain.listview2.columns[3].caption"
    179188msgid "Shared [%]"
    180189msgstr "Sdíleno [%]"
     
    182191#: tformmain.menuitemfile.caption
    183192msgid "File"
    184 msgstr ""
     193msgstr "Soubor"
    185194
    186195#: tformmain.menuitemimportreports.caption
    187196msgid "Import reports"
    188 msgstr ""
     197msgstr "Import hlášení"
    189198
    190199#: tformmain.menuitemimportspotprices.caption
    191200msgctxt "tformmain.menuitemimportspotprices.caption"
    192201msgid "Import spot prices"
    193 msgstr ""
     202msgstr "Import spotových cen"
    194203
    195204#: tformmain.menuitemload.caption
    196205msgid "Load"
    197 msgstr ""
     206msgstr "Načíst"
    198207
    199208#: tformmain.menuitemremove.caption
    200209msgid "Remove"
    201 msgstr ""
     210msgstr "Odstranit"
    202211
    203212#: tformmain.menuitemsave.caption
    204213msgid "Save"
    205 msgstr ""
     214msgstr "Uložit"
    206215
    207216#: tformmain.menuitemtools.caption
    208 #, fuzzy
    209217msgctxt "tformmain.menuitemtools.caption"
    210218msgid "Tools"
     
    227235msgid "Overview"
    228236msgstr "Přehled"
    229 
  • trunk/Languages/EdcStats.pot

    r7 r8  
    144144
    145145#: tformmain.listview1.columns[6].caption
    146 msgid "Low price"
     146msgid "Low price [Kč]"
    147147msgstr ""
    148148
    149149#: tformmain.listview1.columns[7].caption
    150 msgid "High price"
     150msgid "High price [Kč]"
    151151msgstr ""
    152152
    153153#: tformmain.listview1.columns[8].caption
    154 msgid "Spot price"
     154msgid "Spot price [Kč]"
     155msgstr ""
     156
     157#: tformmain.listview1.columns[9].caption
     158msgid "Savings [Kč]"
    155159msgstr ""
    156160
     
    167171#: tformmain.listview2.columns[2].caption
    168172msgctxt "tformmain.listview2.columns[2].caption"
     173msgid "Result"
     174msgstr ""
     175
     176#: tformmain.listview2.columns[3].caption
     177msgctxt "tformmain.listview2.columns[3].caption"
    169178msgid "Shared [%]"
    170179msgstr ""
  • trunk/Packages/Common/XML.pas

    r7 r8  
    1515procedure WriteDateTime(Node: TDOMNode; Name: string; Value: TDateTime);
    1616procedure WriteDouble(Node: TDOMNode; Name: string; Value: Double);
     17procedure WriteCurrency(Node: TDOMNode; Name: string; Value: Currency);
    1718function ReadInteger(Node: TDOMNode; Name: string; DefaultValue: Integer): Integer;
    1819function ReadInt64(Node: TDOMNode; Name: string; DefaultValue: Int64): Int64;
     
    2122function ReadDateTime(Node: TDOMNode; Name: string; DefaultValue: TDateTime): TDateTime;
    2223function ReadDouble(Node: TDOMNode; Name: string; DefaultValue: Double): Double;
     24function ReadCurrency(Node: TDOMNode; Name: string; DefaultValue: Currency): Currency;
    2325procedure ReadXMLFileParser(out Doc: TXMLDocument; FileName: string);
    2426
     
    6062  if Assigned(NewNode) then
    6163    Result := StrToFloat(string(NewNode.TextContent), XmlFormatSettings);
     64end;
     65
     66function ReadCurrency(Node: TDOMNode; Name: string; DefaultValue: Currency
     67  ): Currency;
     68var
     69  NewNode: TDOMNode;
     70begin
     71  Result := DefaultValue;
     72  NewNode := Node.FindNode(DOMString(Name));
     73  if Assigned(NewNode) then
     74    Result := StrToCurr(string(NewNode.TextContent), XmlFormatSettings);
    6275end;
    6376
     
    247260end;
    248261
     262procedure WriteCurrency(Node: TDOMNode; Name: string; Value: Currency);
     263var
     264  NewNode: TDOMNode;
     265begin
     266  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     267  NewNode.TextContent := DOMString(CurrToStr(Value, XmlFormatSettings));
     268  Node.AppendChild(NewNode);
     269end;
     270
    249271function ReadInteger(Node: TDOMNode; Name: string; DefaultValue: Integer): Integer;
    250272var
Note: See TracChangeset for help on using the changeset viewer.