getQueryBuilderBySearchDataForAdmin()   F
last analyzed

Complexity

Conditions 48
Paths > 20000

Size

Total Lines 196
Code Lines 134

Duplication

Lines 98
Ratio 50 %

Code Coverage

Tests 57
CRAP Score 48

Importance

Changes 0
Metric Value
cc 48
eloc 134
nc 12582912
nop 1
dl 98
loc 196
rs 2
c 0
b 0
f 0
ccs 57
cts 57
cp 1
crap 48

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/*
3
 * This file is part of EC-CUBE
4
 *
5
 * Copyright(c) 2000-2015 LOCKON CO.,LTD. All Rights Reserved.
6
 *
7
 * http://www.lockon.co.jp/
8
 *
9
 * This program is free software; you can redistribute it and/or
10
 * modify it under the terms of the GNU General Public License
11
 * as published by the Free Software Foundation; either version 2
12
 * of the License, or (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU General Public License
20
 * along with this program; if not, write to the Free Software
21
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22
 */
23
24
25
namespace Eccube\Repository;
26
27
use Eccube\Util\Str;
28
use Doctrine\ORM\EntityRepository;
29
use Doctrine\ORM\QueryBuilder;
30
31
/**
32
 * OrderRepository
33
 *
34
 * This class was generated by the Doctrine ORM. Add your own custom
35
 * repository methods below.
36
 */
