ikucheriavenko
10/2/2017 - 11:00 AM

AvailabilityNormalizer.php, DateTime/Carbon example to work

<?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());
}