Skip to content

Commit 9e5f485

Browse files
authored
Merge pull request #2915 from magento-mpi/MAGETWO-84929
[MPI] MAGETWO-84929: Default merchant account ID is used on subsequent partial invoices
2 parents 03b9371 + 6b32f9c commit 9e5f485

File tree

34 files changed

+479
-240
lines changed

34 files changed

+479
-240
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
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\Braintree\Gateway\Request;
9+
10+
use Magento\Braintree\Gateway\Config\Config;
11+
use Magento\Braintree\Gateway\SubjectReader;
12+
use Magento\Payment\Gateway\Request\BuilderInterface;
13+
14+
/**
15+
* Adds Merchant Account ID to the request if it was specified in the configuration.
16+
*/
17+
class MerchantAccountDataBuilder implements BuilderInterface
18+
{
19+
/**
20+
* The merchant account ID used to create a transaction.
21+
* Currency is also determined by merchant account ID.
22+
* If no merchant account ID is specified, Braintree will use your default merchant account.
23+
*/
24+
private static $merchantAccountId = 'merchantAccountId';
25+
26+
/**
27+
* @var Config
28+
*/
29+
private $config;
30+
31+
/**
32+
* @var SubjectReader
33+
*/
34+
private $subjectReader;
35+
36+
/**
37+
* Constructor
38+
*
39+
* @param Config $config
40+
* @param SubjectReader $subjectReader
41+
*/
42+
public function __construct(Config $config, SubjectReader $subjectReader)
43+
{
44+
$this->config = $config;
45+
$this->subjectReader = $subjectReader;
46+
}
47+
48+
/**
49+
* @inheritdoc
50+
*/
51+
public function build(array $buildSubject): array
52+
{
53+
$paymentDO = $this->subjectReader->readPayment($buildSubject);
54+
$order = $paymentDO->getOrder();
55+
56+
$result = [];
57+
$merchantAccountId = $this->config->getMerchantAccountId($order->getStoreId());
58+
if (!empty($merchantAccountId)) {
59+
$result[self::$merchantAccountId] = $merchantAccountId;
60+
}
61+
62+
return $result;
63+
}
64+
}

app/code/Magento/Braintree/Gateway/Request/PaymentDataBuilder.php

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
namespace Magento\Braintree\Gateway\Request;
77

88
use Magento\Braintree\Gateway\Config\Config;
9-
use Magento\Braintree\Observer\DataAssignObserver;
109
use Magento\Braintree\Gateway\SubjectReader;
10+
use Magento\Braintree\Observer\DataAssignObserver;
1111
use Magento\Payment\Gateway\Request\BuilderInterface;
1212
use Magento\Payment\Helper\Formatter;
1313

@@ -36,9 +36,8 @@ class PaymentDataBuilder implements BuilderInterface
3636
const PAYMENT_METHOD_NONCE = 'paymentMethodNonce';
3737

3838
/**
39-
* The merchant account ID used to create a transaction.
40-
* Currency is also determined by merchant account ID.
41-
* If no merchant account ID is specified, Braintree will use your default merchant account.
39+
* @deprecated
40+
* @see \Magento\Braintree\Gateway\Request\MerchantAccountDataBuilder
4241
*/
4342
const MERCHANT_ACCOUNT_ID = 'merchantAccountId';
4443

@@ -47,25 +46,18 @@ class PaymentDataBuilder implements BuilderInterface
4746
*/
4847
const ORDER_ID = 'orderId';
4948

50-
/**
51-
* @var Config
52-
*/
53-
private $config;
54-
5549
/**
5650
* @var SubjectReader
5751
*/
5852
private $subjectReader;
5953

6054
/**
61-
* Constructor
62-
*
6355
* @param Config $config
6456
* @param SubjectReader $subjectReader
57+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
6558
*/
6659
public function __construct(Config $config, SubjectReader $subjectReader)
6760
{
68-
$this->config = $config;
6961
$this->subjectReader = $subjectReader;
7062
}
7163

@@ -87,11 +79,6 @@ public function build(array $buildSubject)
8779
self::ORDER_ID => $order->getOrderIncrementId()
8880
];
8981

90-
$merchantAccountId = $this->config->getMerchantAccountId($order->getStoreId());
91-
if (!empty($merchantAccountId)) {
92-
$result[self::MERCHANT_ACCOUNT_ID] = $merchantAccountId;
93-
}
94-
9582
return $result;
9683
}
9784
}

app/code/Magento/Braintree/Test/Unit/Gateway/Request/PaymentDataBuilderTest.php

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
*/
66
namespace Magento\Braintree\Test\Unit\Gateway\Request;
77

