/** * @param \Generated\Shared\Transfer\RefundTransfer $refundTransfer * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer * @param \Orm\Zed\Sales\Persistence\SpySalesOrderItem[] array $salesOrderItems * * @return \Generated\Shared\Transfer\RefundTransfer */ public function calculateRefund(RefundTransfer $refundTransfer, OrderTransfer $orderTransfer, array $salesOrderItems) { foreach ($orderTransfer->getItems() as $itemTransfer) { if ($this->shouldItemRefunded($itemTransfer, $salesOrderItems)) { $refundTransfer->addItem($itemTransfer); } } $this->calculateRefundableItemAmount($refundTransfer); $this->setCanceledItemAmount($refundTransfer); return $refundTransfer; }
/** * @param \Orm\Zed\Refund\Persistence\PavRefund $refundEntity * * @return \Generated\Shared\Transfer\RefundTransfer */ protected function convertToTransfer(PavRefund $refundEntity) { $refundTransfer = new RefundTransfer(); $refundTransfer->fromArray($refundEntity->toArray(), true); foreach ($refundEntity->getRefundItems() as $refundItem) { $refundItemTransfer = new RefundItemTransfer(); $refundItemTransfer->fromArray($refundItem->toArray(), true); $refundTransfer->addItem($refundItemTransfer); } return $refundTransfer; }
/** * @return void */ public function testSaveRefundShouldSetCanceledAmountOnOrderItemEntities() { $salesOrderItemEntityMock = $this->getSalesOrderItemEntityMock(); $salesOrderItemQueryMock = $this->getMockBuilder(SpySalesOrderItemQuery::class)->setMethods(['findOneByIdSalesOrderItem'])->getMock(); $salesOrderItemQueryMock->method('findOneByIdSalesOrderItem')->willReturn($salesOrderItemEntityMock); $salesQueryContainerMock = $this->getSalesQueryContainerMock(); $salesQueryContainerMock->method('querySalesOrderItem')->willReturn($salesOrderItemQueryMock); $refundEntity = $this->getRefundEntity(0); $refundSaver = $this->getRefundSaverMock($refundEntity, $salesQueryContainerMock); $refundTransfer = new RefundTransfer(); $refundTransfer->setAmount(100); $itemTransfer = new ItemTransfer(); $refundTransfer->addItem($itemTransfer); $this->assertTrue($refundSaver->saveRefund($refundTransfer)); }
/** * @param \Generated\Shared\Transfer\RefundTransfer $refundTransfer * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer * @param \Orm\Zed\Sales\Persistence\SpySalesOrderItem[] array $salesOrderItems * * @return \Generated\Shared\Transfer\RefundTransfer */ public function calculateRefund(RefundTransfer $refundTransfer, OrderTransfer $orderTransfer, array $salesOrderItems) { $refundedItemAmount = 0; foreach ($orderTransfer->getItems() as $itemTransfer) { if ($this->shouldItemRefunded($itemTransfer, $salesOrderItems)) { $refundTransfer->addItem($itemTransfer); } else { $refundedItemAmount += (int) $itemTransfer->getRefundableAmount(); } } if ($refundedItemAmount === 0) { $refundTransfer->setExpenses($orderTransfer->getExpenses()); } $this->calculateRefundableExpenseAmount($refundTransfer); $this->setCanceledExpenseAmount($refundTransfer); return $refundTransfer; }