Completed
Push — master ( e142c8...96be6a )
by Dragos
03:23
created

SubscriptionService::getUpcomingAmount()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2.1481

Importance

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