37
class OrderRepository extends EntityRepository
38
{
39
    protected $app;
40
41 57
    public function setApplication($app)
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
42
    {
43 57
        $this->app = $app;
44 57
    }
45
46 7
    public function changeStatus($orderId, \Eccube\Entity\Master\OrderStatus $Status)
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
47
    {
48 7
        $Order = $this
49 7
            ->find($orderId)
50
            ->setOrderStatus($Status)
51 7
        ;
52
53 7
        switch ($Status->getId()) {
54 7
            case '5': // 発送済へ
55
                $Order->setCommitDate(new \DateTime());
56 3
                break;
57 4
            case '6': // 入金済へ
58
                $Order->setPaymentDate(new \DateTime());
59 3
                break;
60
        }
61
62
        $em = $this->getEntityManager();
63
        $em->persist($Order);
64
        $em->flush();
65
    }
66
67
    /**
68
     *
69
     * @param  array        $searchData
0 ignored issues
show
introduced by
Expected 1 spaces after parameter type; 8 found
Loading history...
70
     * @return QueryBuilder
71
     */
72 19
    public function getQueryBuilderBySearchData($searchData)
73
    {
74
        $qb = $this->createQueryBuilder('o');
75
76 19
        $joinedCustomer = false;
77
78
        // order_id_start
79 18 View Code Duplication
        if (isset($searchData['order_id_start']) && Str::isNotBlank($searchData['order_id_start'])) {
80
            $qb
81 1
                ->andWhere('o.id >= :order_id_start')
82
                ->setParameter('order_id_start', $searchData['order_id_start']);
83
        }
84
85
        // order_id_end
86 18 View Code Duplication
        if (isset($searchData['order_id_end']) && Str::isNotBlank($searchData['order_id_end'])) {
87
            $qb
88 1
                ->andWhere('o.id <= :order_id_end')
89
                ->setParameter('order_id_end', $searchData['order_id_end']);
90
        }
91
92
        // status
93 19 View Code Duplication
        if (!empty($searchData['status']) && $searchData['status']) {
94
            $qb
95 1
                ->andWhere('o.OrderStatus = :status')
96
                ->setParameter('status', $searchData['status']);
97
        }
98
99
        // name
100 18 View Code Duplication
        if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) {
101
            $qb
102 1
                ->andWhere('CONCAT(o.name01, o.name02) LIKE :name')
103
                ->setParameter('name', '%' . $searchData['name'] . '%');
0 ignored issues
show
Coding Style introduced by
Concat operator must not be surrounded by spaces
Loading history...
104
        }
105
106
        // kana
107 18 View Code Duplication
        if (isset($searchData['kana']) && Str::isNotBlank($searchData['kana'])) {
108
            $qb
109 1
                ->andWhere('CONCAT(o.kana01, o.kana02) LIKE :kana')
110
                ->setParameter('kana', '%' . $searchData['kana'] . '%');
0 ignored issues
show
Coding Style introduced by
Concat operator must not be surrounded by spaces
Loading history...
111
        }
112
113
        // email
114 18 View Code Duplication
        if (isset($searchData['email']) && Str::isNotBlank($searchData['email'])) {
115
            $qb
116 1
                ->andWhere('o.email = :email')
117
                ->setParameter('email', $searchData['email']);
118
        }
119
120
        // tel
121 18 View Code Duplication
        if (isset($searchData['tel01']) && Str::isNotBlank($searchData['tel01'])) {
122
            $qb
123 1
                ->andWhere('o.tel01 = :tel01')
124
                ->setParameter('tel01', $searchData['tel01']);
125
        }
126 18 View Code Duplication
        if (isset($searchData['tel02']) && Str::isNotBlank($searchData['tel02'])) {
127
            $qb
128 1
                ->andWhere('o.tel02 = :tel02')
129
                ->setParameter('tel02', $searchData['tel02']);
130
        }
131 18 View Code Duplication
        if (isset($searchData['tel03']) && Str::isNotBlank($searchData['tel03'])) {
132
            $qb
133 1
                ->andWhere('o.tel03 = :tel03')
134
                ->setParameter('tel03', $searchData['tel03']);
135
        }
136
137
        // birth
138 19 View Code Duplication
        if (!empty($searchData['birth_start']) && $searchData['birth_start']) {
139 1
            if (!$joinedCustomer) {
140
                $qb->leftJoin('o.Customer', 'c');
141 1
                $joinedCustomer = true;
142
            }
143
144
            $date = $searchData['birth_start']
145
                ->format('Y-m-d H:i:s');
146
            $qb
147 1
                ->andWhere('c.birth >= :birth_start')
148
                ->setParameter('birth_start', $date);
149
        }
150 19 View Code Duplication
        if (!empty($searchData['birth_end']) && $searchData['birth_end']) {
151 1
            if (!$joinedCustomer) {
152
                $qb->leftJoin('o.Customer', 'c');
153 1
                $joinedCustomer = true;
154
            }
155
156 1
            $date = clone $searchData['birth_end'];
157
            $date = $date
158 1
                ->modify('+1 days')
159
                ->format('Y-m-d H:i:s');
160
            $qb
161 1
                ->andWhere('c.birth < :birth_end')
162
                ->setParameter('birth_end', $date);
163
        }
164
165
        // sex
166 18
        if (!empty($searchData['sex']) && count($searchData['sex']) > 0) {
167 1
            if (!$joinedCustomer) {
168
                $qb->leftJoin('o.Customer', 'c');
169 1
                $joinedCustomer = true;
0 ignored issues
show
Unused Code introduced by
$joinedCustomer is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
170
            }
171
172 1
            $sexs = array();
173 1
            foreach ($searchData['sex'] as $sex) {
174
                $sexs[] = $sex->getId();
175
            }
176
177
            $qb
178
                ->andWhere($qb->expr()->in('c.Sex', ':sexs'))
179
                ->setParameter('sexs', $sexs);
180
        }
181
182
        // payment
183 19 View Code Duplication
        if (!empty($searchData['payment']) && count($searchData['payment'])) {
184
            $payments = array();
185
            foreach ($searchData['payment'] as $payment) {
186
                $payments[] = $payment->getId();
187
            }
188
            $qb
189
                ->leftJoin('o.Payment', 'p')
190
                ->andWhere($qb->expr()->in('p.id', ':payments'))
191
                ->setParameter('payments', $payments);
192
        }
193
194
        // oreder_date
195 19 View Code Duplication
        if (!empty($searchData['order_date_start']) && $searchData['order_date_start']) {
196
            $date = $searchData['order_date_start']
197
                ->format('Y-m-d H:i:s');
198
            $qb
199 1
                ->andWhere('o.create_date >= :order_date_start')
200
                ->setParameter('order_date_start', $date);
201
        }
202 19
        if (!empty($searchData['order_date_end']) && $searchData['order_date_end']) {
203 1
            $date = clone $searchData['order_date_end'];
204
            $date = $date
205 1
                ->modify('+1 days')
206
                ->format('Y-m-d H:i:s');
207
            $qb
208 1
                ->andWhere('o.create_date < :order_date_end')
209
                ->setParameter('order_date_end', $date);
210
        }
211
212
        // create_date
213 19 View Code Duplication
        if (!empty($searchData['update_date_start']) && $searchData['update_date_start']) {
214
            $date = $searchData['update_date_start']
215
                ->format('Y-m-d H:i:s');
216
            $qb
217 1
                ->andWhere('o.update_date >= :update_date_start')
218
                ->setParameter('update_date_start', $date);
219
        }
220 19
        if (!empty($searchData['update_date_end']) && $searchData['update_date_end']) {
221 1
            $date = clone $searchData['update_date_end'];
222
            $date = $date
223 1
                ->modify('+1 days')
224
                ->format('Y-m-d H:i:s');
225
            $qb
226 1
                ->andWhere('o.update_date < :update_date_end')
227
                ->setParameter('update_date_end', $date);
228
        }
229
230
        // payment_total
231 18 View Code Duplication
        if (isset($searchData['payment_total_start']) && Str::isNotBlank($searchData['payment_total_start'])) {
232
            $qb
233 1
                ->andWhere('o.payment_total >= :payment_total_start')
234
                ->setParameter('payment_total_start', $searchData['payment_total_start']);
235
        }
236 18 View Code Duplication
        if (isset($searchData['payment_total_end']) && Str::isNotBlank($searchData['payment_total_end'])) {
237
            $qb
238 1
                ->andWhere('o.payment_total <= :payment_total_end')
239
                ->setParameter('payment_total_end', $searchData['payment_total_end']);
240
        }
241
242
        // buy_product_name
243 18 View Code Duplication
        if (isset($searchData['buy_product_name']) && Str::isNotBlank($searchData['buy_product_name'])) {
244
            $qb
245 1
                ->leftJoin('o.OrderDetails', 'od')
246 1
                ->andWhere('od.product_name LIKE :buy_product_name')
247
                ->setParameter('buy_product_name', '%' . $searchData['buy_product_name'] . '%');
0 ignored issues
show
Coding Style introduced by
Concat operator must not be surrounded by spaces
Loading history...
248
        }
249
250
        // Order By
251
        $qb->addOrderBy('o.update_date', 'DESC');
252
253 19
        return $qb;
254
    }
