Completed
Push — master ( ab8769...6ede23 )
by Dmitry
04:18
created

SaleSort::byTargetObjectName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 0
cts 5
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 2
1
<?php
2
3
namespace hipanel\modules\finance\helpers;
4
5
use hipanel\modules\finance\models\FakeGroupingSale;
6
use hipanel\modules\finance\models\FakeSale;
7
use hipanel\modules\finance\models\FakeSharedSale;
8
use hipanel\modules\finance\models\Price;
9
use hipanel\modules\finance\models\Sale;
10
use Tuck\Sort\Sort;
11
use Tuck\Sort\SortChain;
12
13
/**
14
 * Class SaleSort
15
 *
16
 * @author Dmytro Naumenko <[email protected]>
17
 */
18
class SaleSort
19
{
20
    public static function toDisplayInPlan(): SortChain
21
    {
22
        return Sort::chain()
23
            ->asc(self::bySaleClass())
24
            ->compare(self::byTargetObjectName());
25
    }
26
27
    private static function bySaleClass(): \Closure
28
    {
29
        $map = [
30
            FakeSharedSale::class => 1,
31
            FakeGroupingSale::class => 2,
32
            FakeSale::class => 4,
33
            Sale::class => 3,
34
        ];
35
36
        return function (Sale $sale) use ($map) {
37
            foreach ($map as $class => $order) {
38
                if ($sale instanceof $class) {
39
                    return $order;
40
                }
41
            }
42
43
            return INF;
44
        };
45
    }
46
47
    private static function byTargetObjectName(): \Closure
48
    {
49
        return function (Sale $a, Sale $b) {
50
            return strnatcasecmp($a->object, $b->object);
51
        };
52
    }
53
}
54