289 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			289 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
@extends('base')
 | 
						||
@section('body-class', 'region')
 | 
						||
@section('header')
 | 
						||
<nav>
 | 
						||
  <strong>{{ $region[0]['region_name'] }}</strong>
 | 
						||
  <ul>
 | 
						||
    <li><a href="/">Start</a></li>
 | 
						||
    @foreach($regions as $r)
 | 
						||
    @if($r['region_id'] != $region_id)
 | 
						||
    <li><a href="/region/{{ $r['region_id'] }}">{{ $r['region_name'] }}</a></li>
 | 
						||
    @endif
 | 
						||
    @endforeach
 | 
						||
  </ul>
 | 
						||
</nav>
 | 
						||
@endsection
 | 
						||
@section('main')
 | 
						||
<article style="grid-area: timeline;">
 | 
						||
    <div id="timeline"></div>
 | 
						||
</article>
 | 
						||
<article class="header" style="grid-area: chart6;">
 | 
						||
    <header>
 | 
						||
        <h2 id="prediction-title">Auslastung Vorhersage</h2>
 | 
						||
    </header>
 | 
						||
    <div id="chart-prediction"></div>
 | 
						||
</article>
 | 
						||
<article class="header" style="grid-area: chart1;">
 | 
						||
    <header>
 | 
						||
        <h2 id="belegung-title">Gesamtauslastung</h2>
 | 
						||
    </header>
 | 
						||
    <div id="chart-heatmap"></div>
 | 
						||
</article>
 | 
						||
<article class="header" style="grid-area: chart3;">
 | 
						||
    <header>
 | 
						||
        <h2>
 | 
						||
            Auslastung nach Monat am 2024-04-15T07:06:22
 | 
						||
        </h2>
 | 
						||
    </header>
 | 
						||
    <div id="chart-capacity-monthly">
 | 
						||
    </div>
 | 
						||
</article>
 | 
						||
<article class="header" style="grid-area: chart2;">
 | 
						||
    <header>
 | 
						||
        <h2>
 | 
						||
            Entwicklung der Auslastung
 | 
						||
        </h2>
 | 
						||
        <button popovertarget="chart-capacity-popover"></button>
 | 
						||
        <div id="chart-capacity-popover" popover>
 | 
						||
            <h2>Erkläung zum Diagramm «Entwicklung der Auslastung»</h2>
 | 
						||
            <p>Das Liniendiagramm zeigt die Auslastung von Regionen. 100 % = die Region ist kaum ausgelastet; 100 % der Mietobjekte sind verfügbar. 0 % = Die Region ist komplett ausgelastet; Es stehen keine Mietangebote zur Verfügung.</p>
 | 
						||
        </div>
 | 
						||
    </header>
 | 
						||
    <div id="chart-capacity"></div>
 | 
						||
</article>
 | 
						||
<article class="header" style="grid-area: chart4;">
 | 
						||
    <header>
 | 
						||
        <h2>
 | 
						||
            Auslastung Tage für Monat
 | 
						||
        </h2>
 | 
						||
    </header>
 | 
						||
    <div id="chart-capacity-daily">
 | 
						||
</article>
 | 
						||
 | 
						||
<script type="module">
 | 
						||
 | 
						||