255
256
257
    /**
258
     *
259
     * @param  array        $searchData
0 ignored issues
show
introduced by
Expected 1 spaces after parameter type; 8 found
Loading history...
260
     * @return QueryBuilder
261
     */
262 24
    public function getQueryBuilderBySearchDataForAdmin($searchData)
263
    {
264
        $qb = $this->createQueryBuilder('o');
265
266
        // order_id_start
267 23 View Code Duplication
        if (isset($searchData['order_id_start']) && Str::isNotBlank($searchData['order_id_start'])) {
268
            $qb
269 1
                ->andWhere('o.id >= :order_id_start')
270
                ->setParameter('order_id_start', $searchData['order_id_start']);
271
        }
272
        // multi
273 21 View Code Duplication
        if (isset( $searchData['multi']) && Str::isNotBlank($searchData['multi'])) {
274
            $multi = preg_match('/^\d+$/', $searchData['multi']) ? $searchData['multi'] : null;
275
            $qb
276
                ->andWhere('o.id = :multi OR o.name01 LIKE :likemulti OR o.name02 LIKE :likemulti OR ' .
0 ignored issues
show
Coding Style introduced by
Concat operator must not be surrounded by spaces
Loading history...
277 3
                           'o.kana01 LIKE :likemulti OR o.kana02 LIKE :likemulti OR o.company_name LIKE :likemulti')
0 ignored issues
show
Coding Style introduced by
This line of the multi-line function call does not seem to be indented correctly. Expected 16 spaces, but found 27.
Loading history...
278 3
                ->setParameter('multi', $multi)
279
                ->setParameter('likemulti', '%' . $searchData['multi'] . '%');
0 ignored issues
show
Coding Style introduced by
Concat operator must not be surrounded by spaces
Loading history...
280
        }
281
282
        // order_id_end
283 23 View Code Duplication
        if (isset($searchData['order_id_end']) && Str::isNotBlank($searchData['order_id_end'])) {
284
            $qb
285 1
                ->andWhere('o.id <= :order_id_end')
286
                ->setParameter('order_id_end', $searchData['order_id_end']);
287
        }
288
289
        // status
290 24
        $filterStatus = false;
291 View Code Duplication
        if (!empty($searchData['status']) && $searchData['status']) {
292 1
            $qb
293
                ->andWhere('o.OrderStatus = :status')
294
                ->setParameter('status', $searchData['status']);
295
            $filterStatus = true;
296 23
        }
297
        if (!empty($searchData['multi_status']) && count($searchData['multi_status'])) {
298 1
            $qb
299
                ->andWhere($qb->expr()->in('o.OrderStatus', ':multi_status'))
300
                ->setParameter('multi_status', $searchData['multi_status']->toArray());
301 23
            $filterStatus = true;
302
        }
303 1
        if (!$filterStatus) {
304
            // 購入処理中は検索対象から除外
305
            $OrderStatuses = $this->getEntityManager()
306
                ->getRepository('Eccube\Entity\Master\OrderStatus')
307
                ->findNotContainsBy(array('id' => $this->app['config']['order_processing']));
308 23
            $qb->andWhere($qb->expr()->in('o.OrderStatus', ':status'))
309
                ->setParameter('status', $OrderStatuses);
310 1
        }
311
312
        // name
313 View Code Duplication
        if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) {
314
            $qb
315 23
                ->andWhere('CONCAT(o.name01, o.name02) LIKE :name')
316
                ->setParameter('name', '%' . $searchData['name'] . '%');
0 ignored issues
show
Coding Style introduced by
Concat operator must not be surrounded by spaces
Loading history...
317 1
        }