8-
use Magento\Braintree\Gateway\Config\Config;
9-
use Magento\Braintree\Gateway\SubjectReader;
108
use Magento\Braintree\Gateway\Request\PaymentDataBuilder;
9+
use Magento\Braintree\Gateway\SubjectReader;
1110
use Magento\Braintree\Observer\DataAssignObserver;
1211
use Magento\Payment\Gateway\Data\OrderAdapterInterface;
1312
use Magento\Payment\Gateway\Data\PaymentDataObjectInterface;
1413
use Magento\Sales\Model\Order\Payment;
1514
use PHPUnit_Framework_MockObject_MockObject as MockObject;
15+
use Magento\Braintree\Gateway\Config\Config;
1616

1717
/**
1818
* Class PaymentDataBuilderTest
@@ -29,11 +29,6 @@ class PaymentDataBuilderTest extends \PHPUnit\Framework\TestCase
2929
*/
3030
private $builder;
3131

32-
/**
33-
* @var Config|MockObject
34-
*/
35-
private $config;
36-
3732
/**
3833
* @var Payment|MockObject
3934
*/
@@ -52,15 +47,16 @@ class PaymentDataBuilderTest extends \PHPUnit\Framework\TestCase
5247
protected function setUp()
5348
{
5449
$this->paymentDO = $this->createMock(PaymentDataObjectInterface::class);
55-
$this->config = $this->getMockBuilder(Config::class)
56-
->disableOriginalConstructor()
57-
->getMock();
5850
$this->payment = $this->getMockBuilder(Payment::class)
5951
->disableOriginalConstructor()
6052
->getMock();
6153
$this->order = $this->createMock(OrderAdapterInterface::class);
6254

63-
$this->builder = new PaymentDataBuilder($this->config, new SubjectReader());
55+
$config = $this->getMockBuilder(Config::class)
56+
->disableOriginalConstructor()
57+
->getMock();
58+
59+
$this->builder = new PaymentDataBuilder($config, new SubjectReader());
6460
}
6561

