Skip to content

Commit 5d8575e

Browse files
committed
Merge remote-tracking branch 'origin/MC-35740' into 2.4-develop-pr44
2 parents 94c9a4b + cf5e156 commit 5d8575e

File tree

4 files changed

+150
-0
lines changed

4 files changed

+150
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Sales\Plugin\Model\Service\Invoice;
9+
10+
use Magento\Framework\DB\TransactionFactory;
11+
use Magento\Sales\Api\InvoiceRepositoryInterface;
12+
use Magento\Sales\Model\Service\InvoiceService;
13+
14+
/**
15+
* Plugin to add transaction comment after capture invoice
16+
*/
17+
class AddTransactionCommentAfterCapture
18+
{
19+
/**
20+
* @var InvoiceRepositoryInterface
21+
*/
22+
private $invoiceRepository;
23+
24+
/**
25+
* @var TransactionFactory
26+
*/
27+
private $transactionFactory;
28+
29+
/**
30+
* @param InvoiceRepositoryInterface $invoiceRepository
31+
* @param TransactionFactory $transactionFactory
32+
*/
33+
public function __construct(
34+
InvoiceRepositoryInterface $invoiceRepository,
35+
TransactionFactory $transactionFactory
36+
) {
37+
$this->transactionFactory = $transactionFactory;
38+
$this->invoiceRepository = $invoiceRepository;
39+
}
40+
41+
/**
42+
* Add transaction comment to the order after capture invoice
43+
*
44+
* @param InvoiceService $subject
45+
* @param bool $result
46+
* @param int $invoiceId
47+
* @return bool
48+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
49+
*/
50+
public function afterSetCapture(InvoiceService $subject, bool $result, $invoiceId): bool
51+
{
52+
if ($result) {
53+
$invoice = $this->invoiceRepository->get($invoiceId);
54+
$invoice->getOrder()->setIsInProcess(true);
55+
$this->transactionFactory->create()
56+
->addObject($invoice)
57+
->addObject($invoice->getOrder())
58+
->save();
59+
}
60+
61+
return $result;
62+
}
63+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Sales\Test\Unit\Plugin\Model\Service\Invoice;
9+
10+
use Magento\Framework\DB\Transaction;
11+
use Magento\Framework\DB\TransactionFactory;
12+
use Magento\Sales\Api\InvoiceRepositoryInterface;
13+
use Magento\Sales\Model\Order;
14+
use Magento\Sales\Model\Order\Invoice;
15+
use Magento\Sales\Model\Service\InvoiceService;
16+
use Magento\Sales\Plugin\Model\Service\Invoice\AddTransactionCommentAfterCapture;
17+
use PHPUnit\Framework\MockObject\MockObject;
18+
use PHPUnit\Framework\TestCase;
19+
20+
/**
21+
* Test to add transaction comment to the order after capture invoice
22+
*/
23+
class AddTransactionCommentAfterCaptureTest extends TestCase
24+
{
25+
/**
26+
* @var InvoiceRepositoryInterface|MockObject
27+
*/
28+
private $invoiceRepository;
29+
30+
/**
31+
* @var TransactionFactory|MockObject
32+
*/
33+
private $transactionFactory;
34+
35+
/**
36+
* @var AddTransactionCommentAfterCapture
37+
*/
38+
private $plugin;
39+
40+
/**
41+
* @inheritdoc
42+
*/
43+
protected function setUp(): void
44+
{
45+
$this->invoiceRepository = $this->createMock(InvoiceRepositoryInterface::class);
46+
$this->transactionFactory = $this->createMock(TransactionFactory::class);
47+
48+
$this->plugin = new AddTransactionCommentAfterCapture(
49+
$this->invoiceRepository,
50+
$this->transactionFactory
51+
);
52+
}
53+
54+
/**
55+
* Test to add transaction comment after capture invoice
56+
*/
57+
public function testPlugin(): void
58+
{
59+
$result = true;
60+
$invoiceId = 3;
61+
62+
$orderMock = $this->createMock(Order::class);
63+
$invoiceMock = $this->createMock(Invoice::class);
64+
$invoiceMock->method('getOrder')->willReturn($orderMock);
65+
$this->invoiceRepository->method('get')->with($invoiceId)->willReturn($invoiceMock);
66+
67+
$transactionMock = $this->createMock(Transaction::class);
68+
$transactionMock->expects($this->at(0))->method('addObject')->with($invoiceMock)->willReturnSelf();
69+
$transactionMock->expects($this->at(1))->method('addObject')->with($orderMock)->willReturnSelf();
70+
$transactionMock->expects($this->once())->method('save');
71+
$this->transactionFactory->method('create')->willReturn($transactionMock);
72+
73+
/** @var InvoiceService $invoiceService */
74+
$invoiceService = $this->createMock(InvoiceService::class);
75+
76+
$this->assertEquals(
77+
$result,
78+
$this->plugin->afterSetCapture($invoiceService, $result, $invoiceId)
79+
);
80+
}
81+
}

app/code/Magento/Sales/etc/webapi_rest/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,7 @@
1919
</argument>
2020
</arguments>
2121
</type>
22+
<type name="Magento\Sales\Model\Service\InvoiceService">
23+
<plugin name="addTransactionCommentAfterCapture" type="Magento\Sales\Plugin\Model\Service\Invoice\AddTransactionCommentAfterCapture"/>
24+
</type>
2225
</config>

app/code/Magento/Sales/etc/webapi_soap/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,7 @@
1919
</argument>
2020
</arguments>
2121
</type>
22+
<type name="Magento\Sales\Model\Service\InvoiceService">
23+
<plugin name="addTransactionCommentAfterCapture" type="Magento\Sales\Plugin\Model\Service\Invoice\AddTransactionCommentAfterCapture"/>
24+
</type>
2225
</config>

0 commit comments

Comments
 (0)