318
319
        // kana
320 View Code Duplication
        if (isset($searchData['kana']) && Str::isNotBlank($searchData['kana'])) {
321
            $qb
322 23
                ->andWhere('CONCAT(o.kana01, o.kana02) LIKE :kana')
323
                ->setParameter('kana', '%' . $searchData['kana'] . '%');
0 ignored issues
show
Coding Style introduced by
Concat operator must not be surrounded by spaces
Loading history...
324 1
        }
325
326
        // email
327 View Code Duplication
        if (isset($searchData['email']) && Str::isNotBlank($searchData['email'])) {
328
            $qb
329 23
                ->andWhere('o.email like :email')
330
                ->setParameter('email', '%' . $searchData['email'] . '%');
0 ignored issues
show
Coding Style introduced by
Concat operator must not be surrounded by spaces
Loading history...
331
        }
332
333
        // tel
334 View Code Duplication
        if (isset($searchData['tel']) && Str::isNotBlank($searchData['tel'])) {
335
            $qb
336 24
                ->andWhere('CONCAT(o.tel01, o.tel02, o.tel03) LIKE :tel')
337
                ->setParameter('tel', '%' . $searchData['tel'] . '%');
0 ignored issues
show
Coding Style introduced by
Concat operator must not be surrounded by spaces
Loading history...
338
        }
