25
25
use Magento \Sales \Api \InvoiceManagementInterface ;
26
26
use Magento \Sales \Api \OrderManagementInterface ;
27
27
use Magento \Sales \Model \Order ;
28
+ use Magento \SalesSequence \Model \Manager as OrderSequenceManager ;
28
29
use Meta \BusinessExtension \Model \System \Config as SystemConfig ;
29
30
use Meta \Sales \Api \Data \FacebookOrderInterface ;
30
31
use Meta \Sales \Api \Data \FacebookOrderInterfaceFactory ;
34
35
35
36
/**
36
37
* Create order from facebook api data
38
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
37
39
*/
38
40
class CreateOrder
39
41
{
@@ -72,6 +74,11 @@ class CreateOrder
72
74
*/
73
75
private OrderMapper $ orderMapper ;
74
76
77
+ /**
78
+ * @var OrderSequenceManager
79
+ */
80
+ private OrderSequenceManager $ orderSequenceManager ;
81
+
75
82
/**
76
83
* @param ManagerInterface $eventManager
77
84
* @param OrderManagementInterface $orderManagement
@@ -80,6 +87,7 @@ class CreateOrder
80
87
* @param InvoiceManagementInterface $invoiceManagement
81
88
* @param TransactionFactory $transactionFactory
82
89
* @param OrderMapper $orderMapper
90
+ * @param OrderSequenceManager $orderSequenceManager
83
91
*/
84
92
public function __construct (
85
93
ManagerInterface $ eventManager ,
@@ -88,7 +96,8 @@ public function __construct(
88
96
FacebookOrderInterfaceFactory $ facebookOrderFactory ,
89
97
InvoiceManagementInterface $ invoiceManagement ,
90
98
TransactionFactory $ transactionFactory ,
91
- OrderMapper $ orderMapper
99
+ OrderMapper $ orderMapper ,
100
+ OrderSequenceManager $ orderSequenceManager
92
101
) {
93
102
$ this ->eventManager = $ eventManager ;
94
103
$ this ->orderManagement = $ orderManagement ;
@@ -97,6 +106,23 @@ public function __construct(
97
106
$ this ->invoiceManagement = $ invoiceManagement ;
98
107
$ this ->transactionFactory = $ transactionFactory ;
99
108
$ this ->orderMapper = $ orderMapper ;
109
+ $ this ->orderSequenceManager = $ orderSequenceManager ;
110
+ }
111
+
112
+ /**
113
+ * Generate a new increment order ID and associate it with a current order
114
+ *
115
+ * @param Order $order
116
+ * @return string|null
117
+ * @throws LocalizedException
118
+ */
119
+ public function reserveOrderIncrementId (Order $ order ): ?string
120
+ {
121
+ $ reservedOrderId = $ this ->orderSequenceManager
122
+ ->getSequence (Order::ENTITY , $ order ->getStoreId ())
123
+ ->getNextValue ();
124
+ $ order ->setIncrementId ($ reservedOrderId );
125
+ return $ reservedOrderId ;
100
126
}
101
127
102
128
/**
@@ -119,6 +145,7 @@ public function execute(array $data, int $storeId): Order
119
145
}
120
146
121
147
$ order = $ this ->orderMapper ->map ($ data , $ storeId );
148
+ $ this ->reserveOrderIncrementId ($ order );
122
149
$ channel = ucfirst ($ data ['channel ' ]);
123
150
124
151
$ this ->orderManagement ->place ($ order );
0 commit comments