Completed
Pull Request — master (#1)
by
unknown
13:14
created

SubscriptionService::getSubscriptions()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 29
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 3

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 29
ccs 11
cts 11
cp 1
rs 8.8571
cc 3
eloc 20
nc 3
nop 4
crap 3
1
<?php
2
3
namespace Speicher210\Fastbill\Api\Service\Subscription;
4
5
use Speicher210\Fastbill\Api\AbstractService;
6
use Speicher210\Fastbill\Api\Model\Feature;
7
8
/**
9
 * Service for subscriptions.
10
 */
11
class SubscriptionService extends AbstractService
12
{
13
14
    /**
15
     * Get the subscriptions.
16
     *
17
     * @param integer $customerId The customer ID.
18
     * @param string $externalCustomerId The external customer ID.
19
     * @param string $subscriptionExternalId The external subscription ID.
20
     * @param integer $subscriptionId The subscription ID.
21
     * @return Get\ApiResponse
22
     */
23 3
    public function getSubscriptions(
24
        $customerId = null,
25
        $externalCustomerId = null,
26
        $subscriptionExternalId = null,
27
        $subscriptionId = null
28
    )
29 3
    {
30 3
        $requestData = new Get\RequestData();
31 3
        $requestData->setCustomerId($customerId);
32 3
        $requestData->setExternalCustomerId($externalCustomerId);
33 3
        $requestData->setSubscriptionExternalId($subscriptionExternalId);
34
        $requestData->setSubscriptionId($subscriptionId);
35 3
36
        $request = new Get\Request($requestData);
37 3
        $apiResponse = $this->sendRequest($request, Get\ApiResponse::class);
38
39
        /** @var Get\Response $response */
40
        $response = $apiResponse->getResponse();
41
        foreach ($response->getSubscriptions() as $subscription) {
42
            $cancellationDate = $subscription->getCancellationDate();
43
            if ($cancellationDate === '0000-00-00 00:00:00') {
44
                $subscription->setCancellationDate(null);
0 ignored issues
show
Documentation introduced by
null is of type null, but the function expects a object<DateTime>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
45
            } else {
46 3
                $subscription->setCancellationDate(new \DateTime($cancellationDate));
47
            }
48 3
        }
49
50 3
        return $apiResponse;
51
    }
52
53
    /**
54
     * Create a subscription
55
     *
56
     * @param Create\RequestData $requestData The request data.
57
     * @return Create\ApiResponse
58
     */
59
    public function createSubscription(Create\RequestData $requestData)
60
    {
61
        $request = new Create\Request($requestData);
62
63
        return $this->sendRequest($request, Create\ApiResponse::class);
64 3
    }
65
66
    /**
67
     * Update a subscription.
68
     *
69
     * @param integer $subscriptionId The subscription ID.
70
     * @param \DateTime $nextEvent The next event date and time.
71
     * @param string $subscriptionExternalId The external subscription ID.
72 3
     * @param string $status The subscription status.
73
     * @param array $xAttributes The subscription x attributes.
74 3
     * @param Feature[] $features The features.
75 3
     * @return Update\ApiResponse
76 3
     */
77 3
    public function updateSubscription(
78 3
        $subscriptionId,
79 3
        $nextEvent = null,
80
        $subscriptionExternalId = null,
81 3
        $status = null,
82
        array $xAttributes = array(),
83 3
        array $features = array()
84
    )
85
    {
86
        $requestData = new Update\RequestData($subscriptionId);
87
88
        $requestData->setSubscriptionId($subscriptionId);
89
        $requestData->setNextEvent($nextEvent);
90
        $requestData->setSubscriptionExternalId($subscriptionExternalId);
91
        $requestData->setStatus($status);
92 3
        $requestData->setXAttributes($xAttributes);
93
        $requestData->setFeatures($features);
94 3
95
        $request = new Update\Request($requestData);
96 3
97
        return $this->sendRequest($request, Update\ApiResponse::class);
98
    }
99
100
    /**
101
     * Change article of a subscription.
102
     *
103
     * @param ChangeArticle\RequestData $requestData The request data.
104
     * @return ChangeArticle\ApiResponse
105 3
     */
106
    public function changeSubscriptionArticle(ChangeArticle\RequestData $requestData)
107 3
    {
108
        $request = new ChangeArticle\Request($requestData);
109 3
110
        return $this->sendRequest($request, ChangeArticle\ApiResponse::class);
111
    }
112
113
    /**
114
     * Set the addon for a subscription.
115
     *
116
     * @param SetAddon\RequestData $requestData The request data.
117
     * @return SetAddon\ApiResponse
118 3
     */
119
    public function setSubscriptionAddon(SetAddon\RequestData $requestData)
120 3
    {
121
        $request = new SetAddon\Request($requestData);
122 3
123
        return $this->sendRequest($request, SetAddon\ApiResponse::class);
124
    }
125
126
    /**
127
     * Set the usage data of a subscription.
128
     *
129
     * @param SetUsageData\RequestData $requestData The request data.
130
     * @return SetUsageData\ApiResponse
131
     */
132
    public function setSubscriptionUsageData(SetUsageData\RequestData $requestData)
133 3
    {
134
        $request = new SetUsageData\Request($requestData);
135
136
        return $this->sendRequest($request, SetUsageData\ApiResponse::class);
137
    }
138 3
139
    /**
140 3
     * Get the usage data of a subscription.
141 3
     *
142 3
     * @param integer $subscriptionId The subscription ID.
143
     * @param \DateTime $subscriptionStart The subscription start.
144 3
     * @param \DateTime $subscriptionEnd The subscription end.
145
     * @return GetUsageData\ApiResponse
146 3
     */
147
    public function getSubscriptionUsageData(
148
        $subscriptionId,
149
        \DateTime $subscriptionStart = null,
150
        \DateTime $subscriptionEnd = null
151
    )
152
    {
153
        $requestData = new GetUsageData\RequestData($subscriptionId);
154
155 3
        $requestData->setSubscriptionId($subscriptionId);
156
        $requestData->setSubscriptionStart($subscriptionStart);
0 ignored issues
show
Bug introduced by
It seems like $subscriptionStart defined by parameter $subscriptionStart on line 149 can be null; however, Speicher210\Fastbill\Api...:setSubscriptionStart() does not accept null, maybe add an additional type check?

It seems like you allow that null is being passed for a parameter, however the function which is called does not seem to accept null.

We recommend to add an additional type check (or disallow null for the parameter):

function notNullable(stdClass $x) { }

// Unsafe
function withoutCheck(stdClass $x = null) {
    notNullable($x);
}

// Safe - Alternative 1: Adding Additional Type-Check
function withCheck(stdClass $x = null) {
    if ($x instanceof stdClass) {
        notNullable($x);
    }
}

// Safe - Alternative 2: Changing Parameter
function withNonNullableParam(stdClass $x) {
    notNullable($x);
}
Loading history...
157 3
        $requestData->setSubscriptionEnd($subscriptionEnd);
0 ignored issues
show
Bug introduced by
It seems like $subscriptionEnd defined by parameter $subscriptionEnd on line 150 can be null; however, Speicher210\Fastbill\Api...a::setSubscriptionEnd() does not accept null, maybe add an additional type check?

It seems like you allow that null is being passed for a parameter, however the function which is called does not seem to accept null.

We recommend to add an additional type check (or disallow null for the parameter):

function notNullable(stdClass $x) { }

// Unsafe
function withoutCheck(stdClass $x = null) {
    notNullable($x);
}

// Safe - Alternative 1: Adding Additional Type-Check
function withCheck(stdClass $x = null) {
    if ($x instanceof stdClass) {
        notNullable($x);
    }
}

// Safe - Alternative 2: Changing Parameter
function withNonNullableParam(stdClass $x) {
    notNullable($x);
}
Loading history...
158 3
159
        $request = new GetUsageData\Request($requestData);
160 3
161
        return $this->sendRequest($request, GetUsageData\ApiResponse::class);
162
    }
163
164
    /**
165
     * Get the usage data of a subscription.
166
     *
167
     * @param string $usageDataId The usage data ID.
168
     * @return DeleteUsageData\ApiResponse
169 3
     */
170
    public function deleteSubscriptionUsageData($usageDataId)
171 3
    {
172
        $requestData = new DeleteUsageData\RequestData($usageDataId);
173
        $request = new DeleteUsageData\Request($requestData);
174
175 3
        return $this->sendRequest($request, DeleteUsageData\ApiResponse::class);
176
    }
177 3
178
    /**
179
     * Get the upcoming amount.
180
     *
181
     * @param GetUpcomingAmount\RequestData $requestData The request data filter.
182
     * @return GetUpcomingAmount\ApiResponse
183
     */
184
    public function getUpcomingAmount(GetUpcomingAmount\RequestData $requestData = null)
185
    {
186
        if ($requestData === null) {
187 3
            $requestData = new GetUpcomingAmount\RequestData();
188
        }
189 3
190 3
        $request = new GetUpcomingAmount\Request($requestData);
191
192 3
        return $this->sendRequest($request, GetUpcomingAmount\ApiResponse::class);
193
    }
194
195
    /**
196
     * Postpone a subscription shipping.
197
     *
198
     * @param integer $subscriptionId
199
     * @param integer $month The month to postpone.
200
     * @return Postpone\ApiResponse
201 3
     */
202
    public function postponeSubscription($subscriptionId, $month)
203 3
    {
204 3
        $requestData = new Postpone\RequestData($subscriptionId, $month);
205
        $request = new Postpone\Request($requestData);
206 3
207
        return $this->sendRequest($request, Postpone\ApiResponse::class);
208
    }
209
210
    /**
211
     * Renew a subscription.
212
     *
213
     * @param integer $subscriptionId The subscription ID to renew.
214
     * @return Renew\ApiResponse
215 3
     */
216
    public function renewSubscription($subscriptionId)
217 3
    {
218 3
        $requestData = new Renew\RequestData($subscriptionId);
219
        $request = new Renew\Request($requestData);
220 3
221
        return $this->sendRequest($request, Renew\ApiResponse::class);
222
    }
223
224
    /**
225
     * Create a secure link for a subscription.
226
     *
227
     * @param integer $subscriptionId The subscription ID for witch to create the secure link.
228
     * @return CreateSecureLink\ApiResponse
229
     */
230
    public function createSecureLink($subscriptionId)
231 3
    {
232
        $requestData = new CreateSecureLink\RequestData($subscriptionId);
233 3
        $request = new CreateSecureLink\Request($requestData);
234 3
235 3
        return $this->sendRequest($request, CreateSecureLink\ApiResponse::class);
236
    }
237 3
238
    /**
239 3
     * Cancel a subscription.
240
     *
241
     * @param integer $subscriptionId The subscription ID.
242
     * @param \DateTime $cancellationDate The cancellation date and time.
243
     * @param string $cancellationNote The cancellation note.
244
     * @return Cancel\ApiResponse
245
     */
246
    public function cancelSubscription($subscriptionId, \DateTime $cancellationDate = null, $cancellationNote = null)
247
    {
248 3
        $requestData = new Cancel\RequestData($subscriptionId);
249
        $requestData->setCancellationDate($cancellationDate);
250 3
        $requestData->setCancellationNote($cancellationNote);
251 3
252
        $request = new Cancel\Request($requestData);
253 3
254
        return $this->sendRequest($request, Cancel\ApiResponse::class);
255
    }
256
257
    /**
258
     * Reactivate a subscription.
259
     *
260
     * @param integer $subscriptionId The subscription ID to reactivate.
261
     * @return Reactivate\ApiResponse
262
     */
263
    public function reactivateSubscription($subscriptionId)
264
    {
265
        $requestData = new Reactivate\RequestData($subscriptionId);
266
        $request = new Reactivate\Request($requestData);
267
268
        return $this->sendRequest($request, Reactivate\ApiResponse::class);
269
    }
270
}
271