Test Failed
Push — master ( dea459...15b84c )
by David
06:38
created

SkuskuCart   A

Complexity

Total Complexity 23

Size/Duplication

Total Lines 302
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 52
dl 0
loc 302
rs 10
c 0
b 0
f 0
wmc 23

23 Methods

Rating   Name   Duplication   Size   Complexity  
A setDateUpd() 0 5 1
A getProduct() 0 5 1
A getDateUpd() 0 3 1
A __construct() 0 5 1
A getCustomer() 0 3 1
A setDateAdd() 0 5 1
A getDateAdd() 0 3 1
A getId() 0 3 1
A setProducts() 0 4 1
A getProducts() 0 3 1
A getTotalPrice() 0 5 1
A getStatus() 0 3 1
A setPayment() 0 4 1
A getLang() 0 3 1
A emptyProducts() 0 4 1
A addProduct() 0 6 1
A setStatus() 0 4 1
A getTotalQuantity() 0 5 1
A setCustomer() 0 4 1
A setLang() 0 4 1
A getPayment() 0 3 1
A getCurrency() 0 3 1
A setCurrency() 0 4 1
1
<?php
2
3
namespace GGGGino\SkuskuCartBundle\Model;
4
5
use Doctrine\Common\Collections\ArrayCollection;
6
use Doctrine\Common\Collections\Criteria;
7
use Doctrine\ORM\Mapping as ORM;
8
9
/**
10
 * Skusku
11
 *
12
 * @ORM\Table(name="skusku_cart")
13
 * @ORM\Entity(repositoryClass="GGGGino\SkuskuCartBundle\Repository\CartRepository")
14
 */
