Passed
Pull Request — master (#20)
by Patrick
02:59
created

PeriodicalActivityDataImportProcess   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
c 1
b 0
f 0
dl 0
loc 36
ccs 0
cts 15
cp 0
rs 10
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A start() 0 6 1
A generateActivity() 0 16 2
A __construct() 0 4 1
1
<?php
2
3
/*
4
 * This file is part of forecast.it.fill project.
5
 * (c) Patrick Jaja <[email protected]>
6
 * This source file is subject to the MIT license that is bundled
7
 * with this source code in the file LICENSE.
8
 */
9
10
namespace ForecastAutomation\PeriodicalActivityDataImport\Business;
11
12
use ForecastAutomation\Activity\Shared\Dto\ActivityDto;
13
use ForecastAutomation\Activity\Shared\Dto\ActivityDtoCollection;
14
use ForecastAutomation\ForecastClient\ForecastClientFacade;
15
use ForecastAutomation\PeriodicalActivityDataImport\Shared\Dto\PeriodicalActivityConfigDto;
16
17
class PeriodicalActivityDataImportProcess
18
{
19
    public const PERIODICAL_SUFFIX = 'Geplanter Termin';
20
21
    public function __construct(
22
        private PeriodicalActivityConfigReader $periodicalActivityConfigReader,
23
        private ForecastClientFacade $forecastClientFacade
24
    ) {
25
    }
26
27
    public function start(string $periodicalDate): int
28
    {
29
        return $this->forecastClientFacade->writeActivities(
30
            $this->generateActivity(
31
                $this->periodicalActivityConfigReader->readPeriodicalConfig($periodicalDate),
32
                $periodicalDate
33
            )
34
        );
35
    }
36
37
    private function generateActivity(
38
        array $periodicalConfigDtoCollection,
39
        string $periodicalDate
40
    ): ActivityDtoCollection {
41
        $activityDtoArray = [];
42
        /** @var PeriodicalActivityConfigDto $periodicalConfigDto */
43
        foreach ($periodicalConfigDtoCollection as $periodicalConfigDto) {
44
            $activityDtoArray[] = new ActivityDto(
45
                $periodicalConfigDto->project_id,
46
                sprintf('%s: %s', self::PERIODICAL_SUFFIX, $periodicalConfigDto->note),
47
                new \DateTime(date('d-m-Y', strtotime($periodicalDate))),
48
                $periodicalConfigDto->duration
49
            );
50
        }
51
52
        return new ActivityDtoCollection(...$activityDtoArray);
53
    }
54
}
55