<?php
require __DIR__.'/../vendor/autoload.php';
use schema\Container;
use Carbon\Carbon;
class AvailabilityNormalizer
{
public function normalize(Container $model)
{
if (!$model->has("+availability") || !$model->has("+changeover")) {
return false;
}
$model->set("unitAvailability.availabilityDefault", "N");
$model->set("unitAvailability.changeoverDefault", "0");
// eg 2017-09-05
$changeOverStart = $model->get("+changeover.startDatum");
$changeOverStart= Carbon::instance(new \DateTime($changeOverStart));
$firstOfMonth = $changeOverStart->copy()->startOfMonth();
// eg 2017-09-01
$model->set("unitAvailability.dateRange.startDate", $firstOfMonth->toDateString());
$changeOverSequence = $model->get("+changeover.sequence");
$endDate = $changeOverStart->copy()->addDay(strlen($changeOverSequence)- 1);
$model->set("unitAvailability.dateRange.endDate", $endDate->toDateString());
// unitAvailability.configuration.availability
$availabilityStart = Carbon::instance(new \DateTime($model->get("+availability.startDatum")));
$availabilitySequence = $model->get("+availability.sequence");
$daysBetweenSequenceStartAndFirstDayOfMonth = $firstOfMonth->diffInDays($availabilityStart);
$firstDayIndexInSequence = $daysBetweenSequenceStartAndFirstDayOfMonth + 1;
$daysBetweenSequenceStartAndEndDate = $endDate->diffInDays($availabilityStart);
$endDateIndexInSequence = $daysBetweenSequenceStartAndEndDate + 1;
$sequenceInDateRange = substr($availabilitySequence, $firstDayIndexInSequence, $endDateIndexInSequence);
$model->set("unitAvailability.configuration.availability", $sequenceInDateRange);
// unitAvailability.configuration.changeover
$disabledChangeOverSequencePartLength = $changeOverStart->diffInDays($firstOfMonth);
for ($i = 0; $i < $disabledChangeOverSequencePartLength -1; $i++) {
$changeOverSequence = "0" . $changeOverSequence;
}
$model->set("unitAvailability.configuration.changeover", $changeOverSequence);
// unitAvailability.configuration.minStay
// unitAvailability.configuration.maxStay
// unitAvailability.configuration.minPriorNotify
// remove previous schema parts
$model->remove("+availability");
$model->remove("+changeover");
return true;
}
}
if (php_sapi_name() == 'cli') {
$normalizer = new AvailabilityNormalizer();
echo $normalizer->normalize(new Container());
}