const sharedOptions = {
 | 
						||
  basic: {
 | 
						||
    color: ['#9ecae1','#6baed6','#4292c6','#2171b5','#084594'],
 | 
						||
    grid: {
 | 
						||
      top: 20,
 | 
						||
      left: 60,
 | 
						||
      right: 0,
 | 
						||
      bottom: 50
 | 
						||
    },
 | 
						||
    name: (opt) => {
 | 
						||
      return {
 | 
						||
        name: opt.name,
 | 
						||
        nameLocation: opt.location,
 | 
						||
        nameGap: 24,
 | 
						||
        nameTextStyle: {
 | 
						||
          fontWeight: 'bold',
 | 
						||
        },
 | 
						||
      }
 | 
						||
    }
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
const chartCapacity = document.getElementById('chart-capacity');
 | 
						||
const cCapacity = echarts.init(chartCapacity);
 | 
						||
 | 
						||
const cCapacityOptions = {
 | 
						||
  legend: {
 | 
						||
      data: ['Auslastung Region', 'Auslastung alle Regionen']
 | 
						||
  },
 | 
						||
  tooltip: {
 | 
						||
    trigger: 'axis',
 | 
						||
    valueFormatter: (value) => value.toFixed(2)+' %'
 | 
						||
  },
 | 
						||
  grid: {
 | 
						||
    top: 20,
 | 
						||
    left: 25,
 | 
						||
    right: 10,
 | 
						||
    bottom: 20,
 | 
						||
    containLabel: true
 | 
						||
  },
 | 
						||
  xAxis: {
 | 
						||
    type: 'category',
 | 
						||
    boundaryGap: false,
 | 
						||
    data: {!! json_encode($regionCapacities[1]['dates']) !!},
 | 
						||
    name: 'Zeitpunkt Scraping',
 | 
						||
    nameLocation: 'center',
 | 
						||
    nameGap: 24,
 | 
						||
    nameTextStyle: {
 | 
						||
      fontWeight: 'bold',
 | 
						||
    }
 | 
						||
  },
 | 
						||
  yAxis: {
 | 
						||
    type: 'value',
 | 
						||
    min: 0,
 | 
						||
    max: 100,
 | 
						||
    name: 'Auslastung in Prozent',
 | 
						||
    nameLocation: 'center',
 | 
						||
    nameGap: 38,
 | 
						||
    nameTextStyle: {
 | 
						||
      fontWeight: 'bold',
 | 
						||
    }
 | 
						||
  },
 | 
						||
  series: [{
 | 
						||
      name: 'Auslastung alle Regionen',
 | 
						||
      type: 'line',
 | 
						||
      symbolSize: 7,
 | 
						||
      data: {!! json_encode($regionCapacities[0]['capacities']) !!}
 | 
						||
    },
 | 
						||
    {
 | 
						||
        name: 'Auslastung Region',
 | 
						||
        type: 'line',
 | 
						||
        symbolSize: 7,
 | 
						||
        data: {!! json_encode($regionCapacities[1]['capacities']) !!}
 | 
						||
    }]
 | 
						||
};
 | 
						||
 | 
						||
cCapacity.setOption(cCapacityOptions);
 | 
						||
 | 
						||
const chartPrediction = document.getElementById('chart-prediction');
 | 
						||
const cPrediction = echarts.init(chartPrediction);
 | 
						||
 | 
						||
const cPredictionOptions = {
 | 
						||
  legend: {
 | 
						||
      data: ['Moving Average', 'Earlier', 'Later']
 | 
						||
  },
 | 
						||
  tooltip: {
 | 
						||
    trigger: 'axis',
 | 
						||
    valueFormatter: (value) => value.toFixed(2)+' %'
 | 
						||
  },
 | 
						||
  grid: {
 | 
						||
    top: 20,
 | 
						||
    left: 25,
 | 
						||
    right: 10,
 | 
						||
    bottom: 20,
 | 
						||
    containLabel: true
 | 
						||
  },
 | 
						||
  xAxis: {
 | 
						||
    type: 'category',
 | 
						||
    boundaryGap: false,
 | 
						||
    data: {!! json_encode($prediction['dates']) !!},
 | 
						||
    name: 'Zeitpunkt Scraping',
 | 
						||
    nameLocation: 'center',
 | 
						||
    nameGap: 24,
 | 
						||
    nameTextStyle: {
 | 
						||
      fontWeight: 'bold',
 | 
						||
    }
 | 
						||
  },
 | 
						||
  yAxis: {
 | 
						||
    type: 'value',
 | 
						||
    min: 0,
 | 
						||
    max: 1,
 | 
						||
    name: 'Auslastung in Prozent',
 | 
						||
    nameLocation: 'center',
 | 
						||
    nameGap: 38,
 | 
						||
    nameTextStyle: {
 | 
						||
      fontWeight: 'bold',
 | 
						||
    }
 | 
						||
  },
 | 
						||
  series: [{
 | 
						||
      name: 'Moving Average',
 | 
						||
      type: 'line',
 | 
						||
      symbolSize: 7,
 | 
						||
      data: {!! json_encode($prediction['movAvg']) !!}
 | 
						||
    },
 | 
						||
    {
 | 
						||
        name: 'Earlier',
 | 
						||
        type: 'line',
 | 
						||
        symbolSize: 7,
 | 
						||
        data: {!! json_encode($prediction['cap_earlierTimeframe']) !!}
 | 
						||
    },
 | 
						||
  {
 | 
						||
        name: 'Later',
 | 
						||
        type: 'line',
 | 
						||
        symbolSize: 7,
 | 
						||
        data: {!! json_encode($prediction['cap_laterTimeframe']) !!}
 | 
						||
    }]
 | 
						||
};
 | 
						||
 | 
						||
cPrediction.setOption(cPredictionOptions);
 | 
						||
 | 
						||
 | 
						||
const chartHeatmap = document.getElementById('chart-heatmap');
 | 
						||
const cHeatmap = echarts.init(chartHeatmap);
 | 
						||
const cHeatmapOptions = {
 | 
						||
  animation: false,
 | 
						||
  tooltip: {
 | 
						||
    position: 'top'
 | 
						||
  },
 | 
						||
  grid: {
 | 
						||
    top: 30,
 | 
						||
    right: 45,
 | 
						||
    bottom: 50,
 | 
						||
    left: 5
 | 
						||
  },
 | 
						||
  dataZoom: [{
 | 
						||
      type: 'slider'
 | 
						||
    },
 | 
						||
    {
 | 
						||
      type: 'slider',
 | 
						||
      show: true,
 | 
						||
      yAxisIndex: 0,
 | 
						||
  }],
 | 
						||
  xAxis: {
 | 
						||
    show: false,
 | 
						||
    name: 'Kurzzeitmietobjekt',
 | 
						||
    type: 'category',
 | 
						||
    data: {!! json_encode($regionPropertiesCapacities['scrapeDates']) !!},
 | 
						||
    splitArea: {
 | 
						||
      show: false
 | 
						||
    },
 | 
						||
    axisLabel: {
 | 
						||
      show: true,
 | 
						||
    }
 | 
						||
  },
 | 
						||
  yAxis: {
 | 
						||
    show: false,
 | 
						||
    type: 'category',
 | 
						||
    data: {!! json_encode($regionPropertiesCapacities['property_ids']) !!},
 | 
						||
    splitArea: {
 | 
						||
      show: true
 | 
						||
    }
 | 
						||
  },
 | 
						||
  visualMap: {
 | 
						||
    type: 'piecewise',
 | 
						||
    min: 0,
 | 
						||
    max: 100,
 | 
						||
    calculable: true,
 | 
						||
    orient: 'horizontal',
 | 
						||
    left: 'center',
 | 
						||
    top: 0,
 | 
						||
    formatter: (v1, v2) => {
 | 
						||
      return `${v1} – ${v2} %`;
 | 
						||
    },
 | 
						||
    inRange: {
 | 
						||
      color: sharedOptions.basic.color,
 | 
						||
    },
 | 
						||
  },
 | 
						||
  series: [
 | 
						||
    {
 | 
						||
      name: 'Auslastung',
 | 
						||
      type: 'heatmap',
 | 
						||
      blurSize: 0,
 | 
						||
      data: {!! json_encode($regionPropertiesCapacities['values']) !!},
 | 
						||
      label: {
 | 
						||
        show: false
 | 
						||
      },
 | 
						||
      tooltip: {
 | 
						||
        formatter: (data) => {
 | 
						||
          return `Kurzzeitmietobjekte-ID: ${data.data[1]}<br />Datum Scraping: ${data.data[0]}<br/>Auslastung: ${data.data[2].toFixed(2)} %`
 | 
						||
        },
 | 
						||
      },
 | 
						||
      emphasis: {
 | 
						||
        itemStyle: {
 | 
						||
          borderColor: '#000',
 | 
						||
          borderWidth: 2
 | 
						||
        }
 | 
						||
      }
 | 
						||
    }
 | 
						||
  ]
 | 
						||
}
 | 
						||
 | 
						||
cHeatmap.setOption(cHeatmapOptions);
 | 
						||
</script>
 | 
						||
@endsection
 |