- Timestamp:
- Apr 13, 2026, 7:11:03 PM (2 weeks ago)
- Location:
- trunk
- Files:
-
- 9 edited
-
Ean.pas (modified) (9 diffs)
-
EdcProject.pas (modified) (10 diffs)
-
FormMain.lfm (modified) (4 diffs)
-
FormMain.lrj (modified) (1 diff)
-
FormMain.pas (modified) (11 diffs)
-
Languages/EdcStats.cs.po (modified) (2 diffs)
-
Languages/EdcStats.pot (modified) (1 diff)
-
Packages/Common/XML.pas (modified) (1 diff)
-
SpotPrice.pas (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ean.pas
r6 r7 17 17 class function Create(Time: TDateTime; ValueIn, ValueOut: Single): TEanValue; static; 18 18 function GetShared: Double; 19 procedure LoadFromXmlNode(Node: TDOMNode); 20 procedure SaveToXmlNode(Node: TDOMNode); 19 21 end; 20 22 … … 23 25 TEanValues = class(TList<TEanValue>) 24 26 function Comparer(constref Left, Right: TEanValue): Integer; 27 procedure LoadFromXmlNode(Node: TDOMNode); 28 procedure SaveToXmlNode(Node: TDOMNode); 25 29 end; 26 30 … … 51 55 TEans = class(TObjectList<TEan>) 52 56 function SearchByNumber(Number: string): TEan; 57 function SearchByOwner(Owner: string): TEan; 53 58 procedure LoadToStrings(Strings: TStrings; AllowNone: Boolean = False); 54 59 procedure LoadFromXmlNode(Node: TDOMNode); … … 64 69 EansName = 'Eans'; 65 70 EanName = 'Ean'; 71 EanValueName = 'EanValue'; 72 EanValuesName = 'EanValues'; 66 73 67 74 … … 94 101 end; 95 102 103 procedure TEanValue.LoadFromXmlNode(Node: TDOMNode); 104 begin 105 Time := ReadDateTime(Node, 'Time', Time); 106 ValueIn := ReadDouble(Node, 'ValueIn', ValueIn); 107 ValueOut := ReadDouble(Node, 'ValueOut', ValueOut); 108 end; 109 110 procedure TEanValue.SaveToXmlNode(Node: TDOMNode); 111 begin 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); 115 end; 116 96 117 { TEanValues } 97 118 … … 99 120 begin 100 121 Result := CompareDateTime(Left.Time, Right.Time); 122 end; 123 124 procedure TEanValues.LoadFromXmlNode(Node: TDOMNode); 125 var 126 Node2: TDOMNode; 127 EanValue: TEanValue; 128 begin 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; 135 end; 136 137 procedure TEanValues.SaveToXmlNode(Node: TDOMNode); 138 var 139 Node2: TDOMNode; 140 I: Integer; 141 begin 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; 101 147 end; 102 148 … … 133 179 134 180 procedure TEan.LoadFromXmlNode(Node: TDOMNode); 181 var 182 NewNode: TDOMNode; 135 183 begin 136 184 Number := ReadString(Node, 'Number', Number); … … 140 188 PriceHigh := ReadDouble(Node, 'PriceHigh', PriceHigh); 141 189 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); 142 195 end; 143 196 144 197 procedure 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); 198 var 199 NewNode: TDOMNode; 200 begin 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; 152 214 end; 153 215 … … 171 233 I := 0; 172 234 while (I < Count) and (Items[I].Number <> Number) do Inc(I); 235 if I < Count then Result := Items[I] 236 else Result := nil; 237 end; 238 239 function TEans.SearchByOwner(Owner: string): TEan; 240 var 241 I: Integer; 242 begin 243 I := 0; 244 while (I < Count) and (Items[I].Owner <> Owner) do Inc(I); 173 245 if I < Count then Result := Items[I] 174 246 else Result := nil; -
trunk/EdcProject.pas
r6 r7 5 5 uses 6 6 Classes, SysUtils, Generics.Collections, Generics.Defaults, XML, DateUtils, 7 fphttpclient, opensslsockets,Ean, DOM, XMLRead, XMLWrite, Common, CsvDocument,7 Ean, DOM, XMLRead, XMLWrite, Common, CsvDocument, 8 8 SpotPrice; 9 9 … … 48 48 I: Integer; 49 49 begin 50 for I := 0 to Eans.Count - 1 do 51 Eans[I].Values.Clear; 52 50 53 Reports := TStringList.Create; 51 54 try … … 59 62 for I := 0 to Eans.Count - 1 do 60 63 Eans[I].Values.Sort(TComparer<TEanValue>.Construct(Eans[I].Values.Comparer)); 64 61 65 62 66 CreateEan('', STotalSupply, ekSupply); … … 102 106 AppendChild(RootNode); 103 107 104 NewNode := RootNode.OwnerDocument.CreateElement(EansName); 105 RootNode.AppendChild(NewNode); 106 Eans.SaveToXmlNode(NewNode); 107 108 NewNode := RootNode.OwnerDocument.CreateElement(SpotPricesName); 109 RootNode.AppendChild(NewNode); 110 SpotPrices.SaveToXmlNode(NewNode); 108 if Eans.Count > 0 then begin 109 NewNode := RootNode.OwnerDocument.CreateElement(EansName); 110 RootNode.AppendChild(NewNode); 111 Eans.SaveToXmlNode(NewNode); 112 end; 113 114 if SpotPrices.Count > 0 then begin 115 NewNode := RootNode.OwnerDocument.CreateElement(SpotPricesName); 116 RootNode.AppendChild(NewNode); 117 SpotPrices.SaveToXmlNode(NewNode); 118 end; 111 119 112 120 if ExtractFileDir(FileName) <> '' then … … 136 144 C: Integer; 137 145 CSVDoc: TCSVDocument; 146 Date: TDateTime; 138 147 TimeFrom: TDateTime; 139 148 TimeTo: TDateTime; … … 147 156 try 148 157 CSVDoc.Delimiter := ';'; 149 //BufferedFileStream := TBufferedFileStream.Create(FileName, fmOpenRead);150 //CSVDoc.LoadFromStream(BufferedFileStream);151 158 CSVDoc.LoadFromFile(FileName); 152 //BufferedFileStream.Free;153 159 154 160 for C := 0 to ((CSVDoc.ColCount[0] - 3) div 2) - 1 do begin … … 172 178 Ean.Kind := EanKind; 173 179 180 Ean.Values.Capacity := Ean.Values.Count + CSVDoc.RowCount; 181 174 182 for R := 1 to CSVDoc.RowCount - 1 do begin 175 TimeFrom := StrToDate(CSVDoc.Cells[0, R]) + StrToTime(CSVDoc.Cells[1, R]); 176 TimeTo := StrToDate(CSVDoc.Cells[0, R]) + StrToTime(CSVDoc.Cells[2, R]); 183 Date := StrToDate(CSVDoc.Cells[0, R]); 184 TimeFrom := Date + StrToTime(CSVDoc.Cells[1, R]); 185 TimeTo := Date + StrToTime(CSVDoc.Cells[2, R]); 177 186 178 187 CellValueIn := 0; … … 203 212 Value: TEanValue; 204 213 begin 205 Ean := TEan.Create; 206 Ean.Number := Number; 207 Ean.Owner := Owner; 208 Ean.Kind := Kind; 214 Ean := Eans.SearchByOwner(Owner); 215 if not Assigned(Ean) then begin 216 Ean := TEan.Create; 217 Ean.Number := Number; 218 Ean.Owner := Owner; 219 Ean.Kind := Kind; 220 Eans.Add(Ean); 221 end; 222 223 Ean.Values.Clear; 209 224 210 225 Values := TDictionary<TDateTime, TEanValue>.Create; … … 223 238 224 239 ValuesArray := Values.ToArray; 240 Ean.Values.Capacity := Values.Count; 225 241 for I := 0 to Values.Count - 1 do begin 226 242 Ean.Values.Add(TEanValue.Create(ValuesArray[I].Key, ValuesArray[I].Value.ValueIn, ValuesArray[I].Value.ValueOut)); … … 229 245 230 246 Values.Free; 231 232 Eans.Add(Ean);233 247 end; 234 248 -
trunk/FormMain.lfm
r6 r7 1 1 object FormMain: TFormMain 2 Left = 3 722 Left = 367 3 3 Height = 884 4 Top = 36 64 Top = 361 5 5 Width = 1203 6 6 Caption = 'EDC Stats' … … 11 11 LCLVersion = '4.6.0.0' 12 12 WindowState = wsMaximized 13 OnClose = FormClose 13 14 OnCreate = FormCreate 14 15 OnDestroy = FormDestroy … … 72 73 Width = 135 73 74 end> 75 PopupMenu = PopupMenuOverview 74 76 ReadOnly = True 75 77 RowSelect = True … … 384 386 Left = 216 385 387 Top = 376 386 object MenuItem1: TMenuItem 388 object MenuItemFile: TMenuItem 389 Caption = 'File' 390 object MenuItemLoad: TMenuItem 391 Caption = 'Load' 392 OnClick = MenuItemLoadClick 393 end 394 object MenuItemSave: TMenuItem 395 Caption = 'Save' 396 OnClick = MenuItemSaveClick 397 end 398 end 399 object MenuItemTools: TMenuItem 387 400 Caption = 'Tools' 388 object MenuItem2: TMenuItem 389 Caption = 'Load reports' 390 OnClick = MenuItem2Click 391 end 392 object MenuItem3: TMenuItem 393 Caption = 'Load spot prices' 394 OnClick = MenuItem3Click 395 end 401 object MenuItemImportReports: TMenuItem 402 Caption = 'Import reports' 403 OnClick = MenuItemImportReportsClick 404 end 405 object MenuItemImportSpotPrices: TMenuItem 406 Caption = 'Import spot prices' 407 OnClick = MenuItemImportSpotPricesClick 408 end 409 end 410 end 411 object PopupMenuOverview: TPopupMenu 412 Left = 506 413 Top = 274 414 object MenuItemRemove: TMenuItem 415 Caption = 'Remove' 416 OnClick = MenuItemRemoveClick 396 417 end 397 418 end -
trunk/FormMain.lrj
r6 r7 27 27 {"hash":60,"name":"tformmain.buttonintervalleft.caption","sourcebytes":[60],"value":"<"}, 28 28 {"hash":6049914,"name":"tformmain.label5.caption","sourcebytes":[85,110,105,116,58],"value":"Unit:"}, 29 {"hash":5989939,"name":"tformmain.menuitem1.caption","sourcebytes":[84,111,111,108,115],"value":"Tools"}, 30 {"hash":234102723,"name":"tformmain.menuitem2.caption","sourcebytes":[76,111,97,100,32,114,101,112,111,114,116,115],"value":"Load reports"}, 31 {"hash":17275603,"name":"tformmain.menuitem3.caption","sourcebytes":[76,111,97,100,32,115,112,111,116,32,112,114,105,99,101,115],"value":"Load spot prices"} 29 {"hash":315429,"name":"tformmain.menuitemfile.caption","sourcebytes":[70,105,108,101],"value":"File"}, 30 {"hash":341364,"name":"tformmain.menuitemload.caption","sourcebytes":[76,111,97,100],"value":"Load"}, 31 {"hash":366789,"name":"tformmain.menuitemsave.caption","sourcebytes":[83,97,118,101],"value":"Save"}, 32 {"hash":5989939,"name":"tformmain.menuitemtools.caption","sourcebytes":[84,111,111,108,115],"value":"Tools"}, 33 {"hash":212990659,"name":"tformmain.menuitemimportreports.caption","sourcebytes":[73,109,112,111,114,116,32,114,101,112,111,114,116,115],"value":"Import reports"}, 34 {"hash":67557683,"name":"tformmain.menuitemimportspotprices.caption","sourcebytes":[73,109,112,111,114,116,32,115,112,111,116,32,112,114,105,99,101,115],"value":"Import spot prices"}, 35 {"hash":93079237,"name":"tformmain.menuitemremove.caption","sourcebytes":[82,101,109,111,118,101],"value":"Remove"} 32 36 ]} -
trunk/FormMain.pas
r6 r7 7 7 EditBtn, Menus, TAGraph, TASeries, Generics.Collections, Generics.Defaults, 8 8 DateUtils, Ean, Translator, ApplicationInfo, RegistryEx, PersistentForm, 9 Theme, Common, XML, DOM, XMLRead,EdcProject;9 Theme, Common, XML, EdcProject; 10 10 11 11 type … … 45 45 MainMenu1: TMainMenu; 46 46 Memo1: TMemo; 47 MenuItem1: TMenuItem; 48 MenuItem2: TMenuItem; 49 MenuItem3: TMenuItem; 47 MenuItemRemove: TMenuItem; 48 MenuItemLoad: TMenuItem; 49 MenuItemSave: TMenuItem; 50 MenuItemTools: TMenuItem; 51 MenuItemImportReports: TMenuItem; 52 MenuItemImportSpotPrices: TMenuItem; 53 MenuItemFile: TMenuItem; 50 54 PageControl1: TPageControl; 51 55 PersistentForm1: TPersistentForm; 56 PopupMenuOverview: TPopupMenu; 52 57 TabSheetOverview: TTabSheet; 53 58 TabSheetData: TTabSheet; … … 64 69 procedure ComboBoxUnitSelect(Sender: TObject); 65 70 procedure DateEdit1Change(Sender: TObject); 71 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); 66 72 procedure FormCreate(Sender: TObject); 67 73 procedure FormDestroy(Sender: TObject); 68 74 procedure FormShow(Sender: TObject); 69 procedure MenuItem2Click(Sender: TObject); 70 procedure MenuItem3Click(Sender: TObject); 75 procedure MenuItemImportReportsClick(Sender: TObject); 76 procedure MenuItemImportSpotPricesClick(Sender: TObject); 77 procedure MenuItemLoadClick(Sender: TObject); 78 procedure MenuItemRemoveClick(Sender: TObject); 79 procedure MenuItemSaveClick(Sender: TObject); 71 80 procedure TabSheetOverviewShow(Sender: TObject); 72 81 procedure TabSheetChartShow(Sender: TObject); … … 81 90 Period: TPeriod; 82 91 ReportsDir: string; 83 OwnersFileName: string;92 ProjectFileName: string; 84 93 ShowResult: Boolean; 85 94 EdcProject: TEdcProject; 86 procedure LoadReports;87 95 function MeasureToFloat(Value: Double; Interval: Double): Double; 88 96 function MeasureToStr(Value: Double): string; … … 110 118 {$R *.lfm} 111 119 112 uses113 csvdocument, BufferedFileStream;114 115 120 resourcestring 116 121 SEAN = 'EAN'; … … 174 179 end; 175 180 181 procedure TFormMain.FormClose(Sender: TObject; var CloseAction: TCloseAction); 182 begin 183 end; 184 176 185 procedure TFormMain.FormCreate(Sender: TObject); 177 186 begin … … 189 198 procedure TFormMain.FormShow(Sender: TObject); 190 199 begin 191 LoadReports; 192 end; 193 194 procedure TFormMain.MenuItem2Click(Sender: TObject); 195 begin 196 LoadReports; 197 end; 198 199 procedure TFormMain.MenuItem3Click(Sender: TObject); 200 MenuItemLoad.Click; 201 end; 202 203 procedure TFormMain.MenuItemImportReportsClick(Sender: TObject); 204 begin 205 EdcProject.Import(ReportsDir); 206 207 if (EdcProject.Eans.Count > 0) and (EdcProject.Eans[0].Values.Count > 0) then 208 IntervalTo := EdcProject.Eans[0].Values.Last.Time + 15 * OneMinute; 209 UpdateInterval; 210 UpdateInterface; 211 end; 212 213 procedure TFormMain.MenuItemImportSpotPricesClick(Sender: TObject); 200 214 begin 201 215 EdcProject.SpotPrices.LoadSpotPrices(StrToDate('1.4.2026')); 216 end; 217 218 procedure TFormMain.MenuItemLoadClick(Sender: TObject); 219 begin 220 EdcProject.LoadFromFile(ProjectFileName); 221 222 if (EdcProject.Eans.Count > 0) and (EdcProject.Eans[0].Values.Count > 0) then 223 IntervalTo := EdcProject.Eans[0].Values.Last.Time + 15 * OneMinute; 224 UpdateInterval; 225 UpdateInterface; 226 end; 227 228 procedure TFormMain.MenuItemRemoveClick(Sender: TObject); 229 begin 230 if Assigned(ListView1.Selected) then 231 EdcProject.Eans.Remove(ListView1.Selected.Data); 232 ReloadListViewOverview; 233 end; 234 235 procedure TFormMain.MenuItemSaveClick(Sender: TObject); 236 begin 237 EdcProject.SaveToFile(ProjectFileName); 202 238 end; 203 239 … … 248 284 ComboBoxPeriod.Items[Integer(prYear)] := SYear; 249 285 Ean.Translate; 250 end;251 252 procedure TFormMain.LoadReports;253 begin254 EdcProject.LoadFromFile(OwnersFileName);255 EdcProject.Import(ReportsDir);256 257 if (EdcProject.Eans.Count > 0) and (EdcProject.Eans[0].Values.Count > 0) then258 IntervalTo := EdcProject.Eans[0].Values.Last.Time + 15 * OneMinute;259 UpdateInterval;260 UpdateInterface;261 286 end; 262 287 … … 314 339 ListItem := ListView1.Items.Add; 315 340 ListItem.Caption := Number; 341 ListItem.Data := EdcProject.Eans[I]; 316 342 ListItem.SubItems.Add(Owner); 317 343 ListItem.SubItems.Add(MeasureToStr(GetTotalIn(IntervalFrom, IntervalTo))); … … 470 496 Period := TPeriod(ReadIntegerWithDefault('Period', Integer(Period))); 471 497 ReportsDir := ReadStringWithDefault('ReportsDir', ReportsDir); 472 OwnersFileName := ReadStringWithDefault('OwnersFileName', OwnersFileName);498 ProjectFileName := ReadStringWithDefault('ProjectFileName', ProjectFileName); 473 499 PageControl1.TabIndex := ReadIntegerWithDefault('ActiveTab', PageControl1.TabIndex); 474 500 ShowResult := ReadBoolWithDefault('ShowResult', ShowResult); … … 492 518 WriteInteger('Period', Integer(Period)); 493 519 WriteString('ReportsDir', ReportsDir); 494 WriteString(' OwnersFileName', OwnersFileName);520 WriteString('ProjectFileName', ProjectFileName); 495 521 WriteInteger('ActiveTab', PageControl1.TabIndex); 496 522 WriteBool('ShowResult', ShowResult); -
trunk/Languages/EdcStats.cs.po
r6 r7 180 180 msgstr "Sdíleno [%]" 181 181 182 #: tformmain.menuitem1.caption 182 #: tformmain.menuitemfile.caption 183 msgid "File" 184 msgstr "" 185 186 #: tformmain.menuitemimportreports.caption 187 msgid "Import reports" 188 msgstr "" 189 190 #: tformmain.menuitemimportspotprices.caption 191 msgctxt "tformmain.menuitemimportspotprices.caption" 192 msgid "Import spot prices" 193 msgstr "" 194 195 #: tformmain.menuitemload.caption 196 msgid "Load" 197 msgstr "" 198 199 #: tformmain.menuitemremove.caption 200 msgid "Remove" 201 msgstr "" 202 203 #: tformmain.menuitemsave.caption 204 msgid "Save" 205 msgstr "" 206 207 #: tformmain.menuitemtools.caption 208 #, fuzzy 209 msgctxt "tformmain.menuitemtools.caption" 183 210 msgid "Tools" 184 211 msgstr "Nástroje" 185 186 #: tformmain.menuitem2.caption187 msgid "Load reports"188 msgstr "Načíst reporty"189 190 #: tformmain.menuitem3.caption191 msgid "Load spot prices"192 msgstr "Načíst spotové ceny"193 212 194 213 #: tformmain.tabsheetchart.caption … … 208 227 msgid "Overview" 209 228 msgstr "Přehled" 229 -
trunk/Languages/EdcStats.pot
r6 r7 170 170 msgstr "" 171 171 172 #: tformmain.menuitem1.caption 172 #: tformmain.menuitemfile.caption 173 msgid "File" 174 msgstr "" 175 176 #: tformmain.menuitemimportreports.caption 177 msgid "Import reports" 178 msgstr "" 179 180 #: tformmain.menuitemimportspotprices.caption 181 msgctxt "tformmain.menuitemimportspotprices.caption" 182 msgid "Import spot prices" 183 msgstr "" 184 185 #: tformmain.menuitemload.caption 186 msgid "Load" 187 msgstr "" 188 189 #: tformmain.menuitemremove.caption 190 msgid "Remove" 191 msgstr "" 192 193 #: tformmain.menuitemsave.caption 194 msgid "Save" 195 msgstr "" 196 197 #: tformmain.menuitemtools.caption 198 msgctxt "tformmain.menuitemtools.caption" 173 199 msgid "Tools" 174 msgstr ""175 176 #: tformmain.menuitem2.caption177 msgid "Load reports"178 msgstr ""179 180 #: tformmain.menuitem3.caption181 msgid "Load spot prices"182 200 msgstr "" 183 201 -
trunk/Packages/Common/XML.pas
r6 r7 243 243 begin 244 244 NewNode := Node.OwnerDocument.CreateElement(DOMString(Name)); 245 NewNode.TextContent := DOMString(FloatToStr(Value ));245 NewNode.TextContent := DOMString(FloatToStr(Value, XmlFormatSettings)); 246 246 Node.AppendChild(NewNode); 247 247 end; -
trunk/SpotPrice.pas
r6 r7 65 65 Value: Double; 66 66 begin 67 Clear; 67 68 URL := 'https://spotovaelektrina.cz/denni-ceny/' + DateToStr(Date, XmlFormatSettings); 68 69 with TFPHttpClient.Create(nil) do
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/edc-stats/chrome/site/your_project_logo.png)