15
15
use Magento \Quote \Model \Quote \Address \CustomAttributeListInterface ;
16
16
use Magento \Quote \Model \Quote \Item ;
17
17
use Magento \Sales \Api \Data \OrderAddressInterface ;
18
+ use Magento \Sales \Api \OrderRepositoryInterface ;
18
19
use Magento \Sales \Model \Order ;
19
20
use Magento \Store \Model \StoreManagerInterface ;
20
21
use Psr \Log \LoggerInterface ;
22
+ use Magento \Quote \Model \Quote ;
21
23
22
24
/**
23
25
* Order create model
@@ -257,6 +259,11 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
257
259
*/
258
260
private $ customAttributeList ;
259
261
262
+ /**
263
+ * @var OrderRepositoryInterface
264
+ */
265
+ private $ orderRepositoryInterface ;
266
+
260
267
/**
261
268
* @param \Magento\Framework\ObjectManagerInterface $objectManager
262
269
* @param \Magento\Framework\Event\ManagerInterface $eventManager
@@ -290,6 +297,7 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
290
297
* @param ExtensibleDataObjectConverter|null $dataObjectConverter
291
298
* @param StoreManagerInterface $storeManager
292
299
* @param CustomAttributeListInterface|null $customAttributeList
300
+ * @param OrderRepositoryInterface|null $orderRepositoryInterface
293
301
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
294
302
*/
295
303
public function __construct (
@@ -324,7 +332,8 @@ public function __construct(
324
332
\Magento \Framework \Serialize \Serializer \Json $ serializer = null ,
325
333
ExtensibleDataObjectConverter $ dataObjectConverter = null ,
326
334
StoreManagerInterface $ storeManager = null ,
327
- CustomAttributeListInterface $ customAttributeList = null
335
+ CustomAttributeListInterface $ customAttributeList = null ,
336
+ OrderRepositoryInterface $ orderRepositoryInterface = null
328
337
) {
329
338
$ this ->_objectManager = $ objectManager ;
330
339
$ this ->_eventManager = $ eventManager ;
@@ -361,6 +370,8 @@ public function __construct(
361
370
$ this ->storeManager = $ storeManager ?: ObjectManager::getInstance ()->get (StoreManagerInterface::class);
362
371
$ this ->customAttributeList = $ customAttributeList ?: ObjectManager::getInstance ()
363
372
->get (CustomAttributeListInterface::class);
373
+ $ this ->orderRepositoryInterface = $ orderRepositoryInterface ?: ObjectManager::getInstance ()
374
+ ->get (OrderRepositoryInterface::class);
364
375
}
365
376
366
377
/**
@@ -1983,7 +1994,8 @@ protected function _prepareQuoteItems()
1983
1994
/**
1984
1995
* Create new order
1985
1996
*
1986
- * @return \Magento\Sales\Model\Order
1997
+ * @return Order
1998
+ * @throws \Magento\Framework\Exception\LocalizedException
1987
1999
*/
1988
2000
public function createOrder ()
1989
2001
{
@@ -1993,9 +2005,34 @@ public function createOrder()
1993
2005
1994
2006
$ this ->_prepareQuoteItems ();
1995
2007
2008
+ $ orderData = $ this ->beforeSubmit ($ quote );
2009
+ $ order = $ this ->quoteManagement ->submit ($ quote , $ orderData );
2010
+ $ this ->afterSubmit ($ order );
2011
+
2012
+ if ($ this ->getSendConfirmation () && !$ order ->getEmailSent ()) {
2013
+ $ this ->emailSender ->send ($ order );
2014
+ }
2015
+
2016
+ $ this ->_eventManager ->dispatch ('checkout_submit_all_after ' , ['order ' => $ order , 'quote ' => $ quote ]);
2017
+
2018
+ $ this ->removeTransferredItems ();
2019
+
2020
+ return $ order ;
2021
+ }
2022
+
2023
+ /**
2024
+ * Prepare and retrieve order data before submitting a quote for order creation.
2025
+ *
2026
+ * @param Quote $quote
2027
+ * @return array
2028
+ */
2029
+ private function beforeSubmit (Quote $ quote )
2030
+ {
1996
2031
$ orderData = [];
1997
- if ($ this ->getSession ()->getOrder ()->getId ()) {
2032
+ if ($ this ->getSession ()->getReordered () || $ this -> getSession ()-> getOrder ()->getId ()) {
1998
2033
$ oldOrder = $ this ->getSession ()->getOrder ();
2034
+ $ oldOrder = $ oldOrder ->getId () ?
2035
+ $ oldOrder : $ this ->orderRepositoryInterface ->get ($ this ->getSession ()->getReordered ());
1999
2036
$ originalId = $ oldOrder ->getOriginalIncrementId ();
2000
2037
if (!$ originalId ) {
2001
2038
$ originalId = $ oldOrder ->getIncrementId ();
@@ -2009,25 +2046,31 @@ public function createOrder()
2009
2046
];
2010
2047
$ quote ->setReservedOrderId ($ orderData ['increment_id ' ]);
2011
2048
}
2012
- $ order = $ this ->quoteManagement ->submit ($ quote , $ orderData );
2013
- if ($ this ->getSession ()->getOrder ()->getId ()) {
2049
+
2050
+ return $ orderData ;
2051
+ }
2052
+
2053
+ /**
2054
+ * Process old order after submission.
2055
+ *
2056
+ * @param Order $order
2057
+ * @return void
2058
+ * @throws \Exception
2059
+ */
2060
+ private function afterSubmit (Order $ order )
2061
+ {
2062
+ if ($ this ->getSession ()->getReordered () || $ this ->getSession ()->getOrder ()->getId ()) {
2014
2063
$ oldOrder = $ this ->getSession ()->getOrder ();
2064
+ $ oldOrder = $ oldOrder ->getId () ?
2065
+ $ oldOrder : $ this ->orderRepositoryInterface ->get ($ this ->getSession ()->getReordered ());
2015
2066
$ oldOrder ->setRelationChildId ($ order ->getId ());
2016
2067
$ oldOrder ->setRelationChildRealId ($ order ->getIncrementId ());
2017
2068
$ oldOrder ->save ();
2018
- $ this ->orderManagement ->cancel ($ oldOrder ->getEntityId ());
2069
+ if ($ this ->getSession ()->getOrder ()->getId ()) {
2070
+ $ this ->orderManagement ->cancel ($ oldOrder ->getEntityId ());
2071
+ }
2019
2072
$ order ->save ();
2020
2073
}
2021
-
2022
- if ($ this ->getSendConfirmation () && !$ order ->getEmailSent ()) {
2023
- $ this ->emailSender ->send ($ order );
2024
- }
2025
-
2026
- $ this ->_eventManager ->dispatch ('checkout_submit_all_after ' , ['order ' => $ order , 'quote ' => $ quote ]);
2027
-
2028
- $ this ->removeTransferredItems ();
2029
-
2030
- return $ order ;
2031
2074
}
2032
2075
2033
2076
/**
0 commit comments