From cfd92c4ff13bcd55d0ac6b06a820d74ee78f2558 Mon Sep 17 00:00:00 2001 From: Anton Evers Date: Tue, 24 Oct 2017 11:41:51 +0600 Subject: [PATCH] save invoice ID on credit memo when using API method salesRefundInvoiceV1 --- .../Magento/Sales/Model/Order/Creditmemo.php | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Creditmemo.php index 68339e7db9390..771b8ea459aad 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo.php @@ -9,8 +9,10 @@ namespace Magento\Sales\Model\Order; use Magento\Framework\Api\AttributeValueFactory; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Pricing\PriceCurrencyInterface; use Magento\Sales\Api\Data\CreditmemoInterface; +use Magento\Sales\Api\InvoiceRepositoryInterface; use Magento\Sales\Model\AbstractModel; use Magento\Sales\Model\EntityInterface; @@ -114,6 +116,11 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt */ protected $priceCurrency; + /** + * @var InvoiceRepository + */ + private $invoiceRepository; + /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry @@ -130,6 +137,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data + * @param InvoiceRepository $invoiceRepository * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -147,7 +155,8 @@ public function __construct( PriceCurrencyInterface $priceCurrency, \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, - array $data = [] + array $data = [], + InvoiceRepository $invoiceRepository = null ) { $this->_creditmemoConfig = $creditmemoConfig; $this->_orderFactory = $orderFactory; @@ -157,6 +166,7 @@ public function __construct( $this->_commentFactory = $commentFactory; $this->_commentCollectionFactory = $commentCollectionFactory; $this->priceCurrency = $priceCurrency; + $this->invoiceRepository = $invoiceRepository; parent::__construct( $context, $registry, @@ -379,6 +389,9 @@ public function canRefund() */ public function getInvoice() { + if (!$this->getData('invoice') instanceof \Magento\Sales\Model\Order\Invoice && $this->getInvoiceId()) { + $this->setInvoice($this->getInvoiceRepository()->get($this->getInvoiceId())); + } return $this->getData('invoice'); } @@ -391,6 +404,7 @@ public function getInvoice() public function setInvoice(Invoice $invoice) { $this->setData('invoice', $invoice); + $this->setInvoiceId($invoice->getId()); return $this; } @@ -1525,5 +1539,12 @@ public function setExtensionAttributes(\Magento\Sales\Api\Data\CreditmemoExtensi return $this->_setExtensionAttributes($extensionAttributes); } + /** + * @return InvoiceRepositoryInterface|mixed + * @deprecated + */ + private function getInvoiceRepository() { + return $this->invoiceRepository ?: ObjectManager::getInstance()->get(InvoiceRepositoryInterface::class); + } //@codeCoverageIgnoreEnd }