Completed
Push — master ( 31ed8c...a72c28 )
by Dragos
09:43
created

SubscriptionService::createSubscription()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
ccs 3
cts 3
cp 1
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
crap 1
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
     * Get the subscriptions.
15
     *
16
     * @param integer $customerId The customer ID.
17
     * @param string $externalCustomerId The external customer ID.
18
     * @param string $subscriptionExternalId The external subscription ID.
19
     * @param integer $subscriptionId The subscription ID.
20
     * @return Get\ApiResponse
21
     */
22 6
    public function getSubscriptions(
23
        $customerId = null,
24
        $externalCustomerId = null,
25
        $subscriptionExternalId = null,
26
        $subscriptionId = null
27
    ) {
28 6
        $requestData = new Get\RequestData();
29 6
        $requestData->setCustomerId($customerId);
30 6
        $requestData->setExternalCustomerId($externalCustomerId);
31 6
        $requestData->setSubscriptionExternalId($subscriptionExternalId);
32 6
        $requestData->setSubscriptionId($subscriptionId);
33
34 6
        $request = new Get\Request($requestData);
35 6
        $apiResponse = $this->sendRequest($request, Get\ApiResponse::class);
36
37
        /** @var Get\Response $response */
38 6
        $response = $apiResponse->getResponse();
39 6
        foreach ($response->getSubscriptions() as $subscription) {
40 6
            $cancellationDate = $subscription->getCancellationDate();
41 6
            if ($cancellationDate === '0000-00-00 00:00:00') {
42 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...
43 3
            } else {
44 3
                $subscription->setCancellationDate(new \DateTime($cancellationDate));
45
            }
46 6
        }
47
48 6
        return $apiResponse;
49
    }
50
51
    /**
52
     * Create a subscription
53
     *
54
     * @param Create\RequestData $requestData The request data.
55
     * @return Create\ApiResponse
56
     */
57 3
    public function createSubscription(Create\RequestData $requestData)
58
    {
59 3
        $request = new Create\Request($requestData);
60
61 3
        return $this->sendRequest($request, Create\ApiResponse::class);
62
    }
63
64
    /**
65
     * Update a subscription.
66
     *
67
     * @param integer $subscriptionId The subscription ID.
68
     * @param \DateTime $nextEvent The next event date and time.
69
     * @param string $subscriptionExternalId The external subscription ID.
70
     * @param string $status The subscription status.
71
     * @param array $xAttributes The subscription x attributes.
72
     * @param Feature[] $features The features.
73
     * @return Update\ApiResponse
74
     */
75 3
    public function updateSubscription(
76
        $subscriptionId,
77
        $nextEvent = null,
78
        $subscriptionExternalId = null,
79
        $status = null,
80
        array $xAttributes = array(),
81
        array $features = array()
82
    ) {
83 3
        $requestData = new Update\RequestData($subscriptionId);
84
85 3
        $requestData->setSubscriptionId($subscriptionId);
86 3
        $requestData->setNextEvent($nextEvent);
87 3
        $requestData->setSubscriptionExternalId($subscriptionExternalId);
88 3
        $requestData->setStatus($status);
89 3
        $requestData->setXAttributes($xAttributes);
90 3
        $requestData->setFeatures($features);
91
92 3
        $request = new Update\Request($requestData);
93
94 3
        return $this->sendRequest($request, Update\ApiResponse::class);
95
    }
96
97
    /**
98
     * Change article of a subscription.
99
     *
100
     * @param ChangeArticle\RequestData $requestData The request data.
101
     * @return ChangeArticle\ApiResponse
102
     */
103 3
    public function changeSubscriptionArticle(ChangeArticle\RequestData $requestData)
104
    {
105 3
        $request = new ChangeArticle\Request($requestData);
106
107 3
        return $this->sendRequest($request, ChangeArticle\ApiResponse::class);
108
    }
109
110
    /**
111
     * Set the addon for a subscription.
112
     *
113
     * @param SetAddon\RequestData $requestData The request data.
114
     * @return SetAddon\ApiResponse
115
     */
116 3
    public function setSubscriptionAddon(SetAddon\RequestData $requestData)
117
    {
118 3
        $request = new SetAddon\Request($requestData);
119
120 3
        return $this->sendRequest($request, SetAddon\ApiResponse::class);
121
    }
122
123
    /**
124
     * Set the usage data of a subscription.
125
     *
126
     * @param SetUsageData\RequestData $requestData The request data.
127
     * @return SetUsageData\ApiResponse
128
     */
129 3
    public function setSubscriptionUsageData(SetUsageData\RequestData $requestData)
130
    {
131 3
        $request = new SetUsageData\Request($requestData);
132
133 3
        return $this->sendRequest($request, SetUsageData\ApiResponse::class);
134
    }
135
136
    /**
137
     * Get the usage data of a subscription.
138
     *
139
     * @param integer $subscriptionId The subscription ID.
140
     * @param \DateTime $subscriptionStart The subscription start.
141
     * @param \DateTime $subscriptionEnd The subscription end.
142
     * @return GetUsageData\ApiResponse
143
     */
