Changeset 9 for trunk


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.
Location:
trunk
Files:
8 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
  • trunk/EdcProject.pas

    r8 r9  
    2020    SpotPrices: TSpotPrices;
    2121    Eans: TEans;
    22     procedure Import(ReportsDir: string);
     22    procedure ImportReports(ReportsDir: string);
    2323    procedure LoadFromFile(FileName: string);
    2424    procedure SaveToFile(FileName: string);
     
    4343end;
    4444
    45 procedure TEdcProject.Import(ReportsDir: string);
     45procedure TEdcProject.ImportReports(ReportsDir: string);
    4646var
    4747  Reports: TStringList;
     
    6262  for I := 0 to Eans.Count - 1 do
    6363    Eans[I].Values.Sort(TComparer<TEanValue>.Construct(Eans[I].Values.Comparer));
    64 
    6564
    6665  CreateEan('', STotalSupply, ekSupply);
  • trunk/FormMain.lfm

    r8 r9  
    11object FormMain: TFormMain
    2   Left = 367
     2  Left = 362
    33  Height = 884
    4   Top = 361
     4  Top = 356
    55  Width = 1203
    66  Caption = 'EDC Stats'
     
    2020    Top = 56
    2121    Width = 1176
    22     ActivePage = TabSheetData
     22    ActivePage = TabSheetSpotPrices
    2323    Anchors = [akTop, akLeft, akRight, akBottom]
    24     TabIndex = 3
     24    TabIndex = 4
    2525    TabOrder = 0
    2626    object TabSheetOverview: TTabSheet
     
    2929      ClientWidth = 1166
    3030      OnShow = TabSheetOverviewShow
    31       object ListView1: TListView
     31      object ListViewOverview: TListView
    3232        Left = 8
    3333        Height = 763
     
    5050          end       
    5151          item
    52             Caption = 'Result'
     52            Caption = 'Shared'
    5353            Width = 100
    5454          end       
     
    7474          end       
    7575          item
     76            Caption = 'Price [Kč]'
     77            Width = 100
     78          end       
     79          item
    7680            Caption = 'Savings [Kč]'
     81            Width = 100
     82          end       
     83          item
     84            Caption = 'Tariff'
     85            Width = 100
    7786          end>
    7887        PopupMenu = PopupMenuOverview
     
    220229      ClientWidth = 1166
    221230      OnShow = TabSheetDataShow
    222       object ListView2: TListView
     231      object ListViewData: TListView
    223232        Left = 16
    224233        Height = 696
     
    266275        TabOrder = 1
    267276        OnSelect = ComboBoxEanDataSelect
     277      end
     278    end
     279    object TabSheetSpotPrices: TTabSheet
     280      Caption = 'Spot prices'
     281      ClientHeight = 779
     282      ClientWidth = 1166
     283      OnShow = TabSheetSpotPricesShow
     284      object ListViewSpotPrices: TListView
     285        Left = 16
     286        Height = 760
     287        Top = 8
     288        Width = 1144
     289        Align = alCustom
     290        Anchors = [akTop, akLeft, akRight, akBottom]
     291        BorderSpacing.Around = 8
     292        Columns = <       
     293          item
     294            Caption = 'Time'
     295            Width = 200
     296          end       
     297          item
     298            Caption = 'Value [Kč]'
     299            Width = 929
     300          end>
     301        ReadOnly = True
     302        RowSelect = True
     303        TabOrder = 0
     304        ViewStyle = vsReport
    268305      end
    269306    end
  • trunk/FormMain.lrj

    r8 r9  
    22{"hash":89841971,"name":"tformmain.caption","sourcebytes":[69,68,67,32,83,116,97,116,115],"value":"EDC Stats"},
    33{"hash":214551207,"name":"tformmain.tabsheetoverview.caption","sourcebytes":[79,118,101,114,118,105,101,119],"value":"Overview"},
    4 {"hash":18782,"name":"tformmain.listview1.columns[0].caption","sourcebytes":[69,65,78],"value":"EAN"},
    5 {"hash":5694658,"name":"tformmain.listview1.columns[1].caption","sourcebytes":[79,119,110,101,114],"value":"Owner"},
    6 {"hash":193645956,"name":"tformmain.listview1.columns[2].caption","sourcebytes":[77,101,97,115,117,114,101,100],"value":"Measured"},
    7 {"hash":93105204,"name":"tformmain.listview1.columns[3].caption","sourcebytes":[82,101,115,117,108,116],"value":"Result"},
    8 {"hash":145998637,"name":"tformmain.listview1.columns[4].caption","sourcebytes":[83,104,97,114,101,100,32,91,37,93],"value":"Shared [%]"},
    9 {"hash":335940,"name":"tformmain.listview1.columns[5].caption","sourcebytes":[75,105,110,100],"value":"Kind"},
    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]"},
     4{"hash":18782,"name":"tformmain.listviewoverview.columns[0].caption","sourcebytes":[69,65,78],"value":"EAN"},
     5{"hash":5694658,"name":"tformmain.listviewoverview.columns[1].caption","sourcebytes":[79,119,110,101,114],"value":"Owner"},
     6{"hash":193645956,"name":"tformmain.listviewoverview.columns[2].caption","sourcebytes":[77,101,97,115,117,114,101,100],"value":"Measured"},
     7{"hash":94275764,"name":"tformmain.listviewoverview.columns[3].caption","sourcebytes":[83,104,97,114,101,100],"value":"Shared"},
     8{"hash":145998637,"name":"tformmain.listviewoverview.columns[4].caption","sourcebytes":[83,104,97,114,101,100,32,91,37,93],"value":"Shared [%]"},
     9{"hash":335940,"name":"tformmain.listviewoverview.columns[5].caption","sourcebytes":[75,105,110,100],"value":"Kind"},
     10{"hash":237609437,"name":"tformmain.listviewoverview.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.listviewoverview.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.listviewoverview.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":118092989,"name":"tformmain.listviewoverview.columns[9].caption","sourcebytes":[80,114,105,99,101,32,91,75,196,141,93],"value":"Price [K\u010D]"},
     14{"hash":215185821,"name":"tformmain.listviewoverview.columns[10].caption","sourcebytes":[83,97,118,105,110,103,115,32,91,75,196,141,93],"value":"Savings [K\u010D]"},
     15{"hash":94932934,"name":"tformmain.listviewoverview.columns[11].caption","sourcebytes":[84,97,114,105,102,102],"value":"Tariff"},
    1416{"hash":21335,"name":"tformmain.tabsheetlog.caption","sourcebytes":[76,111,103],"value":"Log"},
    1517{"hash":4843668,"name":"tformmain.tabsheetchart.caption","sourcebytes":[67,104,97,114,116],"value":"Chart"},
     
    1921{"hash":223734467,"name":"tformmain.checkboxshowresult.caption","sourcebytes":[83,104,111,119,32,114,101,115,117,108,116,115],"value":"Show results"},
    2022{"hash":305313,"name":"tformmain.tabsheetdata.caption","sourcebytes":[68,97,116,97],"value":"Data"},
    21 {"hash":372789,"name":"tformmain.listview2.columns[0].caption","sourcebytes":[84,105,109,101],"value":"Time"},
    22 {"hash":193645956,"name":"tformmain.listview2.columns[1].caption","sourcebytes":[77,101,97,115,117,114,101,100],"value":"Measured"},
    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 [%]"},
     23{"hash":372789,"name":"tformmain.listviewdata.columns[0].caption","sourcebytes":[84,105,109,101],"value":"Time"},
     24{"hash":193645956,"name":"tformmain.listviewdata.columns[1].caption","sourcebytes":[77,101,97,115,117,114,101,100],"value":"Measured"},
     25{"hash":93105204,"name":"tformmain.listviewdata.columns[2].caption","sourcebytes":[82,101,115,117,108,116],"value":"Result"},
     26{"hash":145998637,"name":"tformmain.listviewdata.columns[3].caption","sourcebytes":[83,104,97,114,101,100,32,91,37,93],"value":"Shared [%]"},
    2527{"hash":300570,"name":"tformmain.label4.caption","sourcebytes":[69,65,78,58],"value":"EAN:"},
     28{"hash":119705507,"name":"tformmain.tabsheetspotprices.caption","sourcebytes":[83,112,111,116,32,112,114,105,99,101,115],"value":"Spot prices"},
     29{"hash":372789,"name":"tformmain.listviewspotprices.columns[0].caption","sourcebytes":[84,105,109,101],"value":"Time"},
     30{"hash":117768349,"name":"tformmain.listviewspotprices.columns[1].caption","sourcebytes":[86,97,108,117,101,32,91,75,196,141,93],"value":"Value [K\u010D]"},
    2631{"hash":19081,"name":"tformmain.comboboxperiod.text","sourcebytes":[68,97,121],"value":"Day"},
    2732{"hash":113837354,"name":"tformmain.label2.caption","sourcebytes":[80,101,114,105,111,100,58],"value":"Period:"},
  • trunk/FormMain.pas

    r8 r9  
    4141    Label5: TLabel;
    4242    Label6: TLabel;
    43     ListView1: TListView;
    44     ListView2: TListView;
     43    ListViewOverview: TListView;
     44    ListViewData: TListView;
     45    ListViewSpotPrices: TListView;
    4546    MainMenu1: TMainMenu;
    4647    Memo1: TMemo;
     
    5556    PersistentForm1: TPersistentForm;
    5657    PopupMenuOverview: TPopupMenu;
     58    TabSheetSpotPrices: TTabSheet;
    5759    TabSheetOverview: TTabSheet;
    5860    TabSheetData: TTabSheet;
     
    8385    procedure TabSheetDataShow(Sender: TObject);
    8486    procedure TabSheetLogShow(Sender: TObject);
     87    procedure TabSheetSpotPricesShow(Sender: TObject);
    8588    procedure TimeEdit1Change(Sender: TObject);
    8689    procedure Translator1Translate(Sender: TObject);
     
    9194    Period: TPeriod;
    9295    ReportsDir: string;
     96    SpotPricesDir: string;
    9397    ProjectFileName: string;
    9498    ShowResult: Boolean;
     
    100104    procedure ReloadListViewOverview;
    101105    procedure ReloadListViewData;
     106    procedure ReloadListViewSpotPrices;
    102107    procedure ReloadChart;
    103108    function GetIntervalLength: TDateTime;
     
    209214procedure TFormMain.MenuItemImportReportsClick(Sender: TObject);
    210215begin
    211   EdcProject.Import(ReportsDir);
     216  EdcProject.ImportReports(ReportsDir);
    212217
    213218  if (EdcProject.Eans.Count > 0) and (EdcProject.Eans[0].Values.Count > 0) then
     
    219224procedure TFormMain.MenuItemImportSpotPricesClick(Sender: TObject);
    220225begin
    221   EdcProject.SpotPrices.LoadSpotPrices(StrToDate('1.4.2026'));
     226  EdcProject.SpotPrices.Import(SpotPricesDir);
     227  //EdcProject.SpotPrices.LoadSpotPricesFromWeb(StrToDate('1.4.2026'));
     228  ShowActiveTab;
    222229end;
    223230
     
    234241procedure TFormMain.MenuItemRemoveClick(Sender: TObject);
    235242begin
    236   if Assigned(ListView1.Selected) then
    237     EdcProject.Eans.Remove(ListView1.Selected.Data);
     243  if Assigned(ListViewOverview.Selected) then
     244    EdcProject.Eans.Remove(ListViewOverview.Selected.Data);
    238245  ReloadListViewOverview;
    239246end;
     
    272279end;
    273280
     281procedure TFormMain.TabSheetSpotPricesShow(Sender: TObject);
     282begin
     283  ReloadListViewSpotPrices;
     284end;
     285
    274286procedure TFormMain.TimeEdit1Change(Sender: TObject);
    275287var
     
    305317function TFormMain.MeasureToStr(Value: Double): string;
    306318begin
    307   Result := IntToStr(Trunc(MeasureToFloat(Value, GetIntervalLength * 24)));
     319  Result := CurrToStr(MeasureToFloat(Value, GetIntervalLength * 24));
    308320end;
    309321
     
    325337      Memo1.Lines.Add(SResult + ': ' + IntToStr(Trunc(TotalOut)));
    326338      if TotalIn <> 0 then
    327       Memo1.Lines.Add(SShared + ': ' + IntToStr(Trunc(GetShared(IntervalFrom, IntervalTo))) + ' %');
     339      Memo1.Lines.Add(SShared + ': ' + IntToStr(Trunc(GetSharedPercent(IntervalFrom, IntervalTo))) + ' %');
    328340      Memo1.Lines.Add('');
    329341    end;
     
    338350  I: Integer;
    339351begin
    340   ListView1.BeginUpdate;
     352  ListViewOverview.BeginUpdate;
    341353  try
    342     ListView1.Items.Clear;
     354    ListViewOverview.Items.Clear;
    343355    for I := 0 to EdcProject.Eans.Count - 1 do
    344356    with EdcProject.Eans[I] do begin
    345       ListItem := ListView1.Items.Add;
     357      ListItem := ListViewOverview.Items.Add;
    346358      ListItem.Caption := Number;
    347359      ListItem.Data := EdcProject.Eans[I];
    348360      ListItem.SubItems.Add(Owner);
    349361      ListItem.SubItems.Add(MeasureToStr(GetTotalIn(IntervalFrom, IntervalTo)));
    350       ListItem.SubItems.Add(MeasureToStr(GetTotalOut(IntervalFrom, IntervalTo)));
    351       ListItem.SubItems.Add(IntToStr(Trunc(GetShared(IntervalFrom, IntervalTo))));
     362      ListItem.SubItems.Add(MeasureToStr(GetShared(IntervalFrom, IntervalTo)));
     363      ListItem.SubItems.Add(IntToStr(Trunc(GetSharedPercent(IntervalFrom, IntervalTo))));
    352364      ListItem.SubItems.Add(EanKindText[Kind]);
    353365      ListItem.SubItems.Add(FloatToStr(PriceLow));
    354366      ListItem.SubItems.Add(FloatToStr(PriceHigh));
    355367      ListItem.SubItems.Add(FloatToStr(PriceSpot));
    356       ListItem.SubItems.Add(IntToStr(GetSavings(IntervalFrom, IntervalTo)));
     368      ListItem.SubItems.Add(CurrToStr(GetPrice(IntervalFrom, IntervalTo, EdcProject.SpotPrices)));
     369      ListItem.SubItems.Add(CurrToStr(GetSavings(IntervalFrom, IntervalTo, EdcProject.SpotPrices)));
     370      ListItem.SubItems.Add(DistributionTariff);
    357371    end;
    358372  finally
    359     ListView1.EndUpdate;
     373    ListViewOverview.EndUpdate;
    360374  end;
    361375end;
     
    367381  Ean: TEan;
    368382begin
    369   ListView2.Items.Clear;
     383  ListViewData.Items.Clear;
    370384  if ComboBoxEanData.ItemIndex = -1 then Exit;
    371385  Ean := TEan(ComboBoxEanData.Items.Objects[ComboBoxEanData.ItemIndex]);
    372386
    373387  if Assigned(Ean) then begin
    374     ListView2.BeginUpdate;
     388    ListViewData.BeginUpdate;
    375389    try
    376390      for I := 0 to Ean.Values.Count - 1 do
    377391      with Ean.Values[I] do
    378392      if (Time >= IntervalFrom) and (Time < IntervalTo) then begin
    379         ListItem := ListView2.Items.Add;
     393        ListItem := ListViewData.Items.Add;
    380394        ListItem.Caption := DateTimeToStr(Time);
    381395        ListItem.SubItems.Add(FloatToStr(ValueIn));
     
    384398      end;
    385399    finally
    386       ListView2.EndUpdate;
    387     end;
     400      ListViewData.EndUpdate;
     401    end;
     402  end;
     403end;
     404
     405procedure TFormMain.ReloadListViewSpotPrices;
     406var
     407  ListItem: TListItem;
     408  I: Integer;
     409begin
     410  ListViewSpotPrices.Items.Clear;
     411
     412  ListViewSpotPrices.BeginUpdate;
     413  try
     414    for I := 0 to EdcProject.SpotPrices.Count - 1 do
     415    with EdcProject.SpotPrices[I] do
     416    if (Time >= IntervalFrom) and (Time < IntervalTo) then
     417    begin
     418      ListItem := ListViewSpotPrices.Items.Add;
     419      ListItem.Caption := DateTimeToStr(Time);
     420      ListItem.SubItems.Add(FloatToStr(Value));
     421    end;
     422  finally
     423    ListViewSpotPrices.EndUpdate;
    388424  end;
    389425end;
     
    506542    Period := TPeriod(ReadIntegerWithDefault('Period', Integer(Period)));
    507543    ReportsDir := ReadStringWithDefault('ReportsDir', ReportsDir);
     544    SpotPricesDir := ReadStringWithDefault('SpotPricesDir', SpotPricesDir);
    508545    ProjectFileName := ReadStringWithDefault('ProjectFileName', ProjectFileName);
    509546    PageControl1.TabIndex := ReadIntegerWithDefault('ActiveTab', PageControl1.TabIndex);
     
    528565    WriteInteger('Period', Integer(Period));
    529566    WriteString('ReportsDir', ReportsDir);
     567    WriteString('SpotPricesDir', SpotPricesDir);
    530568    WriteString('ProjectFileName', ProjectFileName);
    531569    WriteInteger('ActiveTab', PageControl1.TabIndex);
  • trunk/Languages/EdcStats.cs.po

    r8 r9  
    6565
    6666#: formmain.sshared
     67msgctxt "formmain.sshared"
    6768msgid "Shared"
    6869msgstr "Sdíleno"
     
    123124msgstr "EAN 3:"
    124125
    125 #: tformmain.listview1.columns[0].caption
    126 msgctxt "tformmain.listview1.columns[0].caption"
     126#: tformmain.listviewdata.columns[0].caption
     127msgctxt "tformmain.listviewdata.columns[0].caption"
     128msgid "Time"
     129msgstr "Čas"
     130
     131#: tformmain.listviewdata.columns[1].caption
     132msgctxt "tformmain.listviewdata.columns[1].caption"
     133msgid "Measured"
     134msgstr "Měřeno"
     135
     136#: tformmain.listviewdata.columns[2].caption
     137msgctxt "tformmain.listviewdata.columns[2].caption"
     138msgid "Result"
     139msgstr "Výsledek"
     140
     141#: tformmain.listviewdata.columns[3].caption
     142msgctxt "tformmain.listviewdata.columns[3].caption"
     143msgid "Shared [%]"
     144msgstr "Sdíleno [%]"
     145
     146#: tformmain.listviewoverview.columns[0].caption
     147msgctxt "tformmain.listviewoverview.columns[0].caption"
    127148msgid "EAN"
    128149msgstr "EAN"
    129150
    130 #: tformmain.listview1.columns[1].caption
    131 msgctxt "tformmain.listview1.columns[1].caption"
     151#: tformmain.listviewoverview.columns[10].caption
     152msgctxt "tformmain.listviewoverview.columns[10].caption"
     153msgid "Savings [Kč]"
     154msgstr "Úspory [Kč]"
     155
     156#: tformmain.listviewoverview.columns[11].caption
     157msgid "Tariff"
     158msgstr "Tarif"
     159
     160#: tformmain.listviewoverview.columns[1].caption
     161msgctxt "tformmain.listviewoverview.columns[1].caption"
    132162msgid "Owner"
    133163msgstr "Vlastník"
    134164
    135 #: tformmain.listview1.columns[2].caption
    136 msgctxt "tformmain.listview1.columns[2].caption"
     165#: tformmain.listviewoverview.columns[2].caption
     166msgctxt "tformmain.listviewoverview.columns[2].caption"
    137167msgid "Measured"
    138168msgstr "Měřeno"
    139169
    140 #: tformmain.listview1.columns[3].caption
    141 msgctxt "tformmain.listview1.columns[3].caption"
    142 msgid "Result"
    143 msgstr "Výsledek"
    144 
    145 #: tformmain.listview1.columns[4].caption
    146 msgctxt "tformmain.listview1.columns[4].caption"
     170#: tformmain.listviewoverview.columns[3].caption
     171msgctxt "tformmain.listviewoverview.columns[3].caption"
     172msgid "Shared"
     173msgstr "Sdíleno"
     174
     175#: tformmain.listviewoverview.columns[4].caption
     176msgctxt "tformmain.listviewoverview.columns[4].caption"
    147177msgid "Shared [%]"
    148178msgstr "Sdíleno [%]"
    149179
    150 #: tformmain.listview1.columns[5].caption
    151 msgctxt "tformmain.listview1.columns[5].caption"
     180#: tformmain.listviewoverview.columns[5].caption
     181msgctxt "tformmain.listviewoverview.columns[5].caption"
    152182msgid "Kind"
    153183msgstr "Druh"
    154184
    155 #: tformmain.listview1.columns[6].caption
     185#: tformmain.listviewoverview.columns[6].caption
     186msgctxt "tformmain.listviewoverview.columns[6].caption"
    156187msgid "Low price [Kč]"
    157188msgstr "Nízká cena [Kč]"
    158189
    159 #: tformmain.listview1.columns[7].caption
     190#: tformmain.listviewoverview.columns[7].caption
     191msgctxt "tformmain.listviewoverview.columns[7].caption"
    160192msgid "High price [Kč]"
    161193msgstr "Vysoká cena [Kč]"
    162194
    163 #: tformmain.listview1.columns[8].caption
     195#: tformmain.listviewoverview.columns[8].caption
     196msgctxt "tformmain.listviewoverview.columns[8].caption"
    164197msgid "Spot price [Kč]"
    165198msgstr "Spotová cena [Kč]"
    166199
    167 #: tformmain.listview1.columns[9].caption
    168 msgid "Savings [Kč]"
    169 msgstr "Úspory [Kč]"
    170 
    171 #: tformmain.listview2.columns[0].caption
    172 msgctxt "tformmain.listview2.columns[0].caption"
     200#: tformmain.listviewoverview.columns[9].caption
     201msgctxt "tformmain.listviewoverview.columns[9].caption"
     202msgid "Price [Kč]"
     203msgstr "Cena [Kč]"
     204
     205#: tformmain.listviewspotprices.columns[0].caption
     206msgctxt "tformmain.listviewspotprices.columns[0].caption"
    173207msgid "Time"
    174208msgstr "Čas"
    175209
    176 #: tformmain.listview2.columns[1].caption
    177 msgctxt "tformmain.listview2.columns[1].caption"
    178 msgid "Measured"
    179 msgstr "Měřeno"
    180 
    181 #: tformmain.listview2.columns[2].caption
    182 msgctxt "tformmain.listview2.columns[2].caption"
    183 msgid "Result"
    184 msgstr "Výsledek"
    185 
    186 #: tformmain.listview2.columns[3].caption
    187 msgctxt "tformmain.listview2.columns[3].caption"
    188 msgid "Shared [%]"
    189 msgstr "Sdíleno [%]"
     210#: tformmain.listviewspotprices.columns[1].caption
     211msgid "Value [Kč]"
     212msgstr "Hodnota [Kč]"
    190213
    191214#: tformmain.menuitemfile.caption
     
    235258msgid "Overview"
    236259msgstr "Přehled"
     260
     261#: tformmain.tabsheetspotprices.caption
     262msgid "Spot prices"
     263msgstr "Spotové ceny"
  • trunk/Languages/EdcStats.pot

    r8 r9  
    5555
    5656#: formmain.sshared
     57msgctxt "formmain.sshared"
    5758msgid "Shared"
    5859msgstr ""
     
    113114msgstr ""
    114115
    115 #: tformmain.listview1.columns[0].caption
    116 msgctxt "tformmain.listview1.columns[0].caption"
     116#: tformmain.listviewdata.columns[0].caption
     117msgctxt "tformmain.listviewdata.columns[0].caption"
     118msgid "Time"
     119msgstr ""
     120
     121#: tformmain.listviewdata.columns[1].caption
     122msgctxt "tformmain.listviewdata.columns[1].caption"
     123msgid "Measured"
     124msgstr ""
     125
     126#: tformmain.listviewdata.columns[2].caption
     127msgctxt "tformmain.listviewdata.columns[2].caption"
     128msgid "Result"
     129msgstr ""
     130
     131#: tformmain.listviewdata.columns[3].caption
     132msgctxt "tformmain.listviewdata.columns[3].caption"
     133msgid "Shared [%]"
     134msgstr ""
     135
     136#: tformmain.listviewoverview.columns[0].caption
     137msgctxt "tformmain.listviewoverview.columns[0].caption"
    117138msgid "EAN"
    118139msgstr ""
    119140
    120 #: tformmain.listview1.columns[1].caption
    121 msgctxt "tformmain.listview1.columns[1].caption"
     141#: tformmain.listviewoverview.columns[10].caption
     142msgctxt "tformmain.listviewoverview.columns[10].caption"
     143msgid "Savings [Kč]"
     144msgstr ""
     145
     146#: tformmain.listviewoverview.columns[11].caption
     147msgid "Tariff"
     148msgstr ""
     149
     150#: tformmain.listviewoverview.columns[1].caption
     151msgctxt "tformmain.listviewoverview.columns[1].caption"
    122152msgid "Owner"
    123153msgstr ""
    124154
    125 #: tformmain.listview1.columns[2].caption
    126 msgctxt "tformmain.listview1.columns[2].caption"
     155#: tformmain.listviewoverview.columns[2].caption
     156msgctxt "tformmain.listviewoverview.columns[2].caption"
    127157msgid "Measured"
    128158msgstr ""
    129159
    130 #: tformmain.listview1.columns[3].caption
    131 msgctxt "tformmain.listview1.columns[3].caption"
    132 msgid "Result"
    133 msgstr ""
    134 
    135 #: tformmain.listview1.columns[4].caption
    136 msgctxt "tformmain.listview1.columns[4].caption"
     160#: tformmain.listviewoverview.columns[3].caption
     161msgctxt "tformmain.listviewoverview.columns[3].caption"
     162msgid "Shared"
     163msgstr ""
     164
     165#: tformmain.listviewoverview.columns[4].caption
     166msgctxt "tformmain.listviewoverview.columns[4].caption"
    137167msgid "Shared [%]"
    138168msgstr ""
    139169
    140 #: tformmain.listview1.columns[5].caption
    141 msgctxt "tformmain.listview1.columns[5].caption"
     170#: tformmain.listviewoverview.columns[5].caption
     171msgctxt "tformmain.listviewoverview.columns[5].caption"
    142172msgid "Kind"
    143173msgstr ""
    144174
    145 #: tformmain.listview1.columns[6].caption
     175#: tformmain.listviewoverview.columns[6].caption
     176msgctxt "tformmain.listviewoverview.columns[6].caption"
    146177msgid "Low price [Kč]"
    147178msgstr ""
    148179
    149 #: tformmain.listview1.columns[7].caption
     180#: tformmain.listviewoverview.columns[7].caption
     181msgctxt "tformmain.listviewoverview.columns[7].caption"
    150182msgid "High price [Kč]"
    151183msgstr ""
    152184
    153 #: tformmain.listview1.columns[8].caption
     185#: tformmain.listviewoverview.columns[8].caption
     186msgctxt "tformmain.listviewoverview.columns[8].caption"
    154187msgid "Spot price [Kč]"
    155188msgstr ""
    156189
    157 #: tformmain.listview1.columns[9].caption
    158 msgid "Savings [Kč]"
    159 msgstr ""
    160 
    161 #: tformmain.listview2.columns[0].caption
    162 msgctxt "tformmain.listview2.columns[0].caption"
     190#: tformmain.listviewoverview.columns[9].caption
     191msgctxt "tformmain.listviewoverview.columns[9].caption"
     192msgid "Price [Kč]"
     193msgstr ""
     194
     195#: tformmain.listviewspotprices.columns[0].caption
     196msgctxt "tformmain.listviewspotprices.columns[0].caption"
    163197msgid "Time"
    164198msgstr ""
    165199
    166 #: tformmain.listview2.columns[1].caption
    167 msgctxt "tformmain.listview2.columns[1].caption"
    168 msgid "Measured"
    169 msgstr ""
    170 
    171 #: tformmain.listview2.columns[2].caption
    172 msgctxt "tformmain.listview2.columns[2].caption"
    173 msgid "Result"
    174 msgstr ""
    175 
    176 #: tformmain.listview2.columns[3].caption
    177 msgctxt "tformmain.listview2.columns[3].caption"
    178 msgid "Shared [%]"
     200#: tformmain.listviewspotprices.columns[1].caption
     201msgid "Value [Kč]"
    179202msgstr ""
    180203
     
    226249msgstr ""
    227250
     251#: tformmain.tabsheetspotprices.caption
     252msgid "Spot prices"
     253msgstr ""
     254
  • trunk/SpotPrice.pas

    r7 r9  
    44
    55uses
    6   Classes, SysUtils, Generics.Collections, XML, fphttpclient, opensslsockets,
    7   DOM;
     6  Classes, SysUtils, Generics.Collections, Generics.Defaults, XML,
     7  fphttpclient, opensslsockets, DOM, Common, DateUtils, CsvDocument;
    88
    99type
     
    1212  TSpotPrice = record
    1313    Time: TDateTime;
    14     Value: Double;
    15     class function Create(Time: TDateTime; Value: Double): TSpotPrice; static;
     14    Value: Currency;
     15    class function Create(Time: TDateTime; Value: Currency): TSpotPrice; static;
    1616    procedure LoadFromXmlNode(Node: TDOMNode);
    1717    procedure SaveToXmlNode(Node: TDOMNode);
     
    2121
    2222  TSpotPrices = class(TList<TSpotPrice>)
     23  private
     24    function FileNameFilter(FileName: string): Boolean;
     25    function Comparer(constref Left, Right: TSpotPrice): Integer;
     26    procedure LoadSpotReport(FileName: string);
    2327  public
    2428    function GetBlock(var Text: string; StartText, EndText: string): string;
    25     procedure LoadSpotPrices(Date: TDate);
     29    procedure LoadSpotPricesFromWeb(Date: TDate);
     30    procedure Import(Directory: string);
    2631    procedure LoadFromXmlNode(Node: TDOMNode);
    2732    procedure SaveToXmlNode(Node: TDOMNode);
     33    function SearchByTime(Time: TDateTime): TSpotPrice;
    2834  end;
    2935
     
    3137  SpotPriceName = 'SpotPrice';
    3238  SpotPricesName = 'SpotPrices';
     39  DPH = 1.21;
     40
    3341
    3442implementation
     
    3644{ TSpotPrice }
    3745
    38 class function TSpotPrice.Create(Time: TDateTime; Value: Double): TSpotPrice;
     46class function TSpotPrice.Create(Time: TDateTime; Value: Currency): TSpotPrice;
    3947begin
    4048  Result.Time := Time;
     
    5462end;
    5563
    56 procedure TSpotPrices.LoadSpotPrices(Date: TDate);
     64procedure TSpotPrices.LoadSpotPricesFromWeb(Date: TDate);
    5765var
    5866  URL: string;
     
    8290            ValueText := StringReplace(ValueText, 'Kč', '', [rfReplaceAll]).Trim;
    8391            ValueText := StringReplace(ValueText, Chr($c2) + Chr($a0), '', [rfReplaceAll]);
    84             Value := StrToInt(ValueText) / 1000;
     92            Value := StrToInt(ValueText) / 1000 * DPH;
    8593          end;
    8694
     
    94102end;
    95103
     104function TSpotPrices.FileNameFilter(FileName: string): Boolean;
     105begin
     106  Result := ExtractFileExt(FileName) = '.csv';
     107end;
     108
     109function TSpotPrices.Comparer(constref Left, Right: TSpotPrice): Integer;
     110begin
     111  Result := CompareDateTime(Left.Time, Right.Time);
     112end;
     113
     114procedure TSpotPrices.LoadSpotReport(FileName: string);
     115var
     116  CSVDoc: TCSVDocument;
     117  R: Integer;
     118  Date, Time: TDateTime;
     119  Value: Currency;
     120begin
     121  CSVDoc := TCSVDocument.Create;
     122  try
     123    CSVDoc.LoadFromFile(FileName);
     124
     125    for R := 1 to CSVDoc.RowCount - 1 do begin
     126      Date := StrToDate(CSVDoc.Cells[0, R]);
     127      Time := Date + StrToTime(Copy(CSVDoc.Cells[1, R], 1, Pos(' ', CSVDoc.Cells[1, R]) - 1));
     128      Value := StrToCurr(CSVDoc.Cells[3, R]) / 1000;
     129      Add(TSpotPrice.Create(Time, Value));
     130    end;
     131  finally
     132    CSVDoc.Free;
     133  end;
     134end;
     135
     136procedure TSpotPrices.Import(Directory: string);
     137var
     138  Reports: TStringList;
     139  I: Integer;
     140begin
     141  Clear;
     142
     143  Reports := TStringList.Create;
     144  try
     145    SearchFiles(Reports, Directory, FileNameFilter);
     146    for I := 0 to Reports.Count - 1 do
     147      LoadSpotReport(Reports[I]);
     148  finally
     149    Reports.Free;
     150  end;
     151
     152  Sort(TComparer<TSpotPrice>.Construct(Comparer));
     153end;
     154
    96155procedure TSpotPrices.LoadFromXmlNode(Node: TDOMNode);
    97156var
     
    117176    Node.AppendChild(Node2);
    118177  end;
     178end;
     179
     180function TSpotPrices.SearchByTime(Time: TDateTime): TSpotPrice;
     181var
     182  I: Integer;
     183begin
     184  I := 0;
     185  while (I < Count) and (Items[I].Time <> Time) do Inc(I);
     186  if I < Count then Result := Items[I]
     187    else Result := TSpotPrice.Create(0, 0);
    119188end;
    120189
     
    136205end;
    137206
    138 
    139207end.
    140208
Note: See TracChangeset for help on using the changeset viewer.