TimetableDateslotStrategy::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Timegridio\Concierge\Timetable\Strategies;
4
5
use Timegridio\Concierge\Models\Vacancy;
6
use Timegridio\Concierge\Timetable\Timetable;
7
8
class TimetableDateslotStrategy extends BaseTimetableStrategy implements TimetableStrategyInterface
9
{
10 1
    public function __construct(Timetable $timetable)
11
    {
12 1
        $this->timetable = $timetable;
13 1
    }
14
15 1
    protected function initTimetable($starting, $days)
16
    {
17 1
        $this->timetable
18 1
             ->format('date.service.time')
19 1
             ->from($starting)
20 1
             ->future($days)
21 1
             ->init();
22 1
    }
23
24
    /**
25
     * Build timetable.
26
     *
27
     * @param \Illuminate\Database\Eloquent\Collection $vacancies
28
     * @param string                                  $starting
29
     * @param int                                     $days
30
     *
31
     * @return array
32
     */
33 1
    public function buildTimetable($vacancies, $starting = 'today', $days = 1)
34
    {
35 1
        $this->initTimetable($starting, $days);
36
37 1
        foreach ($vacancies as $vacancy) {
38 1
            $this->updateTimeslots($vacancy);
39
        }
40
41 1
        return $this->timetable->get();
42
    }
43
44 1
    protected function updateTimeslots(Vacancy $vacancy)
45
    {
46 1
        $fromTime = $vacancy->start_at;
47 1
        $toTime = $vacancy->finish_at;
48
49 1
        $capacity = $vacancy->getAvailableCapacityBetween($fromTime->timezone('UTC'), $toTime->timezone('UTC'));
50
51 1
        $time = $fromTime->timezone($vacancy->business->timezone)->format('H:i:s');
52
53 1
        $this->timetable->capacity($vacancy->date, $time, $vacancy->service->slug, $capacity);
54 1
    }
55
}
56