Completed
Push — master ( 2fa6a4...c473ed )
by
unknown
12:50
created

SubscriptionService::getSubscriptions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 1

Importance

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