AvailabilityPull::handle()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 27
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
cc 3
eloc 15
nc 4
nop 0
dl 0
loc 27
ccs 0
cts 20
cp 0
crap 12
rs 9.7666
c 0
b 0
f 0
1
<?php
2
3
namespace IproSync\Jobs\Bookings;
4
5
use Illuminate\Bus\Queueable;
6
use Illuminate\Contracts\Queue\ShouldQueue;
7
use Illuminate\Foundation\Bus\Dispatchable;
8
use Illuminate\Queue\InteractsWithQueue;
9
use Illuminate\Queue\SerializesModels;
10
use IproSync\Models\Availability;
11
use LaravelIproSoftwareApi\IproSoftwareFacade;
12
13
class AvailabilityPull implements ShouldQueue
14
{
15
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
0 ignored issues
show
introduced by
The trait Illuminate\Queue\SerializesModels requires some properties which are not provided by IproSync\Jobs\Bookings\AvailabilityPull: $collectionClass, $id, $relations, $class, $keyBy
Loading history...
16
17
    protected int $propertyId;
18
    protected array $availabilityRequestParams    = [];
19
    protected array $dayAvailabilityRequestParams = [];
20
21
    public function __construct(
22
        int   $propertyId,
23
        array $availabilityRequestParams = [],
24
        array $dayAvailabilityRequestParams = []
25
    ) {
26
        $this->propertyId                   = $propertyId;
27
        $this->availabilityRequestParams    = $availabilityRequestParams;
28
        $this->dayAvailabilityRequestParams = $dayAvailabilityRequestParams;
29
    }
30
31
32
    public function handle()
33
    {
34
        $response = IproSoftwareFacade::getPropertyAvailability(
35
            $this->propertyId,
36
            [
37
                'query' => $this->availabilityRequestParams,
38
            ]
39
        )->onlySuccessful();
40
41
        $availabilities = $response->json();
42
        if (!is_array($availabilities)) {
0 ignored issues
show
introduced by
The condition is_array($availabilities) is always true.
Loading history...
43
            $availabilities = [];
44
        }
45
46
        $response = IproSoftwareFacade::getPropertyDayAvailability(
47
            $this->propertyId,
48
            [
49
                'query' => $this->dayAvailabilityRequestParams,
50
            ]
51
        )->onlySuccessful();
52
53
        $dayAvailability = $response->json();
54
        if (!is_array($dayAvailability)) {
0 ignored issues
show
introduced by
The condition is_array($dayAvailability) is always true.
Loading history...
55
            $dayAvailability = [];
56
        }
57
58
        static::createOrUpdateAvailability($this->propertyId, $availabilities, $dayAvailability);
59
    }
60
61
    public static function createOrUpdateAvailability(int $propertyId, array $availability = [], array $dayAvailability = []): ?Availability
62
    {
63
        $model = Availability::firstOrNew(['property_id' => $propertyId], )
64
                         ->fill([
65
                             'availability'     => $availability,
66
                             'day_availability' => $dayAvailability,
67
                         ])
68
                         ->fillPulled();
69
70
        $model->save();
71
72
        return $model;
73
    }
74
}
75