Consider occupancy level in groups.swiss data export

This commit is contained in:
Björn Fromme
2020-03-09 18:06:46 +01:00
parent 545c37b2e6
commit 63397fc381
@@ -121,12 +121,6 @@ class GroupsSwissService implements SingletonInterface, LoggerAwareInterface
$this->resetChart($range, $config['key'], $config['number']);
// $this->generateAvailabilityChart(
// $events,
// $config['key'],
// $config['number']
// );
$this->generateChart(
$events,
$config['key'],
@@ -135,45 +129,6 @@ class GroupsSwissService implements SingletonInterface, LoggerAwareInterface
}
}
/**
* @param array $events
* @param string $apiKey
* @param int $houseNumber
*/
protected function generateAvailabilityChart(array $events, $apiKey, $houseNumber): void
{
$itemCount = 0;
$occupancy = null;
foreach ($events as $event) {
/** @var Contingent $event */
if (null === $occupancy) {
$item = [
'from' => $event->getBegin(),
'occupancy' => $event->getOccupancy(),
];
} elseif ($occupancy !== $event->getOccupancy()) {
$item['to'] = $event->getEnd();
$this->addItem($item, 1, $apiKey, $houseNumber);
$item = [
'from' => $event->getBegin(),
'occupancy' => $event->getOccupancy(),
];
$itemCount++;
}
$occupancy = $event->getOccupancy();
}
if (!isset($item['to'])) {
$item['to'] = $event->getEnd();
$this->addItem($item, 1, $apiKey, $houseNumber);
$itemCount++;
}
$this->logger->info(sprintf('Published %d dates.', $itemCount));
}
/**
* @param Period $range
* @param string $apiKey
@@ -202,12 +157,13 @@ class GroupsSwissService implements SingletonInterface, LoggerAwareInterface
foreach ($events as $event) {
/** @var Contingent $event */
if (null === $item && Contingent::STATUS_OK !== $event->getStatus()) {
$status = $event->getStatus();
$contingentStatus = $this->getContingentStatus($event);
if (null === $item && Contingent::STATUS_OK !== $contingentStatus) {
$status = $contingentStatus;
$item = [
'from' => $event->getBegin(),
];
} elseif (true === is_array($item) && $status !== $event->getStatus()) {
} elseif (true === is_array($item) && $status !== $contingentStatus) {
$item['to'] = $event->getEnd();
$statusCode = Contingent::STATUS_ONREQUEST === $status ? 1 : 2;
$this->addItem($item, $statusCode, $apiKey, $houseNumber);
@@ -216,7 +172,30 @@ class GroupsSwissService implements SingletonInterface, LoggerAwareInterface
}
}
$this->logger->info(sprintf('Published %d blocked dates.', $itemCount));
$this->logger->info(sprintf('Published %d dates.', $itemCount));
}
/**
* @param Contingent $contingent
* @return int
*/
protected function getContingentStatus(Contingent $contingent)
{
if (in_array($contingent->getStatus(), [Contingent::STATUS_BLOCKED, Contingent::STATUS_ONREQUEST], true)) {
return $contingent->getStatus();
}
$percentageAvailable = $contingent->getPercentageAvailable();
if ($percentageAvailable <= 20) {
return Contingent::STATUS_BLOCKED;
}
if ($percentageAvailable > 20 && $percentageAvailable <= 80) {
return $contingent::STATUS_ONREQUEST;
}
return Contingent::STATUS_OK;
}
/**