15
class SkuskuCart
16
{
17
    const STATUS_INITIAL = 0;
18
    const STATUS_ORDERED = 1;
19
    /**
20
     * @var int
21
     *
22
     * @ORM\Column(name="id", type="integer")
23
     * @ORM\Id
24
     * @ORM\GeneratedValue(strategy="AUTO")
25
     */
26
    private $id;
27
28
    /**
29
     * @ORM\OneToMany(targetEntity="SkuskuCartProduct", mappedBy="cart", fetch="EXTRA_LAZY", cascade={"remove"}, orphanRemoval=true)
30
     */
31
    private $products;
32
33
    /**
34
     * @ORM\OneToOne(targetEntity="SkuskuPayment", inversedBy="cart")
35
     * @ORM\JoinColumn(name="payment", referencedColumnName="id")
36
     */
37
    private $payment;
38
39
    /**
40
     * @ORM\OneToOne(targetEntity="SkuskuOrder", mappedBy="cart")
41
     */
42
    private $order;
0 ignored issues
show
introduced by
The private property $order is not used, and could be removed.
Loading history...
43
44
    /**
45
     * @ORM\ManyToOne(targetEntity="SkuskuLangInterface")
46
     * @ORM\JoinColumn(name="lang_id", referencedColumnName="id")
47
     * @var SkuskuLangInterface
48
     */
49
    protected $lang;
50
51
    /**
52
     * @ORM\ManyToOne(targetEntity="SkuskuCurrencyInterface")
53
     * @ORM\JoinColumn(name="currency_id", referencedColumnName="id")
54
     * @var SkuskuCurrencyInterface
55
     */
56
    protected $currency;
57
58
    /**
59
     * @ORM\ManyToOne(targetEntity="SkuskuCustomerInterface")
60
     * @ORM\JoinColumn(name="customer_id", referencedColumnName="id")
61
     * @var SkuskuCustomerInterface
62
     */
63
    protected $customer;
64
65
    /**
66
     * @var \DateTime
67
     *
68
     * @ORM\Column(name="date_add", type="datetime")
69
     */
70
    private $dateAdd;
71
72
    /**
73
     * @var \DateTime
74
     *
75
     * @ORM\Column(name="date_upd", type="datetime")
76
     */
77
    private $dateUpd;
78
79
    /**
80
     * @var int
81
     *
82
     * @ORM\Column(name="status", type="integer")
83
     */
84
    private $status = self::STATUS_INITIAL;
85
86
87
    /**
88
     * Cart constructor.
89
     */
90
    public function __construct()
91
    {
92
        $this->products = new ArrayCollection();
93
        $this->dateAdd = new \DateTime();
94
        $this->dateUpd = new \DateTime();
95
    }
96
97
    /**
98
     * Get id.
99
     *
100
     * @return int
101
     */
102
    public function getId()
103
    {
104
        return $this->id;
105
    }
106
107
    /**
108
     * Set dateAdd.
109
     *
110
     * @param \DateTime $dateAdd
111
     *
112
     * @return SkuskuCart
113
     */
114
    public function setDateAdd($dateAdd)
115
    {
116
        $this->dateAdd = $dateAdd;
117
118
        return $this;
119
    }
120
121
    /**
122
     * Get dateAdd.
123
     *
124
     * @return \DateTime
125
     */
126
    public function getDateAdd()
127
    {
128
        return $this->dateAdd;
129
    }
130
131
    /**
132
     * Set dateUpd.
133
     *
134
     * @param \DateTime $dateUpd
135
     *
136
     * @return SkuskuCart
137
     */
138
    public function setDateUpd($dateUpd)
139
    {
140
        $this->dateUpd = $dateUpd;
141
142
        return $this;
143
    }
144
145
    /**
146
     * Get dateUpd.
147
     *
148
     * @return \DateTime
149
     */
150
    public function getDateUpd()
151
    {
152
        return $this->dateUpd;
153
    }
154
155
    /**
156
     * @return SkuskuCustomerInterface
157
     */
158
    public function getCustomer()
159
    {
160
        return $this->customer;
161
    }
162
163
    /**
164
     * @return ArrayCollection
165
     */
166
    public function getProducts()
167
    {
168
        return $this->products;
169
    }
170
171
    /**
172
     * @param SkuskuProductInterface $product
173
     * @return mixed
174
     */
175
    public function getProduct(SkuskuProductInterface $product)
176
    {
177
        $criteria = Criteria::create()->where(Criteria::expr()->eq("product", $product));
178
179
        return $this->products->matching($criteria);
180
    }
181
182
    /**
183
     * @param mixed $products
184
     * @return SkuskuCart
185
     */
186
    public function setProducts($products)
187
    {
188
        $this->products = $products;
189
        return $this;
190
    }
191
    /**
192
     * @return SkuskuCart
193
     */
194
    public function emptyProducts()
195
    {
196
        $this->products->clear();
197
        return $this;
198
    }
199
200
    /**
201
     * @param SkuskuCartProductInterface $product
202
     * @return SkuskuCart
203
     */
204
    public function addProduct(SkuskuCartProductInterface $product)
205
    {
206
        $product->setCart($this);
207
208
        $this->products[] = $product;
209
        return $this;
210
    }
211
212
    /**
213
     * Get the total amount of the cart
214
     *
215
     * @return mixed
216
     */
217
    public function getTotalPrice()
218
    {
219
        return array_reduce($this->getProducts()->toArray(), function($carry, SkuskuCartProduct $product) {
220
            return $carry + ($product->getSubtotal());
221
        }, 0);
222
    }
223
224
    /**
225
     * Get the number of products added to the cart.
226
     * Useful for cart preview
227
     *
228
     * @return integer
229
     */
230
    public function getTotalQuantity()
231
    {
232
        return array_reduce($this->getProducts()->toArray(), function($carry, SkuskuCartProduct $product) {
233
            return $carry + ($product->getQuantity());
234
        }, 0);
235
    }
236
237
    /**
238
     * @return SkuskuCurrencyInterface
239
     */
240
    public function getCurrency()
241
    {
242
        return $this->currency;
243
    }
244
245
    /**
246
     * @param SkuskuCurrencyInterface $currency
247
     * @return SkuskuCart
248
     */
249
    public function setCurrency($currency)
250
    {
251
        $this->currency = $currency;
252
        return $this;
253
    }
254
255
    /**
256
     * @return SkuskuLangInterface
257
     */
258
    public function getLang()
259
    {
260
        return $this->lang;
261
    }
262
263
    /**
264
     * @param SkuskuLangInterface $lang
265
     * @return SkuskuCart
266
     */
267
    public function setLang($lang)
268
    {
269
        $this->lang = $lang;
270
        return $this;
271
    }
272
273
    /**
274
     * @param SkuskuCustomerInterface $customer
275
     * @return SkuskuCart
276
     */
277
    public function setCustomer($customer)
278
    {
279
        $this->customer = $customer;
280
        return $this;
281
    }
282
283
    /**
284
     * @return mixed
285
     */
286
    public function getPayment()
287
    {
288
        return $this->payment;
289
    }
290
291
    /**
292
     * @param mixed $payment
293
     * @return SkuskuCart
294
     */
295
    public function setPayment($payment)
296
    {
297
        $this->payment = $payment;
298
        return $this;
299
    }
300
301
    /**
302
     * @return int
303
     */
304
    public function getStatus()
305
    {
306
        return $this->status;
307
    }
308
309
    /**
310
     * @param int $status
311
     * @return SkuskuCart
312
     */
313
    public function setStatus($status)
314
    {
315
        $this->status = $status;
316
        return $this;
317
    }
318
}
319