StatusAction   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 10
lcom 0
cbo 3
dl 0
loc 77
ccs 33
cts 33
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
B execute() 0 59 8
A supports() 0 6 2
1
<?php
2
3
namespace PayumTW\Ezship\Action;
4
5
use Payum\Core\Action\ActionInterface;
6
use Payum\Core\Bridge\Spl\ArrayObject;
7
use Payum\Core\Request\GetStatusInterface;
8
use Payum\Core\Exception\RequestNotSupportedException;
9
10
class StatusAction implements ActionInterface
11
{
12
    /**
13
     * {@inheritdoc}
14
     *
15
     * @param GetStatusInterface $request
16
     */
17 4
    public function execute($request)
18
    {
19 4
        RequestNotSupportedException::assertSupports($this, $request);
20
21 4
        $details = ArrayObject::ensureArrayObject($request->getModel());
22
23 4
        if (isset($details['processID']) === true && isset($details['stName']) === true) {
24 1
            $request->markCaptured();
25
26 1
            return;
27
        }
28
29 4
        if (isset($details['order_id']) === true && isset($details['sn_id']) === true) {
30 2
            if ($details['order_status'] === 'S01') {
31 1
                $request->markCaptured();
32
33 1
                return;
34
            }
35
36 1
            $request->markFailed();
37
38 1
            return;
39
        }
40
41 3
        if (isset($details['sn_id']) === true && isset($details['order_status']) === true) {
42
            $status = [
43
                // 尚未寄件或尚未收到超商總公司提供的寄件訊息
44 2
                'S01' => 'markUnknown',
45
                // 運往取件門市途中
46 2
                'S02' => 'markUnknown',
47
                // 已送達取件門市
48 2
                'S03' => 'markUnknown',
49
                // 已完成取貨
50 2
                'S04' => 'markUnknown',
51
                // 退貨 (包含:已退回物流中心 / 再寄一次給取件人 / 退回給寄件人)
52 2
                'S05' => 'markUnknown',
53
                // 配送異常 (包含:刪單 / 門市閉店 / 貨故)
54 2
                'S06' => 'markUnknown',
55
                // 參數傳遞內容有誤或欄位短缺
56 2
                'E00' => 'markFailed',
57
                // <su_id>帳號不存在
58 2
                'E01' => 'markFailed',
59
                // <su_id>帳號無網站串接權限
60 2
                'E02' => 'markFailed',
61
                // <sn_id>店到店編號有誤
62 2
                'E03' => 'markFailed',
63
                // <su_id>帳號與<sn_id>店到店編號無法對應
64 2
                'E04' => 'markFailed',
65
                // 系統錯誤
66 2
                'E99' => 'markFailed',
67 2
            ];
68
69 2
            call_user_func([$request, $status[$details['order_status']]]);
70
71 2
            return;
72
        }
73
74 1
        $request->markNew();
75 1
    }
76
77
    /**
78
     * {@inheritdoc}
79
     */
80 4
    public function supports($request)
81
    {
82
        return
83 4
            $request instanceof GetStatusInterface &&
84 4
            $request->getModel() instanceof \ArrayAccess;
85
    }
86
}
87