6662
/**
@@ -98,8 +94,7 @@ public function testBuild()
9894
$expectedResult = [
9995
PaymentDataBuilder::AMOUNT => 10.00,
10096
PaymentDataBuilder::PAYMENT_METHOD_NONCE => self::PAYMENT_METHOD_NONCE,
101-
PaymentDataBuilder::ORDER_ID => '000000101',
102-
PaymentDataBuilder::MERCHANT_ACCOUNT_ID => self::MERCHANT_ACCOUNT_ID,
97+
PaymentDataBuilder::ORDER_ID => '000000101'
10398
];
10499

105100
$buildSubject = [
@@ -111,9 +106,6 @@ public function testBuild()
111106
->method('getAdditionalInformation')
112107
->willReturnMap($additionalData);
113108

114-
$this->config->method('getMerchantAccountId')
115-
->willReturn(self::MERCHANT_ACCOUNT_ID);
116-
117109
$this->paymentDO->method('getPayment')
118110
->willReturn($this->payment);
119111

app/code/Magento/Braintree/etc/adminhtml/di.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<item name="vault" xsi:type="string">Magento\Braintree\Gateway\Request\VaultDataBuilder</item>
3030
<item name="dynamic_descriptor" xsi:type="string">Magento\Braintree\Gateway\Request\DescriptorDataBuilder</item>
3131
<item name="store" xsi:type="string">Magento\Braintree\Gateway\Request\StoreConfigBuilder</item>
32+
<item name="merchant_account" xsi:type="string">Magento\Braintree\Gateway\Request\MerchantAccountDataBuilder</item>
3233
</argument>
3334
</arguments>
3435
</virtualType>
@@ -41,6 +42,7 @@
4142
<item name="address" xsi:type="string">Magento\Braintree\Gateway\Request\AddressDataBuilder</item>
4243
<item name="dynamic_descriptor" xsi:type="string">Magento\Braintree\Gateway\Request\DescriptorDataBuilder</item>
4344
<item name="store" xsi:type="string">Magento\Braintree\Gateway\Request\StoreConfigBuilder</item>
45+
<item name="merchant_account" xsi:type="string">Magento\Braintree\Gateway\Request\MerchantAccountDataBuilder</item>
4446
</argument>
4547
</arguments>
4648
</virtualType>

app/code/Magento/Braintree/etc/di.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@
233233
<item name="device_data" xsi:type="string">Magento\Braintree\Gateway\Request\KountPaymentDataBuilder</item>
234234
<item name="dynamic_descriptor" xsi:type="string">Magento\Braintree\Gateway\Request\DescriptorDataBuilder</item>
235235
<item name="store" xsi:type="string">Magento\Braintree\Gateway\Request\StoreConfigBuilder</item>
236+
<item name="merchant_account" xsi:type="string">Magento\Braintree\Gateway\Request\MerchantAccountDataBuilder</item>
236237
</argument>
237238
</arguments>
238239
</virtualType>
@@ -291,6 +292,7 @@
291292
<item name="device_data" xsi:type="string">Magento\Braintree\Gateway\Request\KountPaymentDataBuilder</item>
292293
<item name="dynamic_descriptor" xsi:type="string">Magento\Braintree\Gateway\Request\DescriptorDataBuilder</item>
293294
<item name="store" xsi:type="string">Magento\Braintree\Gateway\Request\StoreConfigBuilder</item>
295+
<item name="merchant_account" xsi:type="string">Magento\Braintree\Gateway\Request\MerchantAccountDataBuilder</item>
294296
</argument>
295297
</arguments>
296298
</virtualType>
@@ -325,6 +327,7 @@
325327
<item name="vault_capture" xsi:type="string">Magento\Braintree\Gateway\Request\VaultCaptureDataBuilder</item>
326328
<item name="settlement" xsi:type="string">Magento\Braintree\Gateway\Request\SettlementDataBuilder</item>
327329
<item name="store" xsi:type="string">Magento\Braintree\Gateway\Request\StoreConfigBuilder</item>
330+
<item name="merchant_account" xsi:type="string">Magento\Braintree\Gateway\Request\MerchantAccountDataBuilder</item>
328331
</argument>
329332
</arguments>
330333
</virtualType>
@@ -347,6 +350,7 @@
347350
<item name="device_data" xsi:type="string">Magento\Braintree\Gateway\Request\PayPal\DeviceDataBuilder</item>
348351
<item name="dynamic_descriptor" xsi:type="string">Magento\Braintree\Gateway\Request\DescriptorDataBuilder</item>
349352
<item name="store" xsi:type="string">Magento\Braintree\Gateway\Request\StoreConfigBuilder</item>
353+
<item name="merchant_account" xsi:type="string">Magento\Braintree\Gateway\Request\MerchantAccountDataBuilder</item>
350354
</argument>
351355
</arguments>
352356
</virtualType>
@@ -380,6 +384,7 @@
380384
<item name="address" xsi:type="string">Magento\Braintree\Gateway\Request\AddressDataBuilder</item>
381385
<item name="dynamic_descriptor" xsi:type="string">Magento\Braintree\Gateway\Request\DescriptorDataBuilder</item>
382386
<item name="store" xsi:type="string">Magento\Braintree\Gateway\Request\StoreConfigBuilder</item>
387+
<item name="merchant_account" xsi:type="string">Magento\Braintree\Gateway\Request\MerchantAccountDataBuilder</item>
383388
</argument>
384389
</arguments>
385390
</virtualType>

app/code/Magento/Braintree/view/frontend/web/template/payment/paypal.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
data-bind="attr: {'id': getCode()}, value: getCode(), checked: isChecked, click: selectPaymentMethod, visible: isRadioButtonVisible()" />
1313
<label class="label" data-bind="attr: {'for': getCode()}">
1414
<!-- PayPal Logo -->
15-
<img data-bind="attr: {src: getPaymentAcceptanceMarkSrc(), alt: $t('Acceptance Mark')}, title: $t('Acceptance Mark')}"
15+
<img data-bind="attr: {src: getPaymentAcceptanceMarkSrc(), alt: $t('Acceptance Mark'), title: $t('Acceptance Mark')}"
1616
class="payment-icon"/>
1717
<!-- PayPal Logo -->
1818
<span text="getTitle()"></span>

app/code/Magento/Sales/Model/Order/Payment/Transaction/Repository.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,11 @@
1313
use Magento\Framework\Data\Collection;
1414
use Magento\Framework\Exception\NoSuchEntityException;
1515
use Magento\Sales\Api\Data\TransactionInterface;
16-
use Magento\Sales\Api\OrderPaymentRepositoryInterface;
17-
use Magento\Sales\Api\OrderRepositoryInterface;
16+
use Magento\Sales\Api\Data\TransactionSearchResultInterfaceFactory as SearchResultFactory;
1817
use Magento\Sales\Api\TransactionRepositoryInterface;
1918
use Magento\Sales\Model\EntityStorage;
2019
use Magento\Sales\Model\EntityStorageFactory;
21-
use Magento\Sales\Model\Order\Payment;
2220
use Magento\Sales\Model\ResourceModel\Metadata;
23-
use Magento\Sales\Api\Data\TransactionSearchResultInterfaceFactory as SearchResultFactory;
2421
use Magento\Sales\Model\ResourceModel\Order\Payment\Transaction as TransactionResource;
2522

2623
/**

0 commit comments

Comments
 (0)