Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
52 / 52
100.00% covered (success)
100.00%
32 / 32
CRAP
100.00% covered (success)
100.00%
1 / 1
Shipping
100.00% covered (success)
100.00%
52 / 52
100.00% covered (success)
100.00%
32 / 32
40
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
9
 setAdapter
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getAdapter
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasAdapter
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 addPackages
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 addPackage
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getPackages
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getPackage
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasPackages
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasPackage
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 addTrackingNumbers
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 addTrackingNumber
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getTrackingNumbers
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasTrackingNumbers
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasTrackingNumber
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setShipTo
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getShipTo
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasShipTo
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setShipFrom
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getShipFrom
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasShipFrom
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getResponse
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasResponse
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 isSuccess
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getErrorCode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasErrorCode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getErrorMessage
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasErrorMessage
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getRates
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasRates
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 fetchRates
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getTracking
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2declare(strict_types=1);
3/**
4 * Pop PHP Framework (https://www.popphp.org/)
5 *
6 * @link       https://github.com/popphp/popphp-framework
7 * @author     Nick Sagona, III <dev@noladev.com>
8 * @copyright  Copyright (c) 2009-2027 NOLA Interactive, LLC.
9 * @license    https://www.popphp.org/license     New BSD License
10 */
11
12/**
13 * @namespace
14 */
15namespace Pop\Shipping;
16
17/**
18 * Pop shipping class
19 *
20 * @category   Pop
21 * @package    Pop\Shipping
22 * @author     Nick Sagona, III <dev@noladev.com>
23 * @copyright  Copyright (c) 2009-2027 NOLA Interactive, LLC.
24 * @license    https://www.popphp.org/license     New BSD License
25 * @version    4.0.0
26 */
27class Shipping
28{
29
30    /**
31     * Shipping Adapter
32     * @var ?Adapter\AbstractAdapter
33     */
34    protected ?Adapter\AbstractAdapter $adapter = null;
35
36    /**
37     * Constructor
38     *
39     * Instantiate the shipping object
40     *
41     */
42    public function __construct()
43    {
44        $args = func_get_args();
45
46        foreach ($args as $arg) {
47            if ($arg instanceof Adapter\AbstractAdapter) {
48                $this->setAdapter($arg);
49            } else if ($arg instanceof Package) {
50                $this->addPackage($arg);
51            } else  if (is_string($arg)) {
52                $this->addTrackingNumber($arg);
53            } else if (is_array($arg)) {
54                foreach ($arg as $a) {
55                    if ($a instanceof Package) {
56                        $this->addPackage($a);
57                    } else if (is_string($a)) {
58                        $this->addTrackingNumber($a);
59                    }
60                }
61            }
62        }
63    }
64
65    /**
66     * Set shipping adapter
67     *
68     * @param  Adapter\AbstractAdapter $adapter
69     * @return Shipping
70     */
71    public function setAdapter(Adapter\AbstractAdapter $adapter): Shipping
72    {
73        $this->adapter = $adapter;
74        return $this;
75    }
76
77    /**
78     * Get shipping adapter
79     *
80     * @return ?Adapter\AbstractAdapter
81     */
82    public function getAdapter(): ?Adapter\AbstractAdapter
83    {
84        return $this->adapter;
85    }
86
87    /**
88     * Has shipping adapter
89     *
90     * @return bool
91     */
92    public function hasAdapter(): bool
93    {
94        return (!empty($this->adapter));
95    }
96
97    /**
98     * Add shipping packages
99     *
100     * @param  array $packages
101     * @return Shipping
102     */
103    public function addPackages(array $packages): Shipping
104    {
105        $this->adapter?->addPackages($packages);
106        return $this;
107    }
108
109    /**
110     * Add shipping package
111     *
112     * @param  Package $package
113     * @return Shipping
114     */
115    public function addPackage(Package $package): Shipping
116    {
117        $this->adapter?->addPackage($package);
118        return $this;
119    }
120
121    /**
122     * Get shipping packages
123     *
124     * @return ?array
125     */
126    public function getPackages(): ?array
127    {
128        return $this->adapter?->getPackages();
129    }
130
131    /**
132     * Get shipping package
133     *
134     * @param  mixed $id
135     * @return ?Package
136     */
137    public function getPackage(mixed $id): ?Package
138    {
139        return $this->adapter?->getPackage($id);
140    }
141
142    /**
143     * Has shipping packages
144     *
145     * @return ?bool
146     */
147    public function hasPackages(): ?bool
148    {
149        return $this->adapter?->hasPackages();
150    }
151
152    /**
153     * Has shipping package
154     *
155     * @param  mixed $id
156     * @return ?bool
157     */
158    public function hasPackage(mixed $id): ?bool
159    {
160        return $this->adapter?->hasPackage($id);
161    }
162
163    /**
164     * Add shipping tracking numbers
165     *
166     * @param  array $trackingNumbers
167     * @return Shipping
168     */
169    public function addTrackingNumbers(array $trackingNumbers): Shipping
170    {
171        $this->adapter?->addTrackingNumbers($trackingNumbers);
172        return $this;
173    }
174
175    /**
176     * Add shipping tracking number
177     *
178     * @param  string $trackingNumber
179     * @return Shipping
180     */
181    public function addTrackingNumber(string $trackingNumber): Shipping
182    {
183        $this->adapter?->addTrackingNumber($trackingNumber);
184        return $this;
185    }
186
187    /**
188     * Get shipping packages
189     *
190     * @return ?array
191     */
192    public function getTrackingNumbers(): ?array
193    {
194        return $this->adapter?->getTrackingNumbers();
195    }
196
197    /**
198     * Has shipping tracking numbers
199     *
200     * @return ?bool
201     */
202    public function hasTrackingNumbers(): ?bool
203    {
204        return $this->adapter?->hasTrackingNumbers();
205    }
206
207    /**
208     * Has shipping tracking number
209     *
210     * @param  string $trackingNumber
211     * @return ?bool
212     */
213    public function hasTrackingNumber(string $trackingNumber): ?bool
214    {
215        return $this->adapter?->hasTrackingNumber($trackingNumber);
216    }
217
218    /**
219     * Set ship to
220     *
221     * @param  array|Address $shipTo
222     * @return Shipping
223     */
224    public function setShipTo(array|Address $shipTo): Shipping
225    {
226        $this->adapter?->setShipTo($shipTo);
227        return $this;
228    }
229
230    /**
231     * Get ship to
232     *
233     * @return ?Address
234     */
235    public function getShipTo(): ?Address
236    {
237        return $this->adapter?->getShipTo();
238    }
239
240    /**
241     * Has ship to
242     *
243     * @return ?bool
244     */
245    public function hasShipTo(): ?bool
246    {
247        return $this->adapter?->hasShipTo();
248    }
249
250    /**
251     * Set ship from
252     *
253     * @param  array|Address $shipFrom
254     * @return Shipping
255     */
256    public function setShipFrom(array|Address $shipFrom): Shipping
257    {
258        $this->adapter?->setShipFrom($shipFrom);
259        return $this;
260    }
261
262    /**
263     * Get ship from
264     *
265     * @return ?Address
266     */
267    public function getShipFrom(): ?Address
268    {
269        return $this->adapter?->getShipFrom();
270    }
271
272    /**
273     * Has ship from
274     *
275     * @return ?bool
276     */
277    public function hasShipFrom(): ?bool
278    {
279        return $this->adapter?->hasShipFrom();
280    }
281
282    /**
283     * Get response
284     *
285     * @return mixed
286     */
287    public function getResponse(): mixed
288    {
289        return $this->adapter?->getResponse();
290    }
291
292    /**
293     * Has response
294     *
295     * @return ?bool
296     */
297    public function hasResponse(): ?bool
298    {
299        return $this->adapter?->hasResponse();
300    }
301
302    /**
303     * Is success
304     *
305     * @return ?bool
306     */
307    public function isSuccess(): ?bool
308    {
309        return $this->adapter?->isSuccess();
310    }
311
312    /**
313     * Get error code
314     *
315     * @return mixed
316     */
317    public function getErrorCode(): mixed
318    {
319        return $this->adapter?->getErrorCode();
320    }
321
322    /**
323     * Has error code
324     *
325     * @return ?bool
326     */
327    public function hasErrorCode(): ?bool
328    {
329        return $this->adapter?->hasErrorCode();
330    }
331
332    /**
333     * Get error message
334     *
335     * @return mixed
336     */
337    public function getErrorMessage(): mixed
338    {
339        return $this->adapter?->getErrorMessage();
340    }
341
342    /**
343     * Has error message
344     *
345     * @return ?bool
346     */
347    public function hasErrorMessage(): ?bool
348    {
349        return $this->adapter?->hasErrorMessage();
350    }
351
352    /**
353     * Get rates
354     *
355     * @return ?array
356     */
357    public function getRates(): ?array
358    {
359        return $this->adapter?->getRates();
360    }
361
362    /**
363     * Has rates
364     *
365     * @return ?bool
366     */
367    public function hasRates(): ?bool
368    {
369        return $this->adapter?->hasRates();
370    }
371
372    /**
373     * Fetch rates
374     *
375     * @return mixed
376     */
377    public function fetchRates(): mixed
378    {
379        return $this->adapter?->fetchRates();
380    }
381
382    /**
383     * Get tracking
384     *
385     * @param  string|array|null $trackingNumbers
386     * @return mixed
387     */
388    public function getTracking(string|array|null $trackingNumbers = null): mixed
389    {
390        return $this->adapter?->getTracking($trackingNumbers);
391    }
392
393}