Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
order_with_bundle_shipped_separately.php
Go to the documentation of this file.
1 <?php
7 require __DIR__ . '/../../../Magento/Catalog/_files/products.php';
8 
12 $productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class);
14 $secondSampleProduct = $productRepository->get('custom-design-simple-product');
15 
17 $product = $objectManager->create(\Magento\Catalog\Model\Product::class);
18 $product->setTypeId('bundle')
19  ->setId(3)
20  ->setAttributeSetId(4)
21  ->setWebsiteIds([1])
22  ->setName('Bundle Product')
23  ->setSku('bundle-product')
24  ->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH)
25  ->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED)
26  ->setStockData(['use_config_manage_stock' => 1, 'qty' => 100, 'is_qty_decimal' => 0, 'is_in_stock' => 1])
27  ->setPriceView(1)
28  ->setPriceType(1)
29  ->setShipmentType(1)
30  ->setPrice(10.0)
31  ->setBundleOptionsData(
32  [
33  [
34  'title' => 'Bundle Product Items',
35  'default_title' => 'Bundle Product Items',
36  'type' => 'select',
37  'required' => 1,
38  'delete' => '',
39  ],
40  [
41  'title' => 'Bundle Product Items Option 2',
42  'default_title' => 'Bundle Product Items Option 2',
43  'type' => 'select',
44  'required' => 1,
45  'delete' => '',
46  ],
47  ]
48  )
49  ->setBundleSelectionsData(
50  [
51  [
52  [
53  'product_id' => $sampleProduct->getId(),
54  'selection_qty' => 1,
55  'selection_can_change_qty' => 1,
56  'delete' => '',
57  ],
58  ],
59  [
60  [
61  'product_id' => $secondSampleProduct->getId(),
62  'selection_qty' => 1,
63  'selection_can_change_qty' => 1,
64  'delete' => '',
65  ],
66  ]
67  ]
68  );
69 
70 if ($product->getBundleOptionsData()) {
71  $options = [];
72  foreach ($product->getBundleOptionsData() as $key => $optionData) {
73  if (!(bool)$optionData['delete']) {
74  $option = $objectManager->create(\Magento\Bundle\Api\Data\OptionInterfaceFactory::class)
75  ->create(['data' => $optionData]);
76  $option->setSku($product->getSku());
77  $option->setOptionId(null);
78 
79  $links = [];
80  $bundleLinks = $product->getBundleSelectionsData();
81  if (!empty($bundleLinks[$key])) {
82  foreach ($bundleLinks[$key] as $linkData) {
83  if (!(bool)$linkData['delete']) {
85  $link = $objectManager->create(\Magento\Bundle\Api\Data\LinkInterfaceFactory::class)
86  ->create(['data' => $linkData]);
87  $linkProduct = $productRepository->getById($linkData['product_id']);
88  $link->setSku($linkProduct->getSku());
89  $link->setQty($linkData['selection_qty']);
90  if (isset($linkData['selection_can_change_qty'])) {
91  $link->setCanChangeQuantity($linkData['selection_can_change_qty']);
92  }
93  $links[] = $link;
94  }
95  }
96  $option->setProductLinks($links);
97  $options[] = $option;
98  }
99  }
100  }
101  $extension = $product->getExtensionAttributes();
102  $extension->setBundleProductOptions($options);
103  $product->setExtensionAttributes($extension);
104 }
105 $product->save();
106 
108 
109 $addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
110 
111 $billingAddress = $objectManager->create(\Magento\Sales\Model\Order\Address::class, ['data' => $addressData]);
112 $billingAddress->setAddressType('billing');
113 
115 $shippingAddress->setId(null)->setAddressType('shipping');
116 
117 $payment = $objectManager->create(\Magento\Sales\Model\Order\Payment::class);
118 $payment->setMethod('checkmo');
119 
121 $product = $objectManager->create(\Magento\Catalog\Model\Product::class);
122 $product->load(3);
123 
125 $typeInstance = $product->getTypeInstance();
126 $typeInstance->setStoreFilter($product->getStoreId(), $product);
127 $optionCollection = $typeInstance->getOptionsCollection($product);
128 
132 foreach ($optionCollection as $option) {
134  $selectionsCollection = $typeInstance->getSelectionsCollection([$option->getId()], $product);
135  if ($option->isMultiSelection()) {
136  $optionsData[$option->getId()] = array_column($selectionsCollection->toArray(), 'product_id');
137  $bundleOptions[$option->getId()] = array_column($selectionsCollection->toArray(), 'selection_id');
138  } else {
139  $bundleOptions[$option->getId()] = $selectionsCollection->getFirstItem()->getSelectionId();
140  $optionsData[$option->getId()] = $selectionsCollection->getFirstItem()->getProductId();
141  }
142  $bundleOptionsQty[$option->getId()] = 1;
143 }
144 
146  'product' => $product->getId(),
147  'bundle_option' => $bundleOptions,
148  'bundle_option_qty' => $bundleOptionsQty,
149  'qty' => 1,
150 ];
151 
154 $orderItem = $objectManager->create(\Magento\Sales\Model\Order\Item::class);
155 $orderItem->setProductId($product->getId());
156 $orderItem->setQtyOrdered(1);
157 $orderItem->setBasePrice($product->getPrice());
158 $orderItem->setPrice($product->getPrice());
159 $orderItem->setRowTotal($product->getPrice());
160 $orderItem->setProductType($product->getTypeId());
161 $orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
162 
164 
165 foreach ($optionsData as $optionId => $productId) {
167  $selectedProduct = $objectManager->create(\Magento\Catalog\Model\Product::class);
168  $selectedProduct->load($productId);
169 
171  $orderItem = $objectManager->create(\Magento\Sales\Model\Order\Item::class);
172  $orderItem->setProductId($productId);
173  $orderItem->setQtyOrdered(1);
174  $orderItem->setBasePrice($selectedProduct->getPrice());
175  $orderItem->setPrice($selectedProduct->getPrice());
176  $orderItem->setRowTotal($selectedProduct->getPrice());
177  $orderItem->setProductType($selectedProduct->getTypeId());
178  $orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
180 }
181 
183 $order = $objectManager->create(\Magento\Sales\Model\Order::class);
184 $order->setIncrementId('100000001');
185 $order->setState(\Magento\Sales\Model\Order::STATE_NEW);
186 $order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
187 $order->setCustomerIsGuest(true);
188 $order->setCustomerEmail('[email protected]');
189 $order->setCustomerFirstname('firstname');
190 $order->setCustomerLastname('lastname');
191 $order->setBillingAddress($billingAddress);
192 $order->setShippingAddress($shippingAddress);
193 $order->setAddresses([$billingAddress, $shippingAddress]);
194 $order->setPayment($payment);
195 
196 foreach ($orderItems as $item) {
197  $order->addItem($item);
198 }
199 
200 $order->setStoreId($objectManager->get(\Magento\Store\Model\StoreManagerInterface::class)->getStore()->getId());
201 $order->setSubtotal(100);
202 $order->setBaseSubtotal(100);
203 $order->setBaseGrandTotal(100);
204 $order->save();
$optionData
defined('TESTS_BP')||define('TESTS_BP' __DIR__
Definition: _bootstrap.php:60
foreach($optionCollection as $option) $requestInfo