Completed
Push — master ( d99910...291758 )
by Andrii
05:16
created

Sale   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 34.62%

Importance

Changes 2
Bugs 0 Features 2
Metric Value
wmc 10
c 2
b 0
f 2
lcom 1
cbo 0
dl 0
loc 82
ccs 9
cts 26
cp 0.3462
rs 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 13 1
A getId() 0 4 1
A getTarget() 0 4 1
A getCustomer() 0 4 1
A getPlan() 0 4 1
A getTime() 0 4 1
A hasId() 0 4 1
A setId() 0 10 3
1
<?php
2
/**
3
 * PHP Billing Library
4
 *
5
 * @link      https://github.com/hiqdev/php-billing
6
 * @package   php-billing
7
 * @license   BSD-3-Clause
8
 * @copyright Copyright (c) 2017-2018, HiQDev (http://hiqdev.com/)
9
 */
10
11
namespace hiqdev\php\billing\sale;
12
13
use DateTimeImmutable;
14
use hiqdev\php\billing\customer\CustomerInterface;
15
use hiqdev\php\billing\plan\PlanInterface;
16
use hiqdev\php\billing\target\TargetInterface;
17
18
/**
19
 * Sale.
20
 *
21
 * @author Andrii Vasyliev <[email protected]>
22
 */
23
class Sale implements SaleInterface
24
{
25
    /**
26
     * @var int
27
     */
28
    protected $id;
29
30
    /**
31
     * @var TargetInterface
32
     */
33
    protected $target;
34
35
    /**
36
     * @var CustomerInterface
37
     */
38
    protected $customer;
39
40
    /**
41
     * @var PlanInterface
42
     */
43
    protected $plan;
44
45
    /**
46
     * @var DateTimeImmutable
47
     */
48
    protected $time;
49
50 3
    public function __construct(
51
                            $id,
52
        TargetInterface     $target,
53
        CustomerInterface   $customer,
54
        PlanInterface       $plan,
55
        DateTimeImmutable   $time = null
56
    ) {
57 3
        $this->id = $id;
58 3
        $this->target = $target;
59 3
        $this->customer = $customer;
60 3
        $this->plan = $plan;
61 3
        $this->time = $time;
62 3
    }
63
64
    public function getId()
65
    {
66
        return $this->id;
67
    }
68
69
    public function getTarget()
70
    {
71
        return $this->target;
72
    }
73
74
    public function getCustomer()
75
    {
76
        return $this->customer;
77
    }
78
79 2
    public function getPlan()
80
    {
81 2
        return $this->plan;
82
    }
83
84
    public function getTime()
85
    {
86
        return $this->time;
87
    }
88
89
    public function hasId()
90
    {
91
        return $this->id !== null;
92
    }
93
94
    public function setId($id)
95
    {
96
        if ((string)$this->id === (string)$id) {
97
            return;
98
        }
99
        if ($this->hasId()) {
100
            throw new \Exception('cannot reassign sale id');
101
        }
102
        $this->id = $id;
103
    }
104
}
105