BlockTimeFactory.php
2 months ago
DayOffFactory.php
5 years ago
PeriodFactory.php
2 years ago
PeriodLocationFactory.php
3 years ago
PeriodServiceFactory.php
7 years ago
SpecialDayFactory.php
7 years ago
SpecialDayPeriodFactory.php
2 years ago
SpecialDayPeriodLocationFactory.php
3 years ago
SpecialDayPeriodServiceFactory.php
7 years ago
TimeOutFactory.php
7 years ago
WeekDayFactory.php
7 years ago
BlockTimeFactory.php
90 lines
| 1 | <?php |
| 2 | |
| 3 | namespace AmeliaBooking\Domain\Factory\Schedule; |
| 4 | |
| 5 | use AmeliaBooking\Domain\Collection\Collection; |
| 6 | use AmeliaBooking\Domain\Entity\Schedule\BlockTime; |
| 7 | use AmeliaBooking\Domain\Common\Exceptions\InvalidArgumentException; |
| 8 | use AmeliaBooking\Domain\Factory\User\UserFactory; |
| 9 | use AmeliaBooking\Domain\Services\DateTime\DateTimeService; |
| 10 | use AmeliaBooking\Domain\ValueObjects\DateTime\DateTimeValue; |
| 11 | use AmeliaBooking\Domain\ValueObjects\Number\Integer\Id; |
| 12 | use AmeliaBooking\Domain\ValueObjects\String\Name; |
| 13 | use DateTimeZone; |
| 14 | |
| 15 | class BlockTimeFactory |
| 16 | { |
| 17 | /** |
| 18 | * @param $data |
| 19 | * @return BlockTime |
| 20 | * @throws InvalidArgumentException |
| 21 | */ |
| 22 | public static function create($data): BlockTime |
| 23 | { |
| 24 | $blockTime = new BlockTime( |
| 25 | new Name($data['name']), |
| 26 | $data['userId'] ? new Id($data['userId']) : null, |
| 27 | new DateTimeValue(DateTimeService::getCustomDateTimeObject($data['startDate'])), |
| 28 | new DateTimeValue(DateTimeService::getCustomDateTimeObject($data['endDate'])), |
| 29 | ); |
| 30 | |
| 31 | if (isset($data['id'])) { |
| 32 | $blockTime->setId(new Id($data['id'])); |
| 33 | } |
| 34 | |
| 35 | if (isset($data['user'])) { |
| 36 | $blockTime->setUser(UserFactory::create($data['user'])); |
| 37 | } |
| 38 | |
| 39 | return $blockTime; |
| 40 | } |
| 41 | |
| 42 | |
| 43 | /** |
| 44 | * @param array $rows |
| 45 | * |
| 46 | * @return Collection |
| 47 | * @throws InvalidArgumentException |
| 48 | */ |
| 49 | public static function createCollection($rows) |
| 50 | { |
| 51 | $blockTimes = []; |
| 52 | |
| 53 | foreach ($rows as $row) { |
| 54 | $startDate = $row['startDate']; |
| 55 | $endDate = $row['endDate']; |
| 56 | $userId = isset($row['userId']) ? $row['userId'] : null; |
| 57 | |
| 58 | $blockTimes[$row['id']] = [ |
| 59 | 'id' => $row['id'], |
| 60 | 'userId' => $row['userId'], |
| 61 | 'name' => $row['name'], |
| 62 | 'startDate' => DateTimeService::getCustomDateTimeFromUtc($startDate), |
| 63 | 'endDate' => DateTimeService::getCustomDateTimeFromUtc($endDate), |
| 64 | ]; |
| 65 | |
| 66 | if ($userId) { |
| 67 | $blockTimes[$row['id']]['user'] = |
| 68 | [ |
| 69 | 'id' => $userId, |
| 70 | 'firstName' => $row['user_firstName'], |
| 71 | 'lastName' => $row['user_lastName'], |
| 72 | 'fullName' => $row['user_fullName'], |
| 73 | 'type' => 'provider', |
| 74 | ]; |
| 75 | } |
| 76 | } |
| 77 | |
| 78 | $collection = new Collection(); |
| 79 | |
| 80 | foreach ($blockTimes as $key => $value) { |
| 81 | $collection->addItem( |
| 82 | self::create($value), |
| 83 | $key |
| 84 | ); |
| 85 | } |
| 86 | |
| 87 | return $collection; |
| 88 | } |
| 89 | } |
| 90 |