Completed
Push — master ( da159b...319f42 )
by Dragos
13:42 queued 08:33
created

SubscriptionService::getSubscriptions()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 29
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 3

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 29
ccs 17
cts 17
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 6
    public function getSubscriptions(
24
        $customerId = null,
25
        $externalCustomerId = null,
26
        $subscriptionExternalId = null,
27
        $subscriptionId = null
28
    )
29
    {
30 6
        $requestData = new Get\RequestData();
31 6
        $requestData->setCustomerId($customerId);
32 6
        $requestData->setExternalCustomerId($externalCustomerId);
33 6
        $requestData->setSubscriptionExternalId($subscriptionExternalId);
34 6
        $requestData->setSubscriptionId($subscriptionId);
35
36 6
        $request = new Get\Request($requestData);
37 6
        $apiResponse = $this->sendRequest($request, Get\ApiResponse::class);
38
39
        /** @var Get\Response $response */
40 6
        $response = $apiResponse->getResponse();
41 6
        foreach ($response->getSubscriptions() as $subscription) {
42 6
            $cancellationDate = $subscription->getCancellationDate();
43 6
            if ($cancellationDate === '0000-00-00 00:00:00') {
44 3
                $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 3
            } else {
46 3
                $subscription->setCancellationDate(new \DateTime($cancellationDate));
47
            }
48 6
        }
49
50 6
        return $apiResponse;
51
    }
52
53
    /**
54
     * Create a subscription
55
     *
56
     * @param Create\RequestData $requestData The request data.
57
     * @return Create\ApiResponse
58
     */
59 3
    public function createSubscription(Create\RequestData $requestData)
60
    {
61 3
        $request = new Create\Request($requestData);
62
63 3
        return $this->sendRequest($request, Create\ApiResponse::class);
64
    }
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
     * @param string $status The subscription status.
73
     * @param array $xAttributes The subscription x attributes.
74
     * @param Feature[] $features The features.
75
     * @return Update\ApiResponse
76
     */
77 3
    public function updateSubscription(
78
        $subscriptionId,
79
        $nextEvent = null,
80
        $subscriptionExternalId = null,
81
        $status = null,
82
        array $xAttributes = array(),
83
        array $features = array()
84
    )
85
    {
86 3
        $requestData = new Update\RequestData($subscriptionId);
87
88 3
        $requestData->setSubscriptionId($subscriptionId);
89 3
        $requestData->setNextEvent($nextEvent);
90 3
        $requestData->setSubscriptionExternalId($subscriptionExternalId);
91 3
        $requestData->setStatus($status);
92 3
        $requestData->setXAttributes($xAttributes);
93 3
        $requestData->setFeatures($features);
94
95 3
        $request = new Update\Request($requestData);
96
97 3
        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
     */
106 3
    public function changeSubscriptionArticle(ChangeArticle\RequestData $requestData)
107
    {
108 3
        $request = new ChangeArticle\Request($requestData);
109
110 3
        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
     */
119 3
    public function setSubscriptionAddon(SetAddon\RequestData $requestData)
120
    {
121 3
        $request = new SetAddon\Request($requestData);
122
123 3
        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 3
    public function setSubscriptionUsageData(SetUsageData\RequestData $requestData)
133
    {
134 3
        $request = new SetUsageData\Request($requestData);
135
136 3
        return $this->sendRequest($request, SetUsageData\ApiResponse::class);
137
    }
138
139
    /**
140
     * Get the usage data of a subscription.
141
     *
142
     * @param integer $subscriptionId The subscription ID.
143
     * @param \DateTime $subscriptionStart The subscription start.
144
     * @param \DateTime $subscriptionEnd The subscription end.
145
     * @return GetUsageData\ApiResponse
146
     */
147 3
    public function getSubscriptionUsageData(
148
        $subscriptionId,
149
        \DateTime $subscriptionStart = null,
150
        \DateTime $subscriptionEnd = null
151
    )
152
    {
153 3
        $requestData = new GetUsageData\RequestData($subscriptionId);
154
155 3
        $requestData->setSubscriptionId($subscriptionId);
156 3
        $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
159 3
        $request = new GetUsageData\Request($requestData);
160
161 3
        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
     */
170 3
    public function deleteSubscriptionUsageData($usageDataId)
171
    {
172 3
        $requestData = new DeleteUsageData\RequestData($usageDataId);
173 3
        $request = new DeleteUsageData\Request($requestData);
174
175 3
        return $this->sendRequest($request, DeleteUsageData\ApiResponse::class);
176
    }
177
178
    /**
179
     * Get the upcoming amount.
180
     *
181
     * @param GetUpcomingAmount\RequestData $requestData The request data filter.
182
     * @return GetUpcomingAmount\ApiResponse
183
     */
184 3
    public function getUpcomingAmount(GetUpcomingAmount\RequestData $requestData = null)
185
    {
186 3
        if ($requestData === null) {
187
            $requestData = new GetUpcomingAmount\RequestData();
188
        }
189
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
     */
202 3
    public function postponeSubscription($subscriptionId, $month)
203
    {
204 3
        $requestData = new Postpone\RequestData($subscriptionId, $month);
205 3
        $request = new Postpone\Request($requestData);
206
207 3
        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
     */
216 3
    public function renewSubscription($subscriptionId)
217
    {
218 3
        $requestData = new Renew\RequestData($subscriptionId);
219 3
        $request = new Renew\Request($requestData);
220
221 3
        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 3
    public function createSecureLink($subscriptionId)
231
    {
232 3
        $requestData = new CreateSecureLink\RequestData($subscriptionId);
233 3
        $request = new CreateSecureLink\Request($requestData);
234
235 3
        return $this->sendRequest($request, CreateSecureLink\ApiResponse::class);
236
    }
237
238
    /**
239
     * 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 3
    public function cancelSubscription($subscriptionId, \DateTime $cancellationDate = null, $cancellationNote = null)
247
    {
248 3
        $requestData = new Cancel\RequestData($subscriptionId);
249 3
        $requestData->setCancellationDate($cancellationDate);
250 3
        $requestData->setCancellationNote($cancellationNote);
251
252 3
        $request = new Cancel\Request($requestData);
253
254 3
        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 3
    public function reactivateSubscription($subscriptionId)
264
    {
265 3
        $requestData = new Reactivate\RequestData($subscriptionId);
266 3
        $request = new Reactivate\Request($requestData);
267
268 3
        return $this->sendRequest($request, Reactivate\ApiResponse::class);
269
    }
270
}
271