Skip to content

Commit

Permalink
Merge pull request #11 from Strategery-Inc/v/order-item-price
Browse files Browse the repository at this point in the history
Send order line price while submitting the order on Stockbase.
  • Loading branch information
gsomoza authored Dec 21, 2018
2 parents 3f63603 + 9413810 commit 136d46d
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 10 deletions.
24 changes: 23 additions & 1 deletion StockbaseApi/Client/StockbaseClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

namespace Stockbase\Integration\StockbaseApi\Client;

use Magento\Sales\Api\Data\OrderItemInterface;
use Webmozart\Assert\Assert;
use DivideBV\PHPDivideIQ\DivideIQ;
use Magento\Sales\Api\Data\OrderInterface;
Expand Down Expand Up @@ -110,11 +111,18 @@ public function createOrder(OrderInterface $order, array $reservedStockbaseItems
$orderLineNumber = 0;
foreach ($reservedStockbaseItems as $reserve) {
$orderLineNumber++;
$orderLines[] = [
$orderLineData = [
'Number' => $orderLineNumber, // Number starting from 1
'EAN' => $reserve->getEan(),
'Amount' => (int) $reserve->getAmount(),
];

/** @var OrderItemInterface $orderItem */
$orderItem = $this->_getOrderItemById($order, $reserve->getOrderItemId());
if ($orderItem && $orderItem->getRowTotal() !== null) {
$orderLineData['Price'] = $orderItem->getRowTotal();
}
$orderLines[] = $orderLineData;
}

$orderHeader = [
Expand Down Expand Up @@ -159,4 +167,18 @@ public function createOrder(OrderInterface $order, array $reservedStockbaseItems

return $response;
}

private function _getOrderItemById(OrderInterface $order, $orderItemId)
{
if ($order instanceof \Magento\Sales\Model\Order) {
return $order->getItemById($orderItemId);
} else {
/** @var OrderItemInterface $orderItem */
$orderItem = array_filter((array) $order->getItems(), function (OrderItemInterface $item) use ($orderItemId) {
return $item->getItemId() == $orderItemId;
});

return reset($orderItem);
}
}
}
38 changes: 29 additions & 9 deletions Test/Unit/StockbaseApi/Client/StockbaseClientTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,7 @@ public function testCreateOrder()
->willReturn('TEST_ORDER_PREFIX');

$order = $this->createOrderMock();

$reservedItems = [];
for ($i = 0; $i < 2; $i++) {
$reservedItem = $this->createMock(\Stockbase\Integration\Model\StockItemReserve::class);
$reservedItem->method('getEan')->willReturn($i*100+1);
$reservedItem->method('getAmount')->willReturn($i*100+2);

$reservedItems[$i] = $reservedItem;
}
$reservedItems = $this->createReservedItemMocks();

$this->divideIqClient->expects($this->once())->method('request')
->with(
Expand All @@ -102,6 +94,12 @@ public function testCreateOrder()

$this->assertTrue(isset($payload['OrderLines']));
$this->assertCount(count($reservedItems), $payload['OrderLines']);
for ($i = 0; $i < count($reservedItems); $i++) {
$this->assertEquals($i+1, $payload['OrderLines'][$i]['Number']);
$this->assertEquals($i*100+1, $payload['OrderLines'][$i]['EAN']);
$this->assertEquals($i*100+2, $payload['OrderLines'][$i]['Amount']);
$this->assertEquals(sprintf('%0.2f', ($i*100+3) * 10.95), $payload['OrderLines'][$i]['Price']);
}

$this->assertTrue(isset($payload['OrderDelivery']['Person']['FirstName']));
$this->assertEquals($order->getShippingAddress()->getFirstname(), $payload['OrderDelivery']['Person']['FirstName']);
Expand Down Expand Up @@ -198,7 +196,29 @@ protected function createOrderMock()

$order->method('getRealOrderId')->willReturn(123456);
$order->method('getCustomerNote')->willReturn('TEST_CUSTOMER_NOTE');

$order->method('getItemById')->willReturnCallback(function ($orderItemId) {
$orderItem = $this->createMock(\Magento\Sales\Model\Order\Item::class);
$orderItem->method('getRowTotal')->willReturn(sprintf('%0.2f', $orderItemId * 10.95));

return $orderItem;
});

return $order;
}

protected function createReservedItemMocks()
{
$reservedItems = [];
for ($i = 0; $i < 2; $i++) {
$reservedItem = $this->createMock(\Stockbase\Integration\Model\StockItemReserve::class);
$reservedItem->method('getEan')->willReturn($i*100+1);
$reservedItem->method('getAmount')->willReturn($i*100+2);
$reservedItem->method('getOrderItemId')->willReturn($i*100+3);

$reservedItems[$i] = $reservedItem;
}

return $reservedItems;
}
}

0 comments on commit 136d46d

Please sign in to comment.