From 01bbc6ccb31877591b23b24e274e0e123c35e8d2 Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 19 Jul 2022 17:38:30 +0200 Subject: [PATCH] it works --- src/EventListener/PostCheckoutListener.php | 78 +++++++++++++--------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/src/EventListener/PostCheckoutListener.php b/src/EventListener/PostCheckoutListener.php index fe7e6a3..737869f 100644 --- a/src/EventListener/PostCheckoutListener.php +++ b/src/EventListener/PostCheckoutListener.php @@ -19,6 +19,9 @@ class PostCheckoutListener const WAREHOUSE_ID = 'd8a6a9b8-d0ac-4d36-8d00-bd420d0d81f5'; const PAYMENT_CONDITION = 'PP'; const VAT_FACTOR = 1.19; + const SURCHAGRGE_SHIPPING = 'shipping'; + const SURCHAGRGE_RULE = 'rule'; + const SHIPPING_ITEM_ID = '99068232-8a4c-4468-9228-e61e26edac43'; private Order $order; private ApiExact $apiExact; @@ -26,6 +29,8 @@ class PostCheckoutListener private $salesOrderItems = []; private $billingCustomer = null; private $shippingCustomer = null; + private $orderDiscount = null; + private $shippingItem = []; /** * @Hook("postCheckout") @@ -34,21 +39,11 @@ class PostCheckoutListener { $this->order = $order; $this->apiExact = new ApiExact(); - $this->setDbProducts(); + $this->setSurCharges(); $this->setOrderItems(); $this->setCustomers(); - - $surCharges = []; - /** @var ProductCollectionSurcharge $orderSurcharge */ - foreach ($order->getSurcharges() as $orderSurcharge) { - $surCharges[] = $orderSurcharge; - } - - - $this->apiExact->createSalesOrder($this->createSalesOrderData()); - } private function setDbProducts() @@ -63,11 +58,6 @@ class PostCheckoutListener foreach ($dbProducts as $dbProduct) { $this->dbProductsBySku[$dbProduct['sku']] = $dbProduct; } -// ob_start(); -// var_dump($this->dbProductsBySku); -// file_put_contents('dan.txt', ob_get_contents()); -// ob_end_clean(); - } private function compareAddresses(Order $order) @@ -110,12 +100,16 @@ class PostCheckoutListener $exactId = $product->exact_id; $unitPrice = (float) $orderItem->tax_free_price / (int) $orderItem->quantity; $quantity = $orderItem->quantity; - $this->salesOrderItems[] = [ + $item = [ 'Description' => $name, 'Item' => $exactId, 'UnitPrice' => $unitPrice, 'Quantity' => $quantity ]; + if ($this->orderDiscount !== null) { + $item['Discount'] = $this->orderDiscount; + } + $this->salesOrderItems[] = $item; } else { $productSet = $this->dbProductsBySku[$product->sku]; $quantity = $orderItem->quantity; @@ -142,19 +136,24 @@ class PostCheckoutListener ]; } } - $setDiscountFactor = (float) $orderItem->tax_free_price / $setPriceSingleProducts; - ob_start(); - var_dump($setProducts); - file_put_contents('flo.txt', ob_get_contents()); - ob_end_clean(); + $setDiscountFactor = 1 - $orderItem->tax_free_price / $setPriceSingleProducts; foreach ($setProducts as $setProduct) { - $this->salesOrderItems[] = [ + $item = [ 'Description' => $setProduct['product']['name'], 'Item' => $setProduct['product']['exact_id'], - 'UnitPrice' => round($setProduct['netPrice'] * $setDiscountFactor, 2), - 'Quantity' => $quantity * $setProduct['qty'] + 'UnitPrice' => $setProduct['netPrice'], + 'Quantity' => $quantity * $setProduct['qty'], ]; + + if ($this->orderDiscount !== null) { + $setProductNetPrice = $setProduct['netPrice'] * (1 - $setDiscountFactor); + $discountedPrice = $setProductNetPrice * (1 - $this->orderDiscount); + $item['Discount'] = 1 - ($discountedPrice / $setProduct['netPrice']); + } else { + $item['Discount'] = $setDiscountFactor; + } + $this->salesOrderItems[] = $item; } } } @@ -173,8 +172,30 @@ class PostCheckoutListener ); } + private function setSurCharges() + { + /** @var ProductCollectionSurcharge $orderSurcharge */ + foreach ($this->order->getSurcharges() as $orderSurcharge) { + switch ($orderSurcharge->type) { + case self::SURCHAGRGE_SHIPPING: + $this->shippingItem = [ + 'Description' => $orderSurcharge->label, + 'Item' => self::SHIPPING_ITEM_ID, + 'UnitPrice' => round($orderSurcharge->total_price / self::VAT_FACTOR, 2), + 'Quantity' => 1 + ]; + break; + case self::SURCHAGRGE_RULE: + $discountValuePercentage = round((($orderSurcharge->total_price * -1) / $this->order->subtotal), 2); + $this->orderDiscount = $this->orderDiscount === null ? $discountValuePercentage : $this->orderDiscount + $discountValuePercentage; + break; + } + } + } + private function createSalesOrderData() { + $this->salesOrderItems[] = $this->shippingItem; $date = new \DateTime('now'); $res = [ 'Description' => $this->order->id, @@ -187,13 +208,6 @@ class PostCheckoutListener if ($this->shippingCustomer !== null) { $res['DeliverTo'] = $this->shippingCustomer->ID; } -// if ($discount !== null) { -// $res['Discount'] = $shippingCustomer->ID; -// } - ob_start(); - var_dump($res); - file_put_contents('dan.txt', ob_get_contents()); - ob_end_clean(); return $res; } } \ No newline at end of file