diff --git a/Core/Core/ClientApp/src/app/home/home-chart-definitions.service.ts b/Core/Core/ClientApp/src/app/home/home-chart-definitions.service.ts index 8e1c733b99e1094f95d82f29279f9b0888b0eb16..2654f557e4dcdbe373cb18f50a368f3271c5daac 100644 --- a/Core/Core/ClientApp/src/app/home/home-chart-definitions.service.ts +++ b/Core/Core/ClientApp/src/app/home/home-chart-definitions.service.ts @@ -21,6 +21,10 @@ export class HomeChartDefinitionsService { public HistorySymbolCategoryPieChart: Chart; public HistorySymbolTypePieChart: Chart; public ForecastPieChart: Chart; + public ForecastAverageLineChart: Chart; + public ForecastAveragePieChart: Chart; + public ForecastAmountComparsionKindPieChart: Chart; + public ForecastAmountComparsionSizePieChart: Chart; public ReloadAll(): void { this.ReloadHistoryChartSeries(); @@ -47,9 +51,22 @@ export class HomeChartDefinitionsService { public ReloadForecastChartSeries() { this.ForecastPieChart.removeSeries(0); + this.ForecastAverageLineChart.removeSeries(0); + this.ForecastAveragePieChart.removeSeries(0); + this.ForecastAmountComparsionKindPieChart.removeSeries(0); + this.ForecastAmountComparsionSizePieChart.removeSeries(0); + this.ForecastPieChart.addSeries({ name: 'VĂ˝daje', data: this.ForecastTypes } as Highcharts.SeriesColumnOptions, true, false); + this.ForecastAverageLineChart.addSeries({ name: 'VĂ˝daje', data: this.ForecastTypes } as Highcharts.SeriesColumnOptions, true, false); + this.ForecastAveragePieChart.addSeries({ name: 'VĂ˝daje', data: this.ForecastTypes } as Highcharts.SeriesColumnOptions, true, false); + this.ForecastAmountComparsionKindPieChart.addSeries({ name: 'VĂ˝daje', data: this.ForecastTypes } as Highcharts.SeriesColumnOptions, true, false); + this.ForecastAmountComparsionSizePieChart.addSeries({ name: 'VĂ˝daje', data: this.ForecastTypes } as Highcharts.SeriesColumnOptions, true, false); this.ForecastPieChart.ref.reflow(); + this.ForecastAverageLineChart.ref.reflow(); + this.ForecastAveragePieChart.ref.reflow(); + this.ForecastAmountComparsionKindPieChart.ref.reflow(); + this.ForecastAmountComparsionSizePieChart.ref.reflow(); } private MakeCharts() { @@ -169,5 +186,93 @@ export class HomeChartDefinitionsService { } as Highcharts.SeriesColumnOptions ] }); + + this.ForecastAverageLineChart = new Chart({ + chart: { + type: 'line' + }, + title: { + text: 'VĂ˝voj velikosti transakcĂ na následujĂcĂ ÄŤtyĹ™i tĂ˝dny' + }, + credits: { + enabled: false + }, + tooltip: { + valueDecimals: 2, + valueSuffix: ' KÄŤ' + }, + series: [ + { + name: 'Line 1', + data: this.ForecastTypes + } as Highcharts.SeriesColumnOptions + ] + }); + + this.ForecastAveragePieChart = new Chart({ + chart: { + type: 'pie' + }, + title: { + text: 'PravdÄ›podobná velikost transakcĂ v jednotlivĂ˝ch dnech' + }, + credits: { + enabled: false + }, + tooltip: { + valueDecimals: 2, + valueSuffix: ' KÄŤ' + }, + series: [ + { + name: 'Line 1', + data: this.ForecastTypes + } as Highcharts.SeriesColumnOptions + ] + }); + + this.ForecastAmountComparsionKindPieChart = new Chart({ + chart: { + type: 'pie' + }, + title: { + text: 'Druh vĂ˝dajĹŻ na následujĂcĂ tĂ˝den' + }, + credits: { + enabled: false + }, + tooltip: { + valueDecimals: 2, + valueSuffix: ' KÄŤ' + }, + series: [ + { + name: 'Line 1', + data: this.ForecastTypes + } as Highcharts.SeriesColumnOptions + ] + }); + + this.ForecastAmountComparsionSizePieChart = new Chart({ + chart: { + type: 'pie' + }, + title: { + text: 'Velikost vĂ˝dajĹŻ na následujĂcĂ tĂ˝den' + }, + credits: { + enabled: false + }, + tooltip: { + valueDecimals: 2, + valueSuffix: ' KÄŤ' + }, + series: [ + { + name: 'Line 1', + data: this.ForecastTypes + } as Highcharts.SeriesColumnOptions + ] + }); } } diff --git a/Core/Core/ClientApp/src/app/home/home.component.html b/Core/Core/ClientApp/src/app/home/home.component.html index 415c304e1830761f3be37e021fa6fd0326da497c..8381804d591f4805ae211f736212447a93301ceb 100644 --- a/Core/Core/ClientApp/src/app/home/home.component.html +++ b/Core/Core/ClientApp/src/app/home/home.component.html @@ -13,6 +13,7 @@ <div id="main" class="col"> <div class="container-fluid"> + <div class="row justify-content-center"><h2>Historie</h2></div> <div class="row justify-content-center"> <div id="History_WeeksBar" class="col-md-auto, chart"><div [chart]="HistoryWeeksBarChart"></div></div> <div id="History_PerSizePie" class="col-md-auto, chart"><div [chart]="GetHistoryPerSizePie"></div></div> @@ -23,6 +24,9 @@ <div id="History_SymbolTypeChart" class="col-md-auto, chart"><div [chart]="HistorySymbolTypePieChart"></div></div> </div> <div class="row justify-content-center"><div class="col-md-auto"> </div></div> + + <div class="row justify-content-center"><h2>PĹ™edpovÄ›di</h2></div> + <div class="row justify-content-center"><h3>1) Odhad neuronovou sĂtĂ</h3></div> <div class="row justify-content-center"> <div id="Forecast_Table" class="col-md-auto, chart"> <table mat-table [dataSource]="dataSource" class="mat-elevation-z8"> @@ -33,12 +37,12 @@ </ng-container> <!-- Name Column --> <ng-container matColumnDef="name"> - <th mat-header-cell *matHeaderCellDef> Name </th> + <th mat-header-cell *matHeaderCellDef> Typ </th> <td mat-cell *matCellDef="let element"> {{element.name}} </td> </ng-container> <!-- Amount Column --> <ng-container matColumnDef="amount"> - <th mat-header-cell *matHeaderCellDef> Amount </th> + <th mat-header-cell *matHeaderCellDef> Částka </th> <td mat-cell *matCellDef="let element"> {{element.amount}} </td> </ng-container> <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr> @@ -48,7 +52,41 @@ </div> <div id="Forecast_Pie" class="col-md-auto, chart"><div [chart]="ForecastPieChart"></div></div> </div> + + <div class="row justify-content-center"><h3>2) Odhad prĹŻmÄ›rem</h3></div> + <div class="row justify-content-center"> + <div id="Forecast_Average_Line" class="col-md-auto, chart"><div [chart]="ForecastAverageLineChart"></div></div> + <div id="Forecast_Average_Pie" class="col-md-auto, chart"><div [chart]="ForecastAveragePieChart"></div></div> + </div> + + <div class="row justify-content-center"><h3>3) Odhad částkou</h3></div> + <div class="row justify-content-center"> + <div id="Forecast_Table" class="col-md-auto, chart"> + <table mat-table [dataSource]="dataSource" class="mat-elevation-z8"> + <!-- Position Column --> + <ng-container matColumnDef="position"> + <th mat-header-cell *matHeaderCellDef> No. </th> + <td mat-cell *matCellDef="let element"> {{element.position}} </td> + </ng-container> + <!-- Name Column --> + <ng-container matColumnDef="name"> + <th mat-header-cell *matHeaderCellDef> Typ </th> + <td mat-cell *matCellDef="let element"> {{element.name}} </td> + </ng-container> + <!-- Amount Column --> + <ng-container matColumnDef="amount"> + <th mat-header-cell *matHeaderCellDef> Částka </th> + <td mat-cell *matCellDef="let element"> {{element.amount}} </td> + </ng-container> + <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr> + <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr> + </table> + <mat-paginator [pageSizeOptions]="[5, 10, 20]" showFirstLastButtons></mat-paginator> + </div> + + <div id="Forecast_AmountComparsion_Kind_Pie" class="col-md-auto, chart"><div [chart]="ForecastAmountComparsionKindPieChart"></div></div> + <div id="Forecast_AmountComparsion_Size_Pie" class="col-md-auto, chart"><div [chart]="ForecastAmountComparsionSizePieChart"></div></div> + </div> + </div> </div> - </div> - </div> </div> diff --git a/Core/Core/ClientApp/src/app/home/home.component.ts b/Core/Core/ClientApp/src/app/home/home.component.ts index 4f4f2acac4bb2d22e2ccb2218feb852e3b63c11c..f2de12a333321287910915a02c9033dddb9573a7 100644 --- a/Core/Core/ClientApp/src/app/home/home.component.ts +++ b/Core/Core/ClientApp/src/app/home/home.component.ts @@ -28,6 +28,11 @@ export class HomeComponent implements OnInit { public HistorySymbolCategoryPieChart: Chart; public HistorySymbolTypePieChart: Chart; + public ForecastAverageLineChart: Chart; + public ForecastAveragePieChart: Chart; + public ForecastAmountComparsionKindPieChart: Chart; + public ForecastAmountComparsionSizePieChart: Chart; + /** home ctor */ constructor(private LoginService: LoginService, private HomeService: HomeService) { this.dataSource = this.HomeService.dataSource; @@ -50,6 +55,11 @@ export class HomeComponent implements OnInit { this.ForecastPieChart = this.HomeService.GetForecastPie(); + this.ForecastAverageLineChart = this.HomeService.GetForecastAverageLine(); + this.ForecastAveragePieChart = this.HomeService.GetForecastAveragePie(); + this.ForecastAmountComparsionKindPieChart = this.HomeService.GetForecastAmountComparsionKindPie(); + this.ForecastAmountComparsionSizePieChart = this.HomeService.GetForecastAmountComparsionSizePie(); + this.HomeService.ReloadData(); //after re-loggin fire up graphs } diff --git a/Core/Core/ClientApp/src/app/home/home.service.ts b/Core/Core/ClientApp/src/app/home/home.service.ts index 280a30d2299f702a989aad8766884d6be1d880ca..4ae8f8a40d070d2955f5b370b4f598850ec1156f 100644 --- a/Core/Core/ClientApp/src/app/home/home.service.ts +++ b/Core/Core/ClientApp/src/app/home/home.service.ts @@ -6,6 +6,7 @@ import { HomeChartDefinitionsService } from './home-chart-definitions.service'; import { IFutureTransaction } from '../interfaces/IFutureTransaction'; import { ITransactionSumsContainer } from '../interfaces/ITransactionSumsContainer'; import { ITransaction } from '../interfaces/ITransaction'; +import { IForecastTransactionContainer } from '../interfaces/IForecastTransactionContainer'; @Injectable() export class HomeService { @@ -37,14 +38,17 @@ export class HomeService { } private LoadForecastData(): void { - this.HttpClient.get<ITransactionSumsContainer>('api/Forecast').subscribe(res => { + this.HttpClient.get<IForecastTransactionContainer>('api/Forecast').subscribe(res => { if (res === null) return; - this.HomeChartDefinitionsService.ForecastTypes = new Array(res.smallCount, res.mediumCount, res.hugeCount); + + + this.HomeChartDefinitionsService.ForecastTypes = new Array(1, 2, 3); let fileArray = new Array<IFutureTransaction>(); - for (let i: number = 0; i < res.expenses.length; i++) { - fileArray.push({ position: i + 1, name: 'default', amount: res.expenses[i] }); + for (let i: number = 0; i < res.neuralPrediction.length; i++) { + let transaction: ITransaction = res.neuralPrediction[i]; + fileArray.push({ position: i + 1, name: transaction.name, amount: Math.abs(transaction.amount).toString() + ' KÄŤ' }); } this.dataSource.data = fileArray; this.HomeChartDefinitionsService.ReloadForecastChartSeries(); @@ -69,4 +73,8 @@ export class HomeService { public GetHistorySymbolCategoryPieChart(): Chart { return this.HomeChartDefinitionsService.HistorySymbolCategoryPieChart; } public GetHistorySymbolTypePieChart(): Chart { return this.HomeChartDefinitionsService.HistorySymbolTypePieChart; } public GetForecastPie(): Chart { return this.HomeChartDefinitionsService.ForecastPieChart; } + public GetForecastAverageLine(): Chart { return this.HomeChartDefinitionsService.ForecastAverageLineChart; } + public GetForecastAveragePie(): Chart { return this.HomeChartDefinitionsService.ForecastAveragePieChart; } + public GetForecastAmountComparsionKindPie(): Chart { return this.HomeChartDefinitionsService.ForecastAmountComparsionKindPieChart; } + public GetForecastAmountComparsionSizePie(): Chart { return this.HomeChartDefinitionsService.ForecastAmountComparsionSizePieChart; } } diff --git a/Core/Core/ClientApp/src/app/interfaces/IForecastTransactionContainer.js b/Core/Core/ClientApp/src/app/interfaces/IForecastTransactionContainer.js new file mode 100644 index 0000000000000000000000000000000000000000..a57686b13b9606a2332fa1875c63530cd7321ff2 --- /dev/null +++ b/Core/Core/ClientApp/src/app/interfaces/IForecastTransactionContainer.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=IForecastTransactionContainer.js.map \ No newline at end of file diff --git a/Core/Core/ClientApp/src/app/interfaces/IForecastTransactionContainer.js.map b/Core/Core/ClientApp/src/app/interfaces/IForecastTransactionContainer.js.map new file mode 100644 index 0000000000000000000000000000000000000000..dcb04aa7bef410220af3bf7bdd5dcf473ea8e9a2 --- /dev/null +++ b/Core/Core/ClientApp/src/app/interfaces/IForecastTransactionContainer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"IForecastTransactionContainer.js","sourceRoot":"","sources":["IForecastTransactionContainer.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/Core/Core/ClientApp/src/app/interfaces/IForecastTransactionContainer.ts b/Core/Core/ClientApp/src/app/interfaces/IForecastTransactionContainer.ts new file mode 100644 index 0000000000000000000000000000000000000000..309f8dab7992b9ac387098198ff4b1e67ac30ec6 --- /dev/null +++ b/Core/Core/ClientApp/src/app/interfaces/IForecastTransactionContainer.ts @@ -0,0 +1,7 @@ +import { ITransaction } from "./ITransaction"; + +export interface IForecastTransactionContainer { + averagePrediction: ITransaction[][]; + amountPrediction: ITransaction[]; + neuralPrediction: ITransaction[]; +} diff --git a/Core/Core/ClientApp/src/app/interfaces/IFutureTransaction.ts b/Core/Core/ClientApp/src/app/interfaces/IFutureTransaction.ts index 70a14af430c777920078be13230f63d7e0c9366c..36da943fe401d78d42c7f6b03853182d298e5b11 100644 --- a/Core/Core/ClientApp/src/app/interfaces/IFutureTransaction.ts +++ b/Core/Core/ClientApp/src/app/interfaces/IFutureTransaction.ts @@ -1,5 +1,5 @@ export interface IFutureTransaction { position: number; name: string; - amount: number; + amount: string; } diff --git a/Core/Core/ClientApp/src/app/interfaces/ITransaction.ts b/Core/Core/ClientApp/src/app/interfaces/ITransaction.ts index a60c63dce15726ade0ca09a043891e590414be39..bf3fe2f23afa0731b982d586c84ff745c2601f63 100644 --- a/Core/Core/ClientApp/src/app/interfaces/ITransaction.ts +++ b/Core/Core/ClientApp/src/app/interfaces/ITransaction.ts @@ -2,4 +2,6 @@ export interface ITransaction { amount: number; count: number; name: string; + sizeType: string; + repetitive: boolean; } diff --git a/Core/Core/ClientApp/src/app/interfaces/ITransactionSumsContainer.ts b/Core/Core/ClientApp/src/app/interfaces/ITransactionSumsContainer.ts index 352425f633d5c634df4dd99868cef46ac4d42be8..500bfd6672d004c0753be8d22821112faef5face 100644 --- a/Core/Core/ClientApp/src/app/interfaces/ITransactionSumsContainer.ts +++ b/Core/Core/ClientApp/src/app/interfaces/ITransactionSumsContainer.ts @@ -2,9 +2,6 @@ import { ITransaction } from "./ITransaction"; export interface ITransactionSumsContainer { expenses: number[]; - smallCount: number; - mediumCount: number; - hugeCount: number; expensesPerSymbolCategory: ITransaction[]; expensesPerSymbolType: ITransaction[]; expensesPerSize: ITransaction[]; diff --git a/Core/Core/Core.csproj b/Core/Core/Core.csproj index fc658cc4b23da0f969e664700917027bb2200932..89bc0d6fc31a7b7039c955fa989681461f6b5649 100644 --- a/Core/Core/Core.csproj +++ b/Core/Core/Core.csproj @@ -44,6 +44,7 @@ <None Remove="ClientApp\src\app\home\components\import\import.service.ts" /> <None Remove="ClientApp\src\app\interfaces\IDialogData.ts" /> <None Remove="ClientApp\src\app\interfaces\IFile.ts" /> + <None Remove="ClientApp\src\app\interfaces\IForecastTransactionContainer.ts" /> <None Remove="ClientApp\src\app\interfaces\IFutureTransaction.ts" /> <None Remove="ClientApp\src\app\interfaces\IRequestFiles.ts" /> <None Remove="ClientApp\src\app\interfaces\ITransaction.ts" /> @@ -67,6 +68,7 @@ <TypeScriptCompile Include="ClientApp\src\app\home\components\import\import.service.ts" /> <TypeScriptCompile Include="ClientApp\src\app\interfaces\IDialogData.ts" /> <TypeScriptCompile Include="ClientApp\src\app\interfaces\IFile.ts" /> + <TypeScriptCompile Include="ClientApp\src\app\interfaces\IForecastTransactionContainer.ts" /> <TypeScriptCompile Include="ClientApp\src\app\interfaces\IFutureTransaction.ts" /> <TypeScriptCompile Include="ClientApp\src\app\interfaces\IRequestFiles.ts" /> <TypeScriptCompile Include="ClientApp\src\app\interfaces\ITransaction.ts" />