Skip to content

Commit 0419d09

Browse files
author
Stanislav Idolov
authored
ENGCOM-1110: Fixed decimal handling in order quantities #14346
2 parents badd531 + 6a675c1 commit 0419d09

File tree

2 files changed

+112
-2
lines changed

2 files changed

+112
-2
lines changed

app/code/Magento/Sales/Model/Order/Item.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ public function getQtyToShip()
233233
public function getSimpleQtyToShip()
234234
{
235235
$qty = $this->getQtyOrdered() - $this->getQtyShipped() - $this->getQtyRefunded() - $this->getQtyCanceled();
236-
return max($qty, 0);
236+
return max(round($qty, 8), 0);
237237
}
238238

239239
/**
@@ -248,7 +248,7 @@ public function getQtyToInvoice()
248248
}
249249

250250
$qty = $this->getQtyOrdered() - $this->getQtyInvoiced() - $this->getQtyCanceled();
251-
return max($qty, 0);
251+
return max(round($qty, 8), 0);
252252
}
253253

254254
/**

app/code/Magento/Sales/Test/Unit/Model/Order/ItemTest.php

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,4 +235,114 @@ public function getProductOptionsDataProvider()
235235
]
236236
];
237237
}
238+
239+
/**
240+
* Test different combinations of item qty setups
241+
*
242+
* @param array $options
243+
* @param float $expectedResult
244+
*
245+
* @dataProvider getItemQtyVariants
246+
*/
247+
public function testGetSimpleQtyToMethods(array $options, $expectedResult)
248+
{
249+
$this->model->setData($options);
250+
$this->assertSame($this->model->getSimpleQtyToShip(), $expectedResult['to_ship']);
251+
$this->assertSame($this->model->getQtyToInvoice(), $expectedResult['to_invoice']);
252+
}
253+
254+
/**
255+
* Provides different combinations of qty options for an item and the
256+
* expected qtys pending shipment and invoice
257+
*
258+
* @return array
259+
*/
260+
public function getItemQtyVariants()
261+
{
262+
return [
263+
'empty_item' => [
264+
'options' => [
265+
'qty_ordered' => 0, 'qty_invoiced' => 0, 'qty_refunded' => 0, 'qty_shipped' => 0,
266+
'qty_canceled' => 0
267+
],
268+
'expectedResult' => ['to_ship' => 0.0, 'to_invoice' => 0.0]
269+
],
270+
'ordered_item' => [
271+
'options' => [
272+
'qty_ordered' => 12, 'qty_invoiced' => 0, 'qty_refunded' => 0, 'qty_shipped' => 0,
273+
'qty_canceled' => 0
274+
],
275+
'expectedResult' => ['to_ship' => 12.0, 'to_invoice' => 12.0]
276+
],
277+
'partially_invoiced' => [
278+
'options' => ['qty_ordered' => 12, 'qty_invoiced' => 4, 'qty_refunded' => 0, 'qty_shipped' => 0,
279+
'qty_canceled' => 0,
280+
],
281+
'expectedResult' => ['to_ship' => 12.0, 'to_invoice' => 8.0]
282+
],
283+
'completely_invoiced' => [
284+
'options' => [
285+
'qty_ordered' => 12, 'qty_invoiced' => 12, 'qty_refunded' => 0, 'qty_shipped' => 0,
286+
'qty_canceled' => 0,
287+
],
288+
'expectedResult' => ['to_ship' => 12.0, 'to_invoice' => 0.0]
289+
],
290+
'partially_invoiced_refunded' => [
291+
'options' => [
292+
'qty_ordered' => 12, 'qty_invoiced' => 5, 'qty_refunded' => 5, 'qty_shipped' => 0,
293+
'qty_canceled' => 0,
294+
],
295+
'expectedResult' => ['to_ship' => 7.0, 'to_invoice' => 7.0]
296+
],
297+
'partially_refunded' => [
298+
'options' => [
299+
'qty_ordered' => 12, 'qty_invoiced' => 12, 'qty_refunded' => 5, 'qty_shipped' => 0,
300+
'qty_canceled' => 0,
301+
],
302+
'expectedResult' => ['to_ship' => 7.0, 'to_invoice' => 0.0]
303+
],
304+
'partially_shipped' => [
305+
'options' => [
306+
'qty_ordered' => 12, 'qty_invoiced' => 0, 'qty_refunded' => 0, 'qty_shipped' => 4,
307+
'qty_canceled' => 0
308+
],
309+
'expectedResult' => ['to_ship' => 8.0, 'to_invoice' => 12.0]
310+
],
311+
'partially_refunded_partially_shipped' => [
312+
'options' => [
313+
'qty_ordered' => 12, 'qty_invoiced' => 12, 'qty_refunded' => 5, 'qty_shipped' => 4,
314+
'qty_canceled' => 0
315+
],
316+
'expectedResult' => ['to_ship' => 3.0, 'to_invoice' => 0.0]
317+
],
318+
'complete' => [
319+
'options' => [
320+
'qty_ordered' => 12, 'qty_invoiced' => 12, 'qty_refunded' => 0, 'qty_shipped' => 12,
321+
'qty_canceled' => 0
322+
],
323+
'expectedResult' => ['to_ship' => 0.0, 'to_invoice' => 0.0]
324+
],
325+
'canceled' => [
326+
'options' => [
327+
'qty_ordered' => 12, 'qty_invoiced' => 0, 'qty_refunded' => 0, 'qty_shipped' => 0,
328+
'qty_canceled' => 12
329+
],
330+
'expectedResult' => ['to_ship' => 0.0, 'to_invoice' => 0.0]
331+
],
332+
'completely_shipped_using_decimals' => [
333+
'options' => [
334+
'qty_ordered' => 4.4, 'qty_invoiced' => 0.4, 'qty_refunded' => 0.4, 'qty_shipped' => 4,
335+
'qty_canceled' => 0,
336+
],
337+
'expectedResult' => ['to_ship' => 0.0, 'to_invoice' => 4.0]
338+
],
339+
'completely_invoiced_using_decimals' => [
340+
'options' => [
341+
'qty_ordered' => 4.4, 'qty_invoiced' => 4, 'qty_refunded' => 0, 'qty_shipped' => 4,
342+
'qty_canceled' => 0.4
343+
],
344+
'expectedResult' => ['to_ship' => 0.0, 'to_invoice' => 0.0]
345+
]
346+
];
347+
}
238348
}

0 commit comments

Comments
 (0)