13
13
*/
14
14
class StateResolver implements OrderStateResolverInterface
15
15
{
16
+
17
+ /**
18
+ * Check is order in complete state
19
+ *
20
+ * @param OrderInterface $order
21
+ * @return bool
22
+ */
23
+ private function checkIsOrderComplete (OrderInterface $ order )
24
+ {
25
+ /** @var $order Order|OrderInterface */
26
+ if (0 == $ order ->getBaseGrandTotal () || $ order ->canCreditmemo ()) {
27
+ if ($ order ->getState () !== Order::STATE_COMPLETE ) {
28
+ return true ;
29
+ }
30
+ }
31
+ return false ;
32
+ }
33
+
34
+ /**
35
+ * Check is order in cancel state
36
+ *
37
+ * @param OrderInterface $order
38
+ * @param array $arguments
39
+ * @return bool
40
+ */
41
+ private function checkIsOrderClosed (OrderInterface $ order , $ arguments )
42
+ {
43
+ /** @var $order Order|OrderInterface */
44
+ $ forceCreditmemo = in_array (self ::FORCED_CREDITMEMO , $ arguments );
45
+ if (floatval ($ order ->getTotalRefunded ()) || !$ order ->getTotalRefunded () && $ forceCreditmemo ) {
46
+ if ($ order ->getState () !== Order::STATE_CLOSED ) {
47
+ return true ;
48
+ }
49
+ }
50
+ return false ;
51
+ }
52
+
16
53
/**
17
54
* @param OrderInterface $order
18
55
* @param array $arguments
@@ -23,16 +60,10 @@ public function getStateForOrder(OrderInterface $order, array $arguments = [])
23
60
/** @var $order Order|OrderInterface */
24
61
$ orderState = $ order ->getState () === Order::STATE_PROCESSING ? Order::STATE_PROCESSING : Order::STATE_NEW ;
25
62
if (!$ order ->isCanceled () && !$ order ->canUnhold () && !$ order ->canInvoice () && !$ order ->canShip ()) {
26
- if (0 == $ order ->getBaseGrandTotal () || $ order ->canCreditmemo ()) {
27
- if ($ order ->getState () !== Order::STATE_COMPLETE ) {
28
- $ orderState = Order::STATE_COMPLETE ;
29
- }
30
- } elseif (floatval ($ order ->getTotalRefunded ())
31
- || !$ order ->getTotalRefunded () && in_array (self ::FORCED_CREDITMEMO , $ arguments )
32
- ) {
33
- if ($ order ->getState () !== Order::STATE_CLOSED ) {
34
- $ orderState = Order::STATE_CLOSED ;
35
- }
63
+ if ($ this ->checkIsOrderComplete ($ order )) {
64
+ $ orderState = Order::STATE_COMPLETE ;
65
+ } elseif ($ this ->checkIsOrderClosed ($ order , $ arguments )) {
66
+ $ orderState = Order::STATE_CLOSED ;
36
67
}
37
68
}
38
69
if ($ order ->getState () == Order::STATE_NEW && in_array (self ::IN_PROGRESS , $ arguments )) {
0 commit comments