144 3
    public function getSubscriptionUsageData(
145
        $subscriptionId,
146
        \DateTime $subscriptionStart = null,
147
        \DateTime $subscriptionEnd = null
148
    ) {
149 3
        $requestData = new GetUsageData\RequestData($subscriptionId);
150
151 3
        $requestData->setSubscriptionId($subscriptionId);
152 3
        $requestData->setSubscriptionStart($subscriptionStart);
0 ignored issues
show
Bug introduced by
It seems like $subscriptionStart defined by parameter $subscriptionStart on line 146 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...
153 3
        $requestData->setSubscriptionEnd($subscriptionEnd);
0 ignored issues
show
Bug introduced by
It seems like $subscriptionEnd defined by parameter $subscriptionEnd on line 147 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...
154
155 3
        $request = new GetUsageData\Request($requestData);
156
157 3
        return $this->sendRequest($request, GetUsageData\ApiResponse::class);
158
    }
159
160
    /**
161
     * Get the usage data of a subscription.
162
     *
163
     * @param string $usageDataId The usage data ID.
164
     * @return DeleteUsageData\ApiResponse
165
     */
166 3
    public function deleteSubscriptionUsageData($usageDataId)
167
    {
168 3
        $requestData = new DeleteUsageData\RequestData($usageDataId);
169 3
        $request = new DeleteUsageData\Request($requestData);
170
171 3
        return $this->sendRequest($request, DeleteUsageData\ApiResponse::class);
172
    }
173
174
    /**
175
     * Get the upcoming amount.
176
     *
177
     * @param GetUpcomingAmount\RequestData $requestData The request data filter.
178
     * @return GetUpcomingAmount\ApiResponse
179
     */
180 3
    public function getUpcomingAmount(GetUpcomingAmount\RequestData $requestData = null)
181
    {
182 3
        if ($requestData === null) {
183
            $requestData = new GetUpcomingAmount\RequestData();
184
        }
185
186 3
        $request = new GetUpcomingAmount\Request($requestData);
187
188 3
        return $this->sendRequest($request, GetUpcomingAmount\ApiResponse::class);
189
    }
190
191
    /**
192
     * Postpone a subscription shipping.
193
     *
194
     * @param integer $subscriptionId
195
     * @param integer $month The month to postpone.
196
     * @return Postpone\ApiResponse
197
     */
198 3
    public function postponeSubscription($subscriptionId, $month)
199
    {
200 3
        $requestData = new Postpone\RequestData($subscriptionId, $month);
201 3
        $request = new Postpone\Request($requestData);
202
203 3
        return $this->sendRequest($request, Postpone\ApiResponse::class);
204
    }
205
206
    /**
207
     * Renew a subscription.
208
     *
209
     * @param integer $subscriptionId The subscription ID to renew.
210
     * @return Renew\ApiResponse
211
     */
212 3
    public function renewSubscription($subscriptionId)
213
    {
214 3
        $requestData = new Renew\RequestData($subscriptionId);
215 3
        $request = new Renew\Request($requestData);
216
217 3
        return $this->sendRequest($request, Renew\ApiResponse::class);
218
    }
219
220
    /**
221
     * Create a secure link for a subscription.
222
     *
223
     * @param integer $subscriptionId The subscription ID for witch to create the secure link.
224
     * @return CreateSecureLink\ApiResponse
225
     */
226 3
    public function createSecureLink($subscriptionId)
227
    {
228 3
        $requestData = new CreateSecureLink\RequestData($subscriptionId);
229 3
        $request = new CreateSecureLink\Request($requestData);
230
231 3
        return $this->sendRequest($request, CreateSecureLink\ApiResponse::class);
232
    }
233
234
    /**
235
     * Cancel a subscription.
236
     *
237
     * @param integer $subscriptionId The subscription ID.
238
     * @param \DateTime $cancellationDate The cancellation date and time.
239
     * @param string $cancellationNote The cancellation note.
240
     * @return Cancel\ApiResponse
241
     */
242 3
    public function cancelSubscription($subscriptionId, \DateTime $cancellationDate = null, $cancellationNote = null)
243
    {
244 3
        $requestData = new Cancel\RequestData($subscriptionId);
245 3
        $requestData->setCancellationDate($cancellationDate);
246 3
        $requestData->setCancellationNote($cancellationNote);
247
248 3
        $request = new Cancel\Request($requestData);
249
250 3
        return $this->sendRequest($request, Cancel\ApiResponse::class);
251
    }
252
253
    /**
254
     * Reactivate a subscription.
255
     *
256
     * @param integer $subscriptionId The subscription ID to reactivate.
257
     * @return Reactivate\ApiResponse
258
     */
259 3
    public function reactivateSubscription($subscriptionId)
260
    {
261 3
        $requestData = new Reactivate\RequestData($subscriptionId);
262 3
        $request = new Reactivate\Request($requestData);
263
264 3
        return $this->sendRequest($request, Reactivate\ApiResponse::class);
265
    }
266
}
267