Completed
Pull Request — master (#1)
by Grebenikov
14:36
created

expandOrderItemWithStateFlags()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 17
rs 9.2
c 0
b 0
f 0
cc 4
eloc 11
nc 4
nop 1
1
<?php
2
3
/**
4
 * MIT License
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
namespace SprykerEco\Zed\Minubo\Business\DataExpander;
8
9
use SprykerEco\Zed\Minubo\Dependency\Facade\MinuboToOmsFacadeInterface;
10
11
class OrderItemStateFlagExpander implements OrderItemStateFlagExpanderInterface
12
{
13
    const KEY_ITEMS = 'Items';
14
    const KEY_PROCESS = 'Process';
15
    const KEY_STATE = 'State';
16
    const KEY_NAME = 'name';
17
    const KEY_OMS_STATE_FLAGS = 'OmsStateFlags';
18
19
    const KEY_TRANSITION_LOG = 'TransitionLogs';
20
    const KEY_TARGET_STATE = 'target_state';
21
    const KEY_OMS_TARGET_STATE_FLAGS = 'OmsTargetStateFlags';
22
23
    /**
24
     * @var array
25
     */
26
    protected static $stateFlags;
27
28
    /**
29
     * @var \SprykerEco\Zed\Minubo\Dependency\Facade\MinuboToOmsFacadeInterface
30
     */
31
    protected $omsFacade;
32
33
    /**
34
     * @param \SprykerEco\Zed\Minubo\Dependency\Facade\MinuboToOmsFacadeInterface $omsFacade
35
     */
36
    public function __construct(MinuboToOmsFacadeInterface $omsFacade)
37
    {
38
        $this->omsFacade = $omsFacade;
39
        static::$stateFlags = [];
40
    }
41
42
    /**
43
     * @param array $data
44
     *
45
     * @return array
46
     */
47
    public function expandOrderItemWithStateFlags(array $data): array
48
    {
49
        foreach ($data[static::KEY_ITEMS] as $key => $item) {
50
            $processName = $item[static::KEY_PROCESS][static::KEY_NAME];
51
            $stateName = $item[static::KEY_STATE][static::KEY_NAME];
52
            $data[static::KEY_ITEMS][$key][static::KEY_OMS_STATE_FLAGS] = $this->getOmsStateFlags($processName, $stateName);
53
54
            foreach ($item[static::KEY_TRANSITION_LOG] as $trKey => $transition) {
55
                if (!array_key_exists(static::KEY_TARGET_STATE, $transition)) {
56
                    continue;
57
                }
58
                $targetState = $transition[static::KEY_TARGET_STATE];
59
                $data[static::KEY_ITEMS][$key][static::KEY_TRANSITION_LOG][$trKey][static::KEY_OMS_TARGET_STATE_FLAGS] =
60
                    $this->getOmsStateFlags($processName, $targetState);
61
            }
62
        }
63
        return $data;
64
    }
65
66
    /**
67
     * @param string $processName
68
     * @param string $stateName
69
     *
70
     * @return array
71
     */
72
    protected function getOmsStateFlags(string $processName, string $stateName): array
73
    {
74
        if (!isset(static::$stateFlags[$processName])) {
75
            static::$stateFlags[$processName] = [];
76
        }
77
78
        if (!isset(static::$stateFlags[$processName][$stateName])) {
79
            static::$stateFlags[$processName][$stateName] = $this->omsFacade->getStateFlags($processName, $stateName);
80
        }
81
82
        return static::$stateFlags[$processName][$stateName];
83
    }
84
}
85