339
340
        // sex
341
        if (!empty($searchData['sex']) && count($searchData['sex']) > 0) {
342
            $qb
343
                ->andWhere($qb->expr()->in('o.Sex', ':sex'))
344
                ->setParameter('sex', $searchData['sex']->toArray());
345
        }
346
347
        // payment
348 24 View Code Duplication
        if (!empty($searchData['payment']) && count($searchData['payment'])) {
349
            $payments = array();
350
            foreach ($searchData['payment'] as $payment) {
351
                $payments[] = $payment->getId();
352 1
            }
353
            $qb
354
                ->leftJoin('o.Payment', 'p')
355 24
                ->andWhere($qb->expr()->in('p.id', ':payments'))
356 1
                ->setParameter('payments', $payments);
357
        }
358 1
359
        // oreder_date
360 View Code Duplication
        if (!empty($searchData['order_date_start']) && $searchData['order_date_start']) {
361 1
            $date = $searchData['order_date_start']
362
                ->format('Y-m-d H:i:s');
363
            $qb
364
                ->andWhere('o.order_date >= :order_date_start')
365
                ->setParameter('order_date_start', $date);
366 24
        }
367
        if (!empty($searchData['order_date_end']) && $searchData['order_date_end']) {
368
            $date = clone $searchData['order_date_end'];
369
            $date = $date
370 1
                ->modify('+1 days')
371
                ->format('Y-m-d H:i:s');
372
            $qb
373 24
                ->andWhere('o.order_date < :order_date_end')
374 1
                ->setParameter('order_date_end', $date);
375
        }
376 1
377
        // payment_date
378 View Code Duplication
        if (!empty($searchData['payment_date_start']) && $searchData['payment_date_start']) {
379 1
            $date = $searchData['payment_date_start']
380
                ->format('Y-m-d H:i:s');
381
            $qb
382
                ->andWhere('o.payment_date >= :payment_date_start')
383
                ->setParameter('payment_date_start', $date);
384 24
        }
385
        if (!empty($searchData['payment_date_end']) && $searchData['payment_date_end']) {
386
            $date = clone $searchData['payment_date_end'];
387
            $date = $date
388 1
                ->modify('+1 days')
389
                ->format('Y-m-d H:i:s');
390
            $qb
391 24
                ->andWhere('o.payment_date < :payment_date_end')
392 1
                ->setParameter('payment_date_end', $date);
393
        }
394 1
395
        // commit_date
396 View Code Duplication
        if (!empty($searchData['commit_date_start']) && $searchData['commit_date_start']) {
397 1
            $date = $searchData['commit_date_start']
398
                ->format('Y-m-d H:i:s');
399
            $qb
400
                ->andWhere('o.commit_date >= :commit_date_start')
401
                ->setParameter('commit_date_start', $date);
402
        }
403 24
        if (!empty($searchData['commit_date_end']) && $searchData['commit_date_end']) {
404
            $date = clone $searchData['commit_date_end'];
405
            $date = $date
406
                ->modify('+1 days')
407 1
                ->format('Y-m-d H:i:s');
408
            $qb
409
                ->andWhere('o.commit_date < :commit_date_end')
410 24
                ->setParameter('commit_date_end', $date);
411 1
        }
412
413 1
414
        // update_date
415 View Code Duplication
        if (!empty($searchData['update_date_start']) && $searchData['update_date_start']) {
416 1
            $date = $searchData['update_date_start']
417
                ->format('Y-m-d H:i:s');
418
            $qb
419
                ->andWhere('o.update_date >= :update_date_start')
420
                ->setParameter('update_date_start', $date);
421 23
        }
