@@ -170,7 +170,6 @@ public function map(array $data, int $storeId): Order
170
170
171
171
$ this ->applyShippingToOrder ($ order , $ data , $ storeId );
172
172
$ this ->applyItemsToOrder ($ order , $ data , $ storeId );
173
- $ this ->applyDiscountsToOrder ($ order , $ data );
174
173
$ this ->applyTotalsToOrder ($ order , $ data , $ storeId );
175
174
176
175
$ order ->addCommentToStatusHistory ("Order Imported from Meta. Meta Order ID: # {$ facebookOrderId }" );
@@ -315,7 +314,7 @@ private function getOrderBillingAddress(array $data): Order\Address
315
314
'street ' => $ street ,
316
315
'city ' => $ data ['shipping_address ' ]['city ' ],
317
316
'email ' => $ data ['buyer_details ' ]['email ' ],
318
- 'telephone ' => '0 ' , // is required by magento
317
+ 'telephone ' => 'N/A ' , // is required by magento
319
318
'country_id ' => $ data ['shipping_address ' ]['country ' ] // maps 1:1
320
319
];
321
320
@@ -331,25 +330,29 @@ private function getOrderBillingAddress(array $data): Order\Address
331
330
*
332
331
* @param Order $order
333
332
* @param array $data
333
+ * @param array $items
334
334
* @return void
335
335
*/
336
- private function applyDiscountsToOrder (Order $ order , array $ data )
336
+ private function applyDiscountsToOrder (Order $ order , array $ data, array $ items )
337
337
{
338
- $ promotionDetails = $ data ['promotion_details ' ] ?? null ;
339
- $ orderSubtotalAmount = $ data ['estimated_payment_details ' ]['subtotal ' ]['items ' ]['amount ' ];
340
338
$ discountAmount = 0 ;
341
339
$ discountNames = [];
342
340
343
- if ($ promotionDetails ) {
344
- foreach ($ promotionDetails ['data ' ] as $ promotionDetail ) {
345
- $ targetType = $ promotionDetail ['target_type ' ] ?? null ;
346
- if ($ targetType === 'shipping ' ) {
347
- // don't treat free shipping as a discount since it is
348
- // already reflected as free under shipping charges.
349
- } else {
341
+ // calculate discounts using items to exclude order-level shipping discounts
342
+ foreach ($ items ['data ' ] as $ item ) {
343
+ $ itemPromotionDetails = $ item ['promotion_details ' ]['data ' ] ?? null ;
344
+ if ($ itemPromotionDetails ) {
345
+ foreach ($ itemPromotionDetails as $ promotionDetail ) {
350
346
$ discountAmount -= $ promotionDetail ['applied_amount ' ]['amount ' ];
351
347
}
348
+ }
349
+ }
350
+
351
+ $ orderPromotionDetails = $ data ['promotion_details ' ] ?? null ;
352
+ $ orderSubtotalAmount = $ data ['estimated_payment_details ' ]['subtotal ' ]['items ' ]['amount ' ];
352
353
354
+ if ($ orderPromotionDetails ) {
355
+ foreach ($ orderPromotionDetails ['data ' ] as $ promotionDetail ) {
353
356
$ couponCode = $ promotionDetail ['coupon_code ' ] ?? null ;
354
357
if ($ couponCode ) {
355
358
$ order ->setCouponCode ($ couponCode );
@@ -417,6 +420,8 @@ private function applyItemsToOrder(Order $order, array $data, int $storeId)
417
420
->setBaseSubtotalInclTax ($ subtotalInclTax )
418
421
->setTotalQtyOrdered ($ totalQtyOrdered )
419
422
->setWeight ($ weight );
423
+
424
+ $ this ->applyDiscountsToOrder ($ order , $ data , $ items );
420
425
}
421
426
422
427
/**
0 commit comments