From a5a21fb925e1279d892fceb0dabd5dc515dd4d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gi=C3=B2=20Diani?= Date: Tue, 14 Jan 2025 22:11:31 +0100 Subject: [PATCH] =?UTF-8?q?=C3=9Cberarbeitung=20Dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/app/Api.php | 7 +- dashboard/app/Chart.php | 2 +- dashboard/resources/css/app.css | 12 +- dashboard/resources/views/overview.blade.php | 6 +- dashboard/resources/views/property.blade.php | 57 ++++++-- dashboard/resources/views/region.blade.php | 26 +++- dashboard/routes/web.php | 91 ++++++------ .../diagrams/Systemarchitektur_C4.drawio | 133 +++++++++++++++--- etl/src/data/database.py | 1 + etl/src/data/etl_region_capacities.py | 2 +- 10 files changed, 242 insertions(+), 95 deletions(-) diff --git a/dashboard/app/Api.php b/dashboard/app/Api.php index f98daf7..a4b1663 100644 --- a/dashboard/app/Api.php +++ b/dashboard/app/Api.php @@ -8,11 +8,6 @@ use Illuminate\Support\Facades\Http; class Api { - public function __construct() - { - - } - public static function get(string $path, string $query = ''): ?array { @@ -20,7 +15,7 @@ class Api $request = $endpoint.$path; if (Cache::has($request)) { - return Cache::get($request); + // return Cache::get($request); } $get = Http::timeout(1600)->get($request); diff --git a/dashboard/app/Chart.php b/dashboard/app/Chart.php index 0f6a908..948a72e 100644 --- a/dashboard/app/Chart.php +++ b/dashboard/app/Chart.php @@ -5,7 +5,7 @@ namespace App; class Chart { public static function colors(int $count = 5){ - $colors = ['#fff7fb','#ece7f2','#d0d1e6','#a6bddb','#74a9cf','#3690c0','#0570b0','#045a8d','#023858']; + $colors = ['#bfd3e6','#8c96c6','#88419d','#810f7c','#4d004b']; return json_encode($colors); } diff --git a/dashboard/resources/css/app.css b/dashboard/resources/css/app.css index dfdea09..e6b6e6c 100644 --- a/dashboard/resources/css/app.css +++ b/dashboard/resources/css/app.css @@ -59,7 +59,7 @@ span + button{ } button[popovertarget]{ - background: no-repeat center / .3em #5470c6 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 192 512'%3E%3C!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--%3E%3Cpath fill='%23fff' d='M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-192-32 0c-17.7 0-32-14.3-32-32z'/%3E%3C/svg%3E%0A"); + background: no-repeat center / .3em #4d004b url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 192 512'%3E%3C!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--%3E%3Cpath fill='%23fff' d='M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-192-32 0c-17.7 0-32-14.3-32-32z'/%3E%3C/svg%3E%0A"); cursor: pointer; display: inline-block; width: 1.5em; @@ -242,7 +242,7 @@ article>header>h2{ } .leaflet-marker-icon span{ - background: blue; + background: #4d004b; width: 2rem; height: 2rem; display: block; @@ -256,17 +256,17 @@ article>header>h2{ /*['#9ecae1','#6baed6','#4292c6','#2171b5','#084594'*/ .leaflet-marker-icon.region1 span{ - background: #9ecae1; + background: #8c96c6; } .leaflet-marker-icon.region2 span{ - background: #6baed6; + background: #88419d; } .leaflet-marker-icon.region3 span{ - background: #4292c6; + background: #810f7c; } .leaflet-marker-icon.region4 span{ - background: #2171b5; + background: #4d004b; } diff --git a/dashboard/resources/views/overview.blade.php b/dashboard/resources/views/overview.blade.php index 292f68b..a6a079f 100644 --- a/dashboard/resources/views/overview.blade.php +++ b/dashboard/resources/views/overview.blade.php @@ -49,7 +49,7 @@ const sharedOptions = { basic: { - color: ['#9ecae1','#6baed6','#4292c6','#2171b5','#08519c','#08306b'], + color: {!! $chartOptions['colors'] !!}, grid: { top: 20, left: 60, @@ -165,7 +165,7 @@ const cPropsPerRegionOptions = { fontWeight: 'bold', }, type: 'category', - data: {!! $propsPerRegion[0] !!} + data: {!! $propsPerRegion[1] !!} }, yAxis: { type: 'value', @@ -178,7 +178,7 @@ const cPropsPerRegionOptions = { }, series: [ { - data: {!! $propsPerRegion[1] !!}, + data: {!! $propsPerRegion[2] !!}, type: 'bar', itemStyle: { color: (e) => { diff --git a/dashboard/resources/views/property.blade.php b/dashboard/resources/views/property.blade.php index da91f28..7ca69a1 100644 --- a/dashboard/resources/views/property.blade.php +++ b/dashboard/resources/views/property.blade.php @@ -11,12 +11,6 @@
Zum letzten mal gefunden
{{ $base['last_found'] }}
-

Kurzzeitmietobjekte in der Nähe

- @endsection @@ -27,8 +21,13 @@

- Belegung am -

+ Kalenderansicht der Belegung am {{ $startDate }} + +
@@ -43,7 +42,7 @@

- Auslastung nach Monat am 2024-04-15T07:06:22 + Belegung Mietobjekt Monate am {{ $startDate }}

@@ -65,12 +64,35 @@

- Auslastung Tage für Monat + Belegung Mietobjekt Tage am {{ $startDate }}

@endsection diff --git a/dashboard/routes/web.php b/dashboard/routes/web.php index b1a67db..444d7fa 100644 --- a/dashboard/routes/web.php +++ b/dashboard/routes/web.php @@ -36,8 +36,57 @@ Route::get('/', function () { "propsPerRegion" => [json_encode($propsPerRegionId), json_encode($propsPerRegionName), json_encode($propsPerRegionCounts)]]); }); +Route::get('/region/{id}', function (int $id) { + + $regionBaseAll = Api::regionBase(-1); + $regionBaseAll[] = ['region_name' => 'Alle Regionen', 'region_id' => -1]; + $regionBaseRegion = $id >= 0 ? Api::regionBase($id) : [['region_name' => 'Alle Regionen']]; + + $regionPropertiesCapacities = Api::regionPropertiesCapacities($id); + $regionCapacitiesRegion = Api::regionCapacities($id); + $regionCapacitiesAll = Api::regionCapacities(-1); + + $regionCapacitiesMonthly = []; + $regionCapacitiesDaily = []; + $regionPredictions = []; + + foreach ($regionCapacitiesRegion['dates'] as $date) { + $regionCapacitiesMonthly[] = Api::regionCapacitiesMonthly($id, $date); + $regionCapacitiesDaily[] = Api::regionCapacitiesDaily($id, $date); + $regionPredictions[] = Api::regionMovingAverage($id, $date); + } + + $chartOptions = [ + 'colors' => Chart::colors() + ]; + + $regionCapacities = [ + 'all' => $regionCapacitiesAll, + 'region' => $regionCapacitiesRegion, + 'region_monthly' => $regionCapacitiesMonthly, + 'region_daily' => $regionCapacitiesDaily + + ]; + + return view('region', [ + 'chartOptions' => $chartOptions, + 'startDate' => $regionCapacitiesRegion['dates'][0], + 'regions' => $regionBaseAll, + 'region' => $regionBaseRegion, + 'region_id' => $id, + 'regionCapacities' => $regionCapacities, + 'regionPropertiesCapacities' => $regionPropertiesCapacities, + 'predictions' => $regionPredictions]); + + +}); + Route::get('/property/{id}', function (int $id) { + $chartOptions = [ + 'colors' => Chart::colors() + ]; + $propertyBase = Api::propertyBase($id); $calendars = Api::propertyExtractions($id); $propertyCapacities = Api::propertyCapacities($id); @@ -85,6 +134,8 @@ Route::get('/property/{id}', function (int $id) { } return view('property', [ + 'chartOptions' => $chartOptions, + 'startDate' => $propertyCapacities['dates'][0], 'base' => $propertyBase[0], 'extractiondates' => json_encode($propertyCapacities['dates']), 'calendar' => $data, @@ -98,43 +149,3 @@ Route::get('/property/{id}', function (int $id) { }); -Route::get('/region/{id}', function (int $id) { - - $regionBaseAll = Api::regionBase(-1); - $regionBaseAll[] = ['region_name' => 'Alle Regionen', 'region_id' => -1]; - $regionBaseRegion = $id >= 0 ? Api::regionBase($id) : [['region_name' => 'Alle Regionen']]; - - $regionPropertiesCapacities = Api::regionPropertiesCapacities($id); - $regionCapacitiesRegion = Api::regionCapacities($id); - $regionCapacitiesAll = Api::regionCapacities(-1); - - $regionCapacitiesMonthly = []; - $regionCapacitiesDaily = []; - $regionPredictions = []; - - foreach ($regionCapacitiesRegion['dates'] as $date) { - $regionCapacitiesMonthly[] = Api::regionCapacitiesMonthly($id, $date); - $regionCapacitiesDaily[] = Api::regionCapacitiesDaily($id, $date); - $regionPredictions[] = Api::regionMovingAverage($id, $date); - } - - $regionCapacities = [ - 'all' => $regionCapacitiesAll, - 'region' => $regionCapacitiesRegion, - 'region_monthly' => $regionCapacitiesMonthly, - 'region_daily' => $regionCapacitiesDaily - - ]; - - dump($regionPredictions); - - return view('region', [ - 'regions' => $regionBaseAll, - 'region' => $regionBaseRegion, - 'region_id' => $id, - 'regionCapacities' => $regionCapacities, - 'regionPropertiesCapacities' => $regionPropertiesCapacities, - 'predictions' => $regionPredictions]); - - -}); diff --git a/documentation/diagrams/Systemarchitektur_C4.drawio b/documentation/diagrams/Systemarchitektur_C4.drawio index e281f70..ea1fc15 100644 --- a/documentation/diagrams/Systemarchitektur_C4.drawio +++ b/documentation/diagrams/Systemarchitektur_C4.drawio @@ -1,93 +1,184 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/etl/src/data/database.py b/etl/src/data/database.py index cddce55..aef93de 100644 --- a/etl/src/data/database.py +++ b/etl/src/data/database.py @@ -402,6 +402,7 @@ class Database: p.property_platform_id, p.created_at as first_found, p.last_found, + p.check_data, r.id as region_id, r.name as region_name FROM diff --git a/etl/src/data/etl_region_capacities.py b/etl/src/data/etl_region_capacities.py index 16d3418..8dea1cb 100644 --- a/etl/src/data/etl_region_capacities.py +++ b/etl/src/data/etl_region_capacities.py @@ -55,4 +55,4 @@ def region_capacities(id: int): result = {"capacities": df['capacity'].to_list(), "dates": df['scrape_date'].to_list()} etl_cache.saveObj(file, result) - return result \ No newline at end of file + return result