422
        if (!empty($searchData['update_date_end']) && $searchData['update_date_end']) {
423 1
            $date = clone $searchData['update_date_end'];
424
            $date = $date
425
                ->modify('+1 days')
426 23
                ->format('Y-m-d H:i:s');
427
            $qb
428 1
                ->andWhere('o.update_date < :update_date_end')
429
                ->setParameter('update_date_end', $date);
430
        }
431
432
        // payment_total
433 23 View Code Duplication
        if (isset($searchData['payment_total_start']) && Str::isNotBlank($searchData['payment_total_start'])) {
434
            $qb
435 1
                ->andWhere('o.payment_total >= :payment_total_start')
436 1
                ->setParameter('payment_total_start', $searchData['payment_total_start']);
437
        }
438 View Code Duplication
        if (isset($searchData['payment_total_end']) && Str::isNotBlank($searchData['payment_total_end'])) {
439
            $qb
440
                ->andWhere('o.payment_total <= :payment_total_end')
441
                ->setParameter('payment_total_end', $searchData['payment_total_end']);
442
        }
443
444 24
        // buy_product_name
445 View Code Duplication
        if (isset($searchData['buy_product_name']) && Str::isNotBlank($searchData['buy_product_name'])) {
446
            $qb
447
                ->leftJoin('o.OrderDetails', 'od')
448
                ->andWhere('od.product_name LIKE :buy_product_name')
449
                ->setParameter('buy_product_name', '%' . $searchData['buy_product_name'] . '%');
0 ignored issues
show
Coding Style introduced by
Concat operator must not be surrounded by spaces
Loading history...
450
        }
451
452 1
        // Order By
453
        $qb->orderBy('o.update_date', 'DESC');
454 1
        $qb->addorderBy('o.id', 'DESC');
455 1
456
        return $qb;
457
    }
458
459
460
    /**
461 1
     * @param  \Eccube\Entity\Customer $Customer
462 1
     * @return QueryBuilder
463
     */
464
    public function getQueryBuilderByCustomer(\Eccube\Entity\Customer $Customer)
465
    {
466
        $qb = $this->createQueryBuilder('o')
467
            ->where('o.Customer = :Customer')
468
            ->setParameter('Customer', $Customer);
469 1
470
        // Order By
471
        $qb->addOrderBy('o.id', 'DESC');
472
473 1
        return $qb;
474
    }
475 1
476
    /**
477
     * 新規受付一覧の取得
478
     *
479 1
     * @return \Eccube\Entity\Order[]
480
     */
481
    public function getNew()
482
    {
483
        $qb = $this->createQueryBuilder('o');
484
        $qb
485
            ->where('o.OrderStatus <> :OrderStatus')
486
            ->setParameter('OrderStatus', $this->app['config']['order_cancel'])
487
            ->setMaxResults(10)
488
            ->orderBy('o.create_date', 'DESC');
489
490
        return $qb
491
            ->getQuery()
492
            ->getResult();
493
    }
494
495
    /**
496
     * 会員の合計購入金額を取得、回数を取得
497
     *
498
     * @param  \Eccube\Entity\Customer $Customer
499
     * @param  array $OrderStatuses
0 ignored issues
show
introduced by
Expected 19 spaces after parameter type; 1 found
Loading history...
500
     * @return QueryBuilder
501
     */
502
    public function getCustomerCount(\Eccube\Entity\Customer $Customer, array $OrderStatuses)
503
    {
504
        $result = $this->createQueryBuilder('o')
505
            ->select('COUNT(o.id) AS buy_times, SUM(o.total)  AS buy_total')
506
            ->where('o.Customer = :Customer')
507
            ->andWhere('o.OrderStatus in (:OrderStatuses)')
508
            ->setParameter('Customer', $Customer)
509
            ->setParameter('OrderStatuses', $OrderStatuses)
510
            ->groupBy('o.Customer')
511
            ->getQuery()
512
            ->getResult();
513
514
        return $result;
515
    }
516
}
517