From 8283ed7081e8cdf8c0005504ce045ec24493bb2f Mon Sep 17 00:00:00 2001 From: "a.baraliu" Date: Mon, 16 Sep 2024 14:26:16 +0200 Subject: [PATCH 01/32] BP-3700-Change-Zend-to-Laminas --- Model/Service/Order.php | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/Model/Service/Order.php b/Model/Service/Order.php index 889dde04d..26912dc69 100644 --- a/Model/Service/Order.php +++ b/Model/Service/Order.php @@ -29,6 +29,7 @@ use Magento\Sales\Model\ResourceModel\Order\CollectionFactory; use Buckaroo\Magento2\Helper\Data; use Magento\Framework\App\ResourceConnection; +use Laminas\Db\Sql\Expression; class Order { @@ -43,16 +44,17 @@ class Order private Factory $configProviderFactory; public function __construct( - Account $accountConfig, - MethodFactory $configProviderMethodFactory, - Factory $configProviderFactory, + Account $accountConfig, + MethodFactory $configProviderMethodFactory, + Factory $configProviderFactory, StoreRepositoryInterface $storeRepository, - CollectionFactory $orderFactory, - OrderStatusFactory $orderStatusFactory, - Data $helper, - Log $logging, - ResourceConnection $resourceConnection - ) { + CollectionFactory $orderFactory, + OrderStatusFactory $orderStatusFactory, + Data $helper, + Log $logging, + ResourceConnection $resourceConnection + ) + { $this->accountConfig = $accountConfig; $this->configProviderMethodFactory = $configProviderMethodFactory; $this->configProviderFactory = $configProviderFactory; @@ -94,11 +96,11 @@ protected function cancelExpiredTransferOrdersPerStore($store) ) ->addFieldToFilter( 'created_at', - ['lt' => new \Zend_Db_Expr('NOW() - INTERVAL ' . $dueDays . ' DAY')] + ['lt' => new Expression('NOW() - INTERVAL ' . $dueDays . ' DAY')] ) ->addFieldToFilter( 'created_at', - ['gt' => new \Zend_Db_Expr('NOW() - INTERVAL ' . ($dueDays + 7) . ' DAY')] + ['gt' => new Expression('NOW() - INTERVAL ' . ($dueDays + 7) . ' DAY')] ); $orderCollection->getSelect() @@ -154,11 +156,11 @@ protected function cancelExpiredPPEOrdersPerStore($store) ) ->addFieldToFilter( 'created_at', - ['lt' => new \Zend_Db_Expr('NOW() - INTERVAL ' . $dueDays . ' DAY')] + ['lt' => new Expression('NOW() - INTERVAL ' . $dueDays . ' DAY')] ) ->addFieldToFilter( 'created_at', - ['gt' => new \Zend_Db_Expr('NOW() - INTERVAL ' . ($dueDays + 7) . ' DAY')] + ['gt' => new Expression('NOW() - INTERVAL ' . ($dueDays + 7) . ' DAY')] ); $orderCollection->getSelect() @@ -216,7 +218,7 @@ public function cancel($order, $statusCode) $this->logging->addDebug(__METHOD__ . '|20|'); if (in_array($order->getPayment()->getMethodInstance()->buckarooPaymentMethodCode, ['klarnakp'])) { - $methodInstanceClass = get_class($order->getPayment()->getMethodInstance()); + $methodInstanceClass = get_class($order->getPayment()->getMethodInstance()); $methodInstanceClass::$requestOnVoid = false; } From e2298055a331f4ccb590ea64056f837d43d0adbc Mon Sep 17 00:00:00 2001 From: "a.baraliu" Date: Fri, 27 Sep 2024 09:07:59 +0200 Subject: [PATCH 02/32] BP-3784-Remove-Giropay-Magento-2 --- Block/Widget/Button/Toolbar.php | 1 - Helper/Data.php | 1 - .../Source/PaymentMethods/AfterExpiry.php | 1 - .../Config/Source/PaymentMethods/PayLink.php | 1 - .../Source/PaymentMethods/PayPerEmail.php | 5 - Model/ConfigProvider/Method/Giropay.php | 81 ------ Model/Method/Giropay.php | 109 -------- .../Source/PaymentMethods/AfterExpiryTest.php | 3 - .../Source/PaymentMethods/PayPerEmailTest.php | 3 - .../ConfigProvider/Method/GiropayTest.php | 137 ---------- Test/Unit/Model/Method/GiropayTest.php | 241 ------------------ etc/adminhtml/system/payment_methods.xml | 2 - .../system/payment_methods/giropay.xml | 177 ------------- etc/config.xml | 22 +- etc/di.xml | 4 - etc/frontend/di.xml | 1 - etc/payment.xml | 3 - i18n/de_DE.csv | 2 - i18n/es_ES.csv | 2 - i18n/fr_FR.csv | 2 - i18n/nl_BE.csv | 2 - i18n/nl_NL.csv | 2 - view/base/web/images/svg/giropay.svg | 241 ------------------ view/frontend/layout/checkout_index_index.xml | 3 - view/frontend/web/css/styles.css | 15 +- .../web/js/view/payment/buckaroo-payments.js | 4 - .../view/payment/method-renderer/giftcards.js | 2 +- .../view/payment/method-renderer/giropay.js | 121 --------- .../payment/buckaroo_magento2_giropay.html | 60 ----- 29 files changed, 10 insertions(+), 1238 deletions(-) delete mode 100644 Model/ConfigProvider/Method/Giropay.php delete mode 100644 Model/Method/Giropay.php delete mode 100644 Test/Unit/Model/ConfigProvider/Method/GiropayTest.php delete mode 100644 Test/Unit/Model/Method/GiropayTest.php delete mode 100644 etc/adminhtml/system/payment_methods/giropay.xml delete mode 100644 view/base/web/images/svg/giropay.svg delete mode 100644 view/frontend/web/js/view/payment/method-renderer/giropay.js delete mode 100644 view/frontend/web/template/payment/buckaroo_magento2_giropay.html diff --git a/Block/Widget/Button/Toolbar.php b/Block/Widget/Button/Toolbar.php index 058ddb6f3..ba4996afa 100644 --- a/Block/Widget/Button/Toolbar.php +++ b/Block/Widget/Button/Toolbar.php @@ -49,7 +49,6 @@ class Toolbar 'buckaroo_magento2_belfius', 'buckaroo_magento2_transfer', 'buckaroo_magento2_eps', - 'buckaroo_magento2_giropay', 'buckaroo_magento2_kbc', 'buckaroo_magento2_klarna', 'buckaroo_magento2_klarnakp', diff --git a/Helper/Data.php b/Helper/Data.php index d80e6b8c0..ad16cdd32 100644 --- a/Helper/Data.php +++ b/Helper/Data.php @@ -433,7 +433,6 @@ public function getPaymentMethodsList() ['value' => 'emandate', 'label' => __('Digital Debit Authorization')], ['value' => 'eps', 'label' => __('EPS')], ['value' => 'giftcards', 'label' => __('Giftcards')], - ['value' => 'giropay', 'label' => __('Giropay')], ['value' => 'ideal', 'label' => __('iDEAL')], ['value' => 'idealprocessing', 'label' => __('iDEAL Processing')], ['value' => 'kbc', 'label' => __('KBC')], diff --git a/Model/Config/Source/PaymentMethods/AfterExpiry.php b/Model/Config/Source/PaymentMethods/AfterExpiry.php index 661e8016e..ab15b983c 100644 --- a/Model/Config/Source/PaymentMethods/AfterExpiry.php +++ b/Model/Config/Source/PaymentMethods/AfterExpiry.php @@ -37,7 +37,6 @@ public function toOptionArray() ['value' => 'dankort', 'label' => __('Dankort')], ['value' => 'eps', 'label' => __('EPS')], ['value' => 'giftcard', 'label' => __('Giftcards')], - ['value' => 'giropay', 'label' => __('Giropay')], ['value' => 'ideal', 'label' => __('iDEAL')], ['value' => 'idealprocessing', 'label' => __('iDEAL Processing')], ['value' => 'maestro', 'label' => __('Maestro')], diff --git a/Model/Config/Source/PaymentMethods/PayLink.php b/Model/Config/Source/PaymentMethods/PayLink.php index 7de64040d..8c558c2be 100644 --- a/Model/Config/Source/PaymentMethods/PayLink.php +++ b/Model/Config/Source/PaymentMethods/PayLink.php @@ -38,7 +38,6 @@ public function toOptionArray() ['value' => 'dankort', 'label' => __('Dankort')], ['value' => 'eps', 'label' => __('EPS')], ['value' => 'giftcard', 'label' => __('Giftcards')], - ['value' => 'giropay', 'label' => __('Giropay')], ['value' => 'ideal', 'label' => __('iDEAL')], ['value' => 'idealprocessing', 'label' => __('iDEAL Processing')], ['value' => 'maestro', 'label' => __('Maestro')], diff --git a/Model/Config/Source/PaymentMethods/PayPerEmail.php b/Model/Config/Source/PaymentMethods/PayPerEmail.php index f191f7d0a..8f65f5351 100644 --- a/Model/Config/Source/PaymentMethods/PayPerEmail.php +++ b/Model/Config/Source/PaymentMethods/PayPerEmail.php @@ -70,11 +70,6 @@ public function toOptionArray() 'label' => __('Giftcards'), 'code' => 'buckaroo_magento2_giftcards' ], - [ - 'value' => 'giropay', - 'label' => __('Giropay'), - 'code' => 'buckaroo_magento2_giropay' - ], [ 'value' => 'ideal', 'label' => __('iDEAL'), diff --git a/Model/ConfigProvider/Method/Giropay.php b/Model/ConfigProvider/Method/Giropay.php deleted file mode 100644 index 7ebedd842..000000000 --- a/Model/ConfigProvider/Method/Giropay.php +++ /dev/null @@ -1,81 +0,0 @@ -getBuckarooPaymentFeeLabel( - \Buckaroo\Magento2\Model\Method\Giropay::PAYMENT_METHOD_CODE - ); - - return [ - 'payment' => [ - 'buckaroo' => [ - 'giropay' => [ - 'paymentFeeLabel' => $paymentFeeLabel, - 'subtext' => $this->getSubtext(), - 'subtext_style' => $this->getSubtextStyle(), - 'subtext_color' => $this->getSubtextColor(), - 'allowedCurrencies' => $this->getAllowedCurrencies(), - ], - ], - ], - ]; - } - - /** - * @param null|int $storeId - * - * @return float - */ - public function getPaymentFee($storeId = null) - { - $paymentFee = $this->scopeConfig->getValue( - self::XPATH_GIROPAY_PAYMENT_FEE, - \Magento\Store\Model\ScopeInterface::SCOPE_STORE, - $storeId - ); - - return $paymentFee ? $paymentFee : false; - } -} diff --git a/Model/Method/Giropay.php b/Model/Method/Giropay.php deleted file mode 100644 index 69a7318ab..000000000 --- a/Model/Method/Giropay.php +++ /dev/null @@ -1,109 +0,0 @@ -transactionBuilderFactory->get('order'); - - $services = [ - 'Name' => 'giropay', - 'Action' => 'Pay', - 'Version' => 2, - ]; - - /** - * @noinspection PhpUndefinedMethodInspection - */ - $transactionBuilder->setOrder($payment->getOrder()) - ->setServices($services) - ->setMethod('TransactionRequest'); - - return $transactionBuilder; - } - - /** - * {@inheritdoc} - */ - public function getCaptureTransactionBuilder($payment) - { - return false; - } - - /** - * {@inheritdoc} - */ - public function getAuthorizeTransactionBuilder($payment) - { - return false; - } - - protected function getRefundTransactionBuilderVersion() - { - return 2; - } - - /** - * {@inheritdoc} - */ - public function getVoidTransactionBuilder($payment) - { - return true; - } - - /** - * @param \Magento\Sales\Api\Data\OrderPaymentInterface|\Magento\Payment\Model\InfoInterface $payment - * - * @return bool|string - */ - public function getPaymentMethodName($payment) - { - return $this->buckarooPaymentMethodCode; - } - - protected function getRefundTransactionBuilderChannel() - { - return 'Web'; - } -} diff --git a/Test/Unit/Model/Config/Source/PaymentMethods/AfterExpiryTest.php b/Test/Unit/Model/Config/Source/PaymentMethods/AfterExpiryTest.php index 33bde4377..5fb49443f 100644 --- a/Test/Unit/Model/Config/Source/PaymentMethods/AfterExpiryTest.php +++ b/Test/Unit/Model/Config/Source/PaymentMethods/AfterExpiryTest.php @@ -41,9 +41,6 @@ public function toOptionArrayProvider() [ ['value' => 'giftcard', 'label' => 'Giftcards'] ], - [ - ['value' => 'giropay', 'label' => 'Giropay'] - ], [ ['value' => 'ideal', 'label' => 'iDEAL'] ], diff --git a/Test/Unit/Model/Config/Source/PaymentMethods/PayPerEmailTest.php b/Test/Unit/Model/Config/Source/PaymentMethods/PayPerEmailTest.php index b9964fd5a..2d3dd894f 100644 --- a/Test/Unit/Model/Config/Source/PaymentMethods/PayPerEmailTest.php +++ b/Test/Unit/Model/Config/Source/PaymentMethods/PayPerEmailTest.php @@ -44,9 +44,6 @@ public function toOptionArrayProvider() [ ['value' => 'giftcard', 'label' => 'Giftcards'] ], - [ - ['value' => 'giropay', 'label' => 'Giropay'] - ], [ ['value' => 'ideal', 'label' => 'iDEAL'] ], diff --git a/Test/Unit/Model/ConfigProvider/Method/GiropayTest.php b/Test/Unit/Model/ConfigProvider/Method/GiropayTest.php deleted file mode 100644 index 0e3325832..000000000 --- a/Test/Unit/Model/ConfigProvider/Method/GiropayTest.php +++ /dev/null @@ -1,137 +0,0 @@ - [ - [ - 'payment' => [ - 'buckaroo' => [ - 'giropay' => [ - 'paymentFeeLabel' => 'Fee', - 'allowedCurrencies' => ['EUR'] - ] - ] - ] - ] - ] - ]; - } - - /** - * @param $expected - * - * @dataProvider getConfigProvider - */ - public function testGetConfig($expected) - { - $scopeConfigMock = $this->getFakeMock(ScopeConfigInterface::class) - ->setMethods(['getValue']) - ->getMockForAbstractClass(); - $scopeConfigMock->expects($this->atLeastOnce()) - ->method('getValue') - ->withConsecutive( - [Giropay::XPATH_ALLOWED_CURRENCIES, ScopeInterface::SCOPE_STORE, null] - ) - ->willReturnOnConsecutiveCalls('EUR'); - - $paymentFeeMock = $this->getFakeMock(PaymentFee::class)->setMethods(['getBuckarooPaymentFeeLabel'])->getMock(); - $paymentFeeMock->method('getBuckarooPaymentFeeLabel')->with(GiropayMethod::PAYMENT_METHOD_CODE)->willReturn('Fee'); - - $instance = $this->getInstance(['scopeConfig' => $scopeConfigMock, 'paymentFeeHelper' => $paymentFeeMock]); - $result = $instance->getConfig(); - - $this->assertEquals($expected, $result); - } - - public function getPaymentFeeProvider() - { - return [ - 'null value' => [ - null, - false - ], - 'false value' => [ - false, - false - ], - 'empty int value' => [ - 0, - false - ], - 'empty float value' => [ - 0.00, - false - ], - 'empty string value' => [ - '', - false - ], - 'int value' => [ - 1, - 1 - ], - 'float value' => [ - 2.34, - 2.34 - ], - 'string value' => [ - '5.67', - 5.67 - ], - ]; - } - - /** - * @param $value - * @param $expected - * - * @dataProvider getPaymentFeeProvider - */ - public function testGetPaymentFee($value, $expected) - { - $scopeConfigMock = $this->getFakeMock(ScopeConfigInterface::class) - ->setMethods(['getValue']) - ->getMockForAbstractClass(); - $scopeConfigMock->expects($this->once()) - ->method('getValue') - ->with(Giropay::XPATH_GIROPAY_PAYMENT_FEE, ScopeInterface::SCOPE_STORE) - ->willReturn($value); - - $instance = $this->getInstance(['scopeConfig' => $scopeConfigMock]); - $result = $instance->getPaymentFee(); - - $this->assertEquals($expected, $result); - } -} diff --git a/Test/Unit/Model/Method/GiropayTest.php b/Test/Unit/Model/Method/GiropayTest.php deleted file mode 100644 index 34e5b533a..000000000 --- a/Test/Unit/Model/Method/GiropayTest.php +++ /dev/null @@ -1,241 +0,0 @@ -getObject(DataObject::class); - $data->setBuckarooSkipValidation(0); - $data->setAdditionalData([ - 'customer_bic' => 'NL32INGB' - ]); - - $infoInstanceMock = $this->getFakeMock(InfoInterface::class) - ->setMethods(['setAdditionalInformation']) - ->getMockForAbstractClass(); - $infoInstanceMock->expects($this->exactly(2))->method('setAdditionalInformation')->withConsecutive( - ['buckaroo_skip_validation', 0], - ['customer_bic', 'NL32INGB'] - ); - - $instance = $this->getInstance(); - $instance->setData('info_instance', $infoInstanceMock); - - $result = $instance->assignData($data); - $this->assertInstanceOf(Giropay::class, $result); - } - - /** - * Test the getOrderTransactionBuilder method. - */ - public function testGetOrderTransactionBuilder() - { - $fixture = [ - 'customer_bic' => 'biccib', - 'order' => 'orderrr!', - ]; - - $paymentMock = $this->getFakeMock(Payment::class) - ->setMethods(['getOrder', 'getAdditionalInformation']) - ->getMock(); - $paymentMock->expects($this->once())->method('getOrder')->willReturn($fixture['order']); - $paymentMock->expects($this->once()) - ->method('getAdditionalInformation') - ->with('customer_bic') - ->willReturn($fixture['customer_bic']); - - $orderMock =$this->getFakeMock(Order::class)->setMethods(['setOrder', 'setMethod', 'setServices'])->getMock(); - $orderMock->expects($this->once())->method('setOrder')->with($fixture['order'])->willReturnSelf(); - $orderMock->expects($this->once())->method('setMethod')->with('TransactionRequest')->willReturnSelf(); - $orderMock->expects($this->once())->method('setServices')->willReturnCallback( - function ($services) use ($fixture, $orderMock) { - $this->assertEquals('giropay', $services['Name']); - $this->assertEquals($fixture['customer_bic'], $services['RequestParameter'][0]['_']); - - return $orderMock; - } - ); - - $trxFactoryMock = $this->getFakeMock(TransactionBuilderFactory::class)->setMethods(['get'])->getMock(); - $trxFactoryMock->expects($this->once())->method('get')->with('order')->willReturn($orderMock); - - $infoInterface = $this->getFakeMock(InfoInterface::class)->getMockForAbstractClass(); - - $instance = $this->getInstance(['transactionBuilderFactory' => $trxFactoryMock]); - $instance->setData('info_instance', $infoInterface); - - $this->assertEquals($orderMock, $instance->getOrderTransactionBuilder($paymentMock)); - } - - /** - * Test the getCaptureTransactionBuilder method. - */ - public function testGetCaptureTransactionBuilder() - { - $instance = $this->getInstance(); - $this->assertFalse($instance->getCaptureTransactionBuilder('')); - } - - /** - * Test the getAuthorizeTransactionBuild method. - */ - public function testGetAuthorizeTransactionBuilder() - { - $instance = $this->getInstance(); - $this->assertFalse($instance->getAuthorizeTransactionBuilder('')); - } - - /** - * Test the getRefundTransactionBuilder method. - */ - public function testGetRefundTransactionBuilder() - { - $paymentMock = $this->getFakeMock(Payment::class) - ->setMethods(['getOrder', 'getAdditionalInformation']) - ->getMock(); - $paymentMock->expects($this->once())->method('getOrder')->willReturn('orderr'); - $paymentMock->expects($this->once()) - ->method('getAdditionalInformation') - ->with(Giropay::BUCKAROO_ORIGINAL_TRANSACTION_KEY_KEY) - ->willReturn('getAdditionalInformation'); - - $trxFactoryMock = $this->getFakeMock(TransactionBuilderFactory::class) - ->setMethods(['get', 'setOrder', 'setMethod', 'setChannel', 'setOriginalTransactionKey', 'setServices']) - ->getMock(); - $trxFactoryMock->expects($this->once())->method('get')->with('refund')->willReturnSelf(); - $trxFactoryMock->expects($this->once())->method('setOrder')->with('orderr')->willReturnSelf(); - $trxFactoryMock->expects($this->once())->method('setMethod')->with('TransactionRequest')->willReturnSelf(); - $trxFactoryMock->expects($this->once())->method('setChannel')->with('CallCenter')->willReturnSelf(); - $trxFactoryMock->expects($this->once()) - ->method('setOriginalTransactionKey') - ->with('getAdditionalInformation') - ->willReturnSelf(); - $trxFactoryMock->expects($this->once())->method('setServices')->willReturnCallback( - function ($services) use ($trxFactoryMock) { - $services['Name'] = 'giropay'; - $services['Action'] = 'Refund'; - - return $trxFactoryMock; - } - ); - - $instance = $this->getInstance(['transactionBuilderFactory' => $trxFactoryMock]); - - $this->assertEquals($trxFactoryMock, $instance->getRefundTransactionBuilder($paymentMock)); - } - - /** - * Test the getVoidTransactionBuild method. - */ - public function testGetVoidTransactionBuilder() - { - $instance = $this->getInstance(); - $this->assertTrue($instance->getVoidTransactionBuilder('')); - } - - /** - * Test the validation method happy path. - */ - public function testValidate() - { - $paymentInfoMock = $this->getFakeMock(InfoInterface::class) - ->setMethods(['getQuote', 'getBillingAddress', 'getCountryId', 'getAdditionalInformation']) - ->getMockForAbstractClass(); - $paymentInfoMock->expects($this->once())->method('getQuote')->willReturnSelf(); - $paymentInfoMock->expects($this->once())->method('getBillingAddress')->willReturnSelf(); - $paymentInfoMock->expects($this->once())->method('getCountryId')->willReturn(4); - $paymentInfoMock->expects($this->exactly(2)) - ->method('getAdditionalInformation') - ->withConsecutive(['buckaroo_skip_validation'], ['customer_bic']) - ->willReturnOnConsecutiveCalls(false, 'ABCDEF1E'); - - $instance = $this->getInstance(); - $instance->setData('info_instance', $paymentInfoMock); - $result = $instance->validate(); - - $this->assertInstanceOf(Giropay::class, $result); - } - - /** - * Test the validation method happy path. - */ - public function testValidateInvalidBic() - { - $paymentInfoMock = $this->getFakeMock(InfoInterface::class) - ->setMethods(['getQuote', 'getBillingAddress', 'getCountryId', 'getAdditionalInformation']) - ->getMockForAbstractClass(); - $paymentInfoMock->expects($this->once())->method('getQuote')->willReturnSelf(); - $paymentInfoMock->expects($this->once())->method('getBillingAddress')->willReturnSelf(); - $paymentInfoMock->expects($this->once())->method('getCountryId')->willReturn(4); - $paymentInfoMock->expects($this->exactly(2)) - ->method('getAdditionalInformation') - ->withConsecutive(['buckaroo_skip_validation'], ['customer_bic']) - ->willReturnOnConsecutiveCalls(false, 'wrong'); - - $instance = $this->getInstance(); - $instance->setData('info_instance', $paymentInfoMock); - - try { - $instance->validate(); - } catch (LocalizedException $e) { - $this->assertEquals('Please enter a valid BIC number', $e->getMessage()); - } - } - - /** - * Test the validation method happy path. - */ - public function testValidateSkipValidation() - { - $paymentInfoMock = $this->getFakeMock(InfoInterface::class) - ->setMethods(['getQuote', 'getBillingAddress', 'getCountryId', 'getAdditionalInformation']) - ->getMockForAbstractClass(); - $paymentInfoMock->expects($this->once())->method('getQuote')->willReturnSelf(); - $paymentInfoMock->expects($this->once())->method('getBillingAddress')->willReturnSelf(); - $paymentInfoMock->expects($this->once())->method('getCountryId')->willReturn(4); - $paymentInfoMock->expects($this->once()) - ->method('getAdditionalInformation') - ->with('buckaroo_skip_validation') - ->willReturn(true); - - $instance = $this->getInstance(); - $instance->setData('info_instance', $paymentInfoMock); - - $result = $instance->validate(); - - $this->assertInstanceOf(Giropay::class, $result); - } -} diff --git a/etc/adminhtml/system/payment_methods.xml b/etc/adminhtml/system/payment_methods.xml index 2aa07251a..3a80f1638 100644 --- a/etc/adminhtml/system/payment_methods.xml +++ b/etc/adminhtml/system/payment_methods.xml @@ -66,8 +66,6 @@ - - diff --git a/etc/adminhtml/system/payment_methods/giropay.xml b/etc/adminhtml/system/payment_methods/giropay.xml deleted file mode 100644 index 6ba00f4cb..000000000 --- a/etc/adminhtml/system/payment_methods/giropay.xml +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - Buckaroo\Magento2\Block\Config\Form\Field\Fieldset - - - - - Buckaroo\Magento2\Model\Config\Source\Enablemode - payment/buckaroo_magento2_giropay/active - - - - - - payment/buckaroo_magento2_giropay/title - - - - - - payment/buckaroo_magento2_giropay/subtext - - - - - - Buckaroo\Magento2\Model\Config\Source\SubtextStyle - payment/buckaroo_magento2_giropay/subtext_style - - - - - - payment/buckaroo_magento2_giropay/subtext_color - Buckaroo\Magento2\Block\Config\Form\Field\ColorPicker - - - - - - - payment/buckaroo_magento2_giropay/sort_order - - - - - - - - - Magento\Config\Model\Config\Source\Yesno - payment/buckaroo_magento2_giropay/order_email - - - - - Configuration > Sales > Tax.]]> - payment/buckaroo_magento2_giropay/payment_fee - Buckaroo\Magento2\Model\Config\Backend\PaymentFee - - - - - - payment/buckaroo_magento2_giropay/payment_fee_label - - - - - - The payment method shows only for orders with an order amount greater than the minimum amount. - payment/buckaroo_magento2_giropay/min_amount - Buckaroo\Magento2\Model\Config\Backend\Price - - - - - - The payment method shows only for orders with an order amount smaller than the maximum amount. - payment/buckaroo_magento2_giropay/max_amount - Buckaroo\Magento2\Model\Config\Backend\Price - - - - - - Magento\Config\Model\Config\Source\Yesno - payment/buckaroo_magento2_giropay/active_status - - - - - - To make a new status available it needs to be assigned to the correct state. See Magento documentation about state and status. - Buckaroo\Magento2\Model\Config\Source\StatusesSuccess - payment/buckaroo_magento2_giropay/order_status_success - - 1 - - - - - - - To make a new status available it needs to be assigned to the correct state. See Magento documentation about state and status. - Buckaroo\Magento2\Model\Config\Source\StatusesFailed - payment/buckaroo_magento2_giropay/order_status_failed - - 1 - - - - - - - Your contract with Buckaroo must allow for the selected currencies to be used with this payment method. - payment/buckaroo_magento2_giropay/allowed_currencies - Buckaroo\Magento2\Model\Config\Source\AllowedCurrencies::giropay - Buckaroo\Magento2\Model\Config\Backend\AllowedCurrencies - - - - - Buckaroo\Magento2\Model\Config\Source\AllOrSpecificCountries - payment/buckaroo_magento2_giropay/allowspecific - - - - - - Magento\Config\Model\Config\Source\Locale\Country - payment/buckaroo_magento2_giropay/specificcountry - - 1 - - - - - - - Magento developer client restrictions. - Magento\Config\Model\Config\Source\Yesno - payment/buckaroo_magento2_giropay/limit_by_ip - - - - - Buckaroo\Magento2\Model\Config\Source\SpecificCustomerGroups - 1 - payment/buckaroo_magento2_giropay/specificcustomergroup - - - - diff --git a/etc/config.xml b/etc/config.xml index 320d22a16..d95dba683 100644 --- a/etc/config.xml +++ b/etc/config.xml @@ -95,7 +95,7 @@ buckaroo_magento2 order 0 - amex,bancontactmrcash,cartebancaire,cartebleuevisa,nexi,postepay,dankort,eps,giftcard,giropay,ideal,mastercard,paypal,sofortueberweisung,transfer,visa,maestro,visaelectron,vpay,alipay,wechatpay,p24,trustly,belfius,blik + amex,bancontactmrcash,cartebancaire,cartebleuevisa,nexi,postepay,dankort,eps,giftcard,ideal,mastercard,paypal,sofortueberweisung,transfer,visa,maestro,visaelectron,vpay,alipay,wechatpay,p24,trustly,belfius,blik @@ -182,23 +182,9 @@ buckaroo_magento2 order 1 - amex,bancontactmrcash,cartebancaire,cartebleuevisa,nexi,postepay,dankort,eps,giftcard,giropay,ideal,mastercard,paypal,sofortueberweisung,transfer,visa,maestro,visaelectron,vpay,alipay,wechatpay,p24,trustly,belfius,blik + amex,bancontactmrcash,cartebancaire,cartebleuevisa,nexi,postepay,dankort,eps,giftcard,ideal,mastercard,paypal,sofortueberweisung,transfer,visa,maestro,visaelectron,vpay,alipay,wechatpay,p24,trustly,belfius,blik - - 0 - Buckaroo\Magento2\Model\Method\Giropay - pending - Giropay - 0 - 160 - 1 - Fee - buckaroo_magento2 - order - 0 - - 0 Buckaroo\Magento2\Model\Method\Mrcash @@ -290,8 +276,8 @@ 1 1 1 - amex,bancontactmrcash,cartebancaire,cartebleuevisa,nexi,postepay,dankort,eps,sepadirectdebit,giftcard,giropay,ideal,mastercard,paypal,sofortueberweisung,transfer,visa,maestro,visaelectron,vpay,alipay,wechatpay,p24,trustly,belfius,blik - amex,bancontactmrcash,cartebancaire,cartebleuevisa,nexi,postepay,dankort,eps,giftcard,giropay,ideal,mastercard,paypal,sofortueberweisung,transfer,visa,maestro,visaelectron,vpay,alipay,wechatpay,p24,trustly,belfius,blik + amex,bancontactmrcash,cartebancaire,cartebleuevisa,nexi,postepay,dankort,eps,sepadirectdebit,giftcard,ideal,mastercard,paypal,sofortueberweisung,transfer,visa,maestro,visaelectron,vpay,alipay,wechatpay,p24,trustly,belfius,blik + amex,bancontactmrcash,cartebancaire,cartebleuevisa,nexi,postepay,dankort,eps,giftcard,ideal,mastercard,paypal,sofortueberweisung,transfer,visa,maestro,visaelectron,vpay,alipay,wechatpay,p24,trustly,belfius,blik 7 1 diff --git a/etc/di.xml b/etc/di.xml index 89cf99a36..75c61345c 100644 --- a/etc/di.xml +++ b/etc/di.xml @@ -249,10 +249,6 @@ creditcards Buckaroo\Magento2\Model\ConfigProvider\Method\Creditcards - - giropay - Buckaroo\Magento2\Model\ConfigProvider\Method\Giropay - mrcash Buckaroo\Magento2\Model\ConfigProvider\Method\Mrcash diff --git a/etc/frontend/di.xml b/etc/frontend/di.xml index 6bd197d3b..d217359d4 100644 --- a/etc/frontend/di.xml +++ b/etc/frontend/di.xml @@ -36,7 +36,6 @@ Buckaroo\Magento2\Model\ConfigProvider\Method\Mrcash Buckaroo\Magento2\Model\ConfigProvider\Method\Sofortbanking Buckaroo\Magento2\Model\ConfigProvider\Method\Belfius - Buckaroo\Magento2\Model\ConfigProvider\Method\Giropay Buckaroo\Magento2\Model\ConfigProvider\Method\Afterpay Buckaroo\Magento2\Model\ConfigProvider\Method\Afterpay2 Buckaroo\Magento2\Model\ConfigProvider\Method\PayPerEmail diff --git a/etc/payment.xml b/etc/payment.xml index 80e06896c..93dffa21d 100644 --- a/etc/payment.xml +++ b/etc/payment.xml @@ -51,9 +51,6 @@ 0 - - 0 - 0 diff --git a/i18n/de_DE.csv b/i18n/de_DE.csv index e13182196..42f141d39 100644 --- a/i18n/de_DE.csv +++ b/i18n/de_DE.csv @@ -97,8 +97,6 @@ "Enable Przelewy24","Przelewy24 activieren" "Trustly","Trustly" "Enable Trustly","Trustly activieren" -"Giropay","Giropay" -"Enable Giropay","Giropay activieren" "Refunding","Erstattung" "Enable or disable refunding.","Gutschrift/Rückerstattung aktivieren oder deaktivieren." "Set to 'No' refunds must be done manualy in Payment Plaza.","Mit der Auswahl 'Nein' werden Gutschriften in Magento bei Payment Plaza nicht angeboten." diff --git a/i18n/es_ES.csv b/i18n/es_ES.csv index 37a3d4c79..25943735f 100644 --- a/i18n/es_ES.csv +++ b/i18n/es_ES.csv @@ -99,8 +99,6 @@ "Enable Trustly","Activar Trustly" "Request To Pay","Request To Pay" "Enable Request To Pay","Activar Request To Pay" -"Giropay","Giropay" -"Enable Giropay","Activar Giropay" "Refunding","Reembolso" "Enable or disable refunding.","Activar o desactivar el reembolso." "Set to 'No' refunds must be done manualy in Payment Plaza.","Elegir 'No' para 'los reembolsos se deben realizar manualmente en Payment Plaza'." diff --git a/i18n/fr_FR.csv b/i18n/fr_FR.csv index 08d54046d..76b72f06a 100644 --- a/i18n/fr_FR.csv +++ b/i18n/fr_FR.csv @@ -97,8 +97,6 @@ "Enable Przelewy24","Activer Przelewy24" "Trustly","Trustly" "Enable Trustly","Activer Trustly" -"Giropay","Giropay" -"Enable Giropay","Activer Giropay" "Refunding","Remboursement" "Enable or disable refunding.","Activer ou désactiver le remboursement" "Set to 'No' refunds must be done manualy in Payment Plaza.","Défini sur "Non", les remboursements doivent être effectués manuellement dans Payment Plaza." diff --git a/i18n/nl_BE.csv b/i18n/nl_BE.csv index 598df015d..bd82c60ab 100644 --- a/i18n/nl_BE.csv +++ b/i18n/nl_BE.csv @@ -97,8 +97,6 @@ "Enable Przelewy24","Przelewy24 inschakelen" "Trustly","Trustly" "Enable Trustly","Trustly inschakelen" -"Giropay","Giropay" -"Enable Giropay","Giropay inschakelen" "Refunding","Terugbetaling" "Enable or disable refunding.","Schakel de creditering/terugstorten in of uit." "Set to 'No' refunds must be done manualy in Payment Plaza.","Bij de selectie 'Nee' worden credit memo's in Magento niet aangeboden bij Payment Plaza." diff --git a/i18n/nl_NL.csv b/i18n/nl_NL.csv index 0eba9f0e5..65b8ee68f 100644 --- a/i18n/nl_NL.csv +++ b/i18n/nl_NL.csv @@ -99,8 +99,6 @@ "Enable Przelewy24","Przelewy24 inschakelen" "Trustly","Trustly" "Enable Trustly","Trustly inschakelen" -"Giropay","Giropay" -"Enable Giropay","Giropay inschakelen" "Blik","Blik" "Enable Blik","Blik inschakelen" "Refunding","Terugbetaling" diff --git a/view/base/web/images/svg/giropay.svg b/view/base/web/images/svg/giropay.svg deleted file mode 100644 index c1c2f505e..000000000 --- a/view/base/web/images/svg/giropay.svg +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/view/frontend/layout/checkout_index_index.xml b/view/frontend/layout/checkout_index_index.xml index 2fd41041a..7f0aa03b6 100644 --- a/view/frontend/layout/checkout_index_index.xml +++ b/view/frontend/layout/checkout_index_index.xml @@ -117,9 +117,6 @@ true - - true - true diff --git a/view/frontend/web/css/styles.css b/view/frontend/web/css/styles.css index 7afb0da75..e3c2cd600 100644 --- a/view/frontend/web/css/styles.css +++ b/view/frontend/web/css/styles.css @@ -133,15 +133,15 @@ margin-top: 20px; } -.payment-method-second-col input::placeholder { +.payment-method-second-col input::placeholder { color: #c0c0c0; - opacity: 1; + opacity: 1; } - + .payment-method-second-col input:-ms-input-placeholder { color: #c0c0c0; } - + .payment-method-second-col input::-ms-input-placeholder { color: #c0c0c0; } @@ -173,7 +173,6 @@ .buckaroo_magento2_afterpay20 .payment-method-second-col, .buckaroo_magento2_billink .payment-method-second-col, .buckaroo_magento2_sepadirectdebit .payment-method-second-col, - .buckaroo_magento2_giropay .payment-method-second-col, .buckaroo_magento2_payperemail .payment-method-second-col, .buckaroo_magento2_klarna .payment-method-second-col, .buckaroo_magento2_klarnakp .payment-method-second-col, @@ -205,7 +204,6 @@ .buckaroo_magento2_afterpay20 .payment-method-billing-address, .buckaroo_magento2_billink .payment-method-billing-address, .buckaroo_magento2_sepadirectdebit .payment-method-billing-address, - .buckaroo_magento2_giropay .payment-method-billing-address, .buckaroo_magento2_payperemail .payment-method-billing-address, .buckaroo_magento2_klarna .payment-method-billing-address, .buckaroo_magento2_klarnakp .payment-method-billing-address, @@ -241,7 +239,6 @@ .magento-blank .buckaroo_magento2_afterpay20 .fieldset > .field:not(.choice) > .label, .magento-blank .buckaroo_magento2_billink .fieldset > .field:not(.choice) > .label, .magento-blank .buckaroo_magento2_sepadirectdebit .fieldset > .field:not(.choice) > .label, - .magento-blank .buckaroo_magento2_giropay .fieldset > .field:not(.choice) > .label, .magento-blank .buckaroo_magento2_payperemail .fieldset > .field:not(.choice) > .label, .magento-blank .buckaroo_magento2_klarna .fieldset > .field:not(.choice) > .label, .magento-blank .buckaroo_magento2_klarnakp .fieldset > .field:not(.choice) > .label, @@ -268,7 +265,6 @@ .magento-blank .buckaroo_magento2_afterpay20 .fieldset > .field:not(.choice) > .control, .magento-blank .buckaroo_magento2_billink .fieldset > .field:not(.choice) > .control, .magento-blank .buckaroo_magento2_sepadirectdebit .fieldset > .field:not(.choice) > .control, - .magento-blank .buckaroo_magento2_giropay .fieldset > .field:not(.choice) > .control, .magento-blank .buckaroo_magento2_payperemail .fieldset > .field:not(.choice) > .control, .magento-blank .buckaroo_magento2_klarna .fieldset > .field:not(.choice) > .control, .magento-blank .buckaroo_magento2_klarnakp .fieldset > .field:not(.choice) > .control, @@ -293,7 +289,6 @@ .magento-blank .buckaroo_magento2_afterpay20 .fieldset > .field.choice:before, .magento-blank .buckaroo_magento2_billink .fieldset > .field.choice:before, .magento-blank .buckaroo_magento2_sepadirectdebit .fieldset > .field.choice:before, - .magento-blank .buckaroo_magento2_giropay .fieldset > .field.choice:before, .magento-blank .buckaroo_magento2_payperemail .fieldset > .field.choice:before, .magento-blank .buckaroo_magento2_klarna .fieldset > .field.choice:before, .magento-blank .buckaroo_magento2_klarnakp .fieldset > .field.choice:before, @@ -643,4 +638,4 @@ .fieldset > .field .addon .bk-paybybank-selector .bank-method-input { display:none; } -} \ No newline at end of file +} diff --git a/view/frontend/web/js/view/payment/buckaroo-payments.js b/view/frontend/web/js/view/payment/buckaroo-payments.js index efa1abc6a..b574b68b1 100644 --- a/view/frontend/web/js/view/payment/buckaroo-payments.js +++ b/view/frontend/web/js/view/payment/buckaroo-payments.js @@ -93,10 +93,6 @@ define( type: 'buckaroo_magento2_transfer', component: 'Buckaroo_Magento2/js/view/payment/method-renderer/transfer' }, - { - type: 'buckaroo_magento2_giropay', - component: 'Buckaroo_Magento2/js/view/payment/method-renderer/giropay' - }, { type: 'buckaroo_magento2_mrcash', component: 'Buckaroo_Magento2/js/view/payment/method-renderer/mrcash' diff --git a/view/frontend/web/js/view/payment/method-renderer/giftcards.js b/view/frontend/web/js/view/payment/method-renderer/giftcards.js index fe87d5dcf..ced797fd1 100644 --- a/view/frontend/web/js/view/payment/method-renderer/giftcards.js +++ b/view/frontend/web/js/view/payment/method-renderer/giftcards.js @@ -66,7 +66,7 @@ define( } function checkPayments(){ - var p = ["billink","klarnakp","capayableinstallments","sofortbanking","giropay","transfer","sepadirectdebit","capayablein3","creditcard","mrcash","payperemail","emandate"]; + var p = ["billink","klarnakp","capayableinstallments","sofortbanking","transfer","sepadirectdebit","capayablein3","creditcard","mrcash","payperemail","emandate"]; p.forEach(function(item) { $('.buckaroo_magento2_'+item).remove(); }); diff --git a/view/frontend/web/js/view/payment/method-renderer/giropay.js b/view/frontend/web/js/view/payment/method-renderer/giropay.js deleted file mode 100644 index cb2804922..000000000 --- a/view/frontend/web/js/view/payment/method-renderer/giropay.js +++ /dev/null @@ -1,121 +0,0 @@ -/** - * NOTICE OF LICENSE - * - * This source file is subject to the MIT License - * It is available through the world-wide-web at this URL: - * https://tldrlegal.com/license/mit-license - * If you are unable to obtain it through the world-wide-web, please send an email - * to support@buckaroo.nl so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade this module to newer - * versions in the future. If you wish to customize this module for your - * needs please contact support@buckaroo.nl for more information. - * - * @copyright Copyright (c) Buckaroo B.V. - * @license https://tldrlegal.com/license/mit-license - */ -/*browser:true*/ -/*global define*/ -define( - [ - 'jquery', - 'Magento_Checkout/js/view/payment/default', - 'Magento_Checkout/js/model/payment/additional-validators', - 'Buckaroo_Magento2/js/action/place-order', - 'ko', - 'Magento_Checkout/js/checkout-data', - 'Magento_Checkout/js/action/select-payment-method', - 'buckaroo/checkout/common' - ], - function ( - $, - Component, - additionalValidators, - placeOrderAction, - ko, - checkoutData, - selectPaymentMethodAction, - checkoutCommon - ) { - 'use strict'; - - return Component.extend( - { - defaults: { - template: 'Buckaroo_Magento2/payment/buckaroo_magento2_giropay' - }, - paymentFeeLabel : window.checkoutConfig.payment.buckaroo.giropay.paymentFeeLabel, - subtext : window.checkoutConfig.payment.buckaroo.giropay.subtext, - subTextStyle : checkoutCommon.getSubtextStyle('giropay'), - currencyCode : window.checkoutConfig.quoteData.quote_currency_code, - baseCurrencyCode : window.checkoutConfig.quoteData.base_currency_code, - - /** - * @override - */ - initialize : function (options) { - if (checkoutData.getSelectedPaymentMethod() == options.index) { - window.checkoutConfig.buckarooFee.title(this.paymentFeeLabel); - } - - return this._super(options); - }, - - /** - * Place order. - * - * placeOrderAction has been changed from Magento_Checkout/js/action/place-order to our own version - * (Buckaroo_Magento2/js/action/place-order) to prevent redirect and handle the response. - */ - placeOrder: function (data, event) { - var self = this, - placeOrder; - - if (event) { - event.preventDefault(); - } - - if (this.validate() && additionalValidators.validate()) { - this.isPlaceOrderActionAllowed(false); - placeOrder = placeOrderAction(this.getData(), this.redirectAfterPlaceOrder, this.messageContainer); - - $.when(placeOrder).fail( - function () { - self.isPlaceOrderActionAllowed(true); - } - ).done(this.afterPlaceOrder.bind(this)); - return true; - } - return false; - }, - - afterPlaceOrder: function () { - var response = window.checkoutConfig.payment.buckaroo.response; - checkoutCommon.redirectHandle(response); - }, - - selectPaymentMethod: function () { - window.checkoutConfig.buckarooFee.title(this.paymentFeeLabel); - - selectPaymentMethodAction(this.getData()); - checkoutData.setSelectedPaymentMethod(this.item.method); - return true; - }, - - payWithBaseCurrency: function () { - var allowedCurrencies = window.checkoutConfig.payment.buckaroo.giropay.allowedCurrencies; - - return allowedCurrencies.indexOf(this.currencyCode) < 0; - }, - - getPayWithBaseCurrencyText: function () { - var text = $.mage.__('The transaction will be processed using %s.'); - - return text.replace('%s', this.baseCurrencyCode); - } - } - ); - } -); diff --git a/view/frontend/web/template/payment/buckaroo_magento2_giropay.html b/view/frontend/web/template/payment/buckaroo_magento2_giropay.html deleted file mode 100644 index 8b71e76b2..000000000 --- a/view/frontend/web/template/payment/buckaroo_magento2_giropay.html +++ /dev/null @@ -1,60 +0,0 @@ -
-
-
-
- - -
-
- -
-
-
- -
- -
- - - -
- -
-
- -
-
- - -
- -
- - -
- - - -
- -
-
From 2a4122a8f661b92388f73631b875e02a6e15616d Mon Sep 17 00:00:00 2001 From: AlbinaBaraliu Date: Fri, 27 Sep 2024 07:09:12 +0000 Subject: [PATCH 03/32] Apply logo changes from media repository --- view/base/web/images/svg/giropay.svg | 241 +++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 view/base/web/images/svg/giropay.svg diff --git a/view/base/web/images/svg/giropay.svg b/view/base/web/images/svg/giropay.svg new file mode 100644 index 000000000..c1c2f505e --- /dev/null +++ b/view/base/web/images/svg/giropay.svg @@ -0,0 +1,241 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 3d997f1225510301db0effceffa64dc9a80ec864 Mon Sep 17 00:00:00 2001 From: Sander Date: Wed, 2 Oct 2024 15:30:36 +0200 Subject: [PATCH 04/32] BP-3663-Buckaroo Payment Fee Prices does not make a difference (Tax settings) --- Model/Total/Quote/BuckarooFee.php | 28 ++++++++++++++++++--------- Model/Total/Quote/BuckarooFeeHyva.php | 26 +++++++++++++++++-------- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/Model/Total/Quote/BuckarooFee.php b/Model/Total/Quote/BuckarooFee.php index 1d0bba1c6..bc1712ead 100644 --- a/Model/Total/Quote/BuckarooFee.php +++ b/Model/Total/Quote/BuckarooFee.php @@ -232,25 +232,35 @@ public function getBaseFee( $configProvider = $this->configProviderMethodFactory->get($buckarooPaymentMethodCode); $basePaymentFee = trim($configProvider->getPaymentFee($quote->getStore())); + $inclTax = $this->configProviderBuckarooFee->getPaymentFeeTax() == + Calculation::DISPLAY_TYPE_INCLUDING_TAX; + + $shippingAddress = $quote->getShippingAddress(); + $billingAddress = $quote->getBillingAddress(); + $customerTaxClassId = $quote->getCustomerTaxClassId(); + $storeId = $quote->getStoreId(); + $taxClassId = $this->configProviderBuckarooFee->getTaxClass(); + + $request = $this->taxCalculation->getRateRequest( + $shippingAddress, + $billingAddress, + $customerTaxClassId, + $storeId + ); + $request->setProductClassId($taxClassId); + $percent = $this->taxCalculation->getRate($request); if (is_numeric($basePaymentFee)) { if (in_array($buckarooPaymentMethodCode, ['billink','afterpay20','afterpay','paypal'])) { - - $inclTax = $this->configProviderBuckarooFee->getPaymentFeeTax() == - Calculation::DISPLAY_TYPE_INCLUDING_TAX; - if ($inclTax) { - $request = $this->taxCalculation->getRateRequest(null, null, null, $quote->getStore()); - $taxClassId = $this->configProviderBuckarooFee->getTaxClass($quote->getStore()); - $percent = $this->taxCalculation->getRate($request->setProductClassId($taxClassId)); if ($percent > 0) { return $basePaymentFee / (1 + ($percent / 100)); } } return $basePaymentFee; } else { - if ($inclTax) { - return $basePaymentFee; + if ($inclTax){ + return $basePaymentFee / (1 + ($percent / 100)); } /** * Payment fee is a number diff --git a/Model/Total/Quote/BuckarooFeeHyva.php b/Model/Total/Quote/BuckarooFeeHyva.php index a86321ca0..c317f7863 100644 --- a/Model/Total/Quote/BuckarooFeeHyva.php +++ b/Model/Total/Quote/BuckarooFeeHyva.php @@ -219,17 +219,27 @@ public function getBaseFee( $configProvider = $this->configProviderMethodFactory->get($buckarooPaymentMethodCode); $basePaymentFee = trim($configProvider->getPaymentFee($quote->getStore())); + $inclTax = $this->configProviderBuckarooFee->getPaymentFeeTax() == + Calculation::DISPLAY_TYPE_INCLUDING_TAX; + + $shippingAddress = $quote->getShippingAddress(); + $billingAddress = $quote->getBillingAddress(); + $customerTaxClassId = $quote->getCustomerTaxClassId(); + $storeId = $quote->getStoreId(); + $taxClassId = $this->configProviderBuckarooFee->getTaxClass(); + + $request = $this->taxCalculation->getRateRequest( + $shippingAddress, + $billingAddress, + $customerTaxClassId, + $storeId + ); + $request->setProductClassId($taxClassId); + $percent = $this->taxCalculation->getRate($request); if (is_numeric($basePaymentFee)) { if (in_array($buckarooPaymentMethodCode, ['billink','afterpay20','afterpay','paypal'])) { - - $inclTax = $this->configProviderBuckarooFee->getPaymentFeeTax() == - Calculation::DISPLAY_TYPE_INCLUDING_TAX; - if ($inclTax) { - $request = $this->taxCalculation->getRateRequest(null, null, null, $quote->getStore()); - $taxClassId = $this->configProviderBuckarooFee->getTaxClass($quote->getStore()); - $percent = $this->taxCalculation->getRate($request->setProductClassId($taxClassId)); if ($percent > 0) { return $basePaymentFee / (1 + ($percent / 100)); } @@ -237,7 +247,7 @@ public function getBaseFee( return $basePaymentFee; } else { if ($inclTax) { - return $basePaymentFee; + return $basePaymentFee / (1 + ($percent / 100)); } /** * Payment fee is a number From 2f617cc9450e64d355a741762505bfcb2b9f9c8d Mon Sep 17 00:00:00 2001 From: Sander Date: Thu, 3 Oct 2024 13:58:30 +0200 Subject: [PATCH 05/32] BP-3663-Buckaroo Payment Fee Prices does not make a difference (Tax settings) --- Model/Total/Quote/BuckarooFee.php | 9 ++++++++- Model/Total/Quote/BuckarooFeeHyva.php | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Model/Total/Quote/BuckarooFee.php b/Model/Total/Quote/BuckarooFee.php index bc1712ead..4dc5e091b 100644 --- a/Model/Total/Quote/BuckarooFee.php +++ b/Model/Total/Quote/BuckarooFee.php @@ -297,8 +297,15 @@ public function getBaseFee( $total = $address->getBaseSubtotalTotalInclTax(); break; } + $percentageFee = ($percentage / 100) * $total; - $basePaymentFee = ($percentage / 100) * $total; + if($inclTax){ + if($percent > 0){ + return $percentageFee / (1 + ($percent / 100)); + } + } else{ + return $percentageFee; + } return $basePaymentFee; } diff --git a/Model/Total/Quote/BuckarooFeeHyva.php b/Model/Total/Quote/BuckarooFeeHyva.php index c317f7863..52b481ef2 100644 --- a/Model/Total/Quote/BuckarooFeeHyva.php +++ b/Model/Total/Quote/BuckarooFeeHyva.php @@ -284,8 +284,15 @@ public function getBaseFee( $total = $address->getBaseSubtotalTotalInclTax(); break; } + $percentageFee = ($percentage / 100) * $total; - $basePaymentFee = ($percentage / 100) * $total; + if($inclTax){ + if($percent > 0){ + return $percentageFee / (1 + ($percent / 100)); + } + } else{ + return $percentageFee; + } return $basePaymentFee; } From 3630143f2b46338c51702c56143592a5902cd813 Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Wed, 9 Oct 2024 15:55:23 +0200 Subject: [PATCH 06/32] remove grand total --- view/frontend/layout/checkout_index_index.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/view/frontend/layout/checkout_index_index.xml b/view/frontend/layout/checkout_index_index.xml index 7f0aa03b6..6798d3aa6 100644 --- a/view/frontend/layout/checkout_index_index.xml +++ b/view/frontend/layout/checkout_index_index.xml @@ -51,15 +51,6 @@
- - Buckaroo_Magento2/js/view/checkout/summary/grand-total - - Order Total Excl. Tax - Order Total Incl. Tax - You will be charged for - Order Total - - From f69c96f4d0858056b979da6f1686258c4048f160 Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Wed, 9 Oct 2024 16:55:12 +0200 Subject: [PATCH 07/32] refactor files --- view/frontend/layout/checkout_index_index.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/view/frontend/layout/checkout_index_index.xml b/view/frontend/layout/checkout_index_index.xml index 6798d3aa6..9c7a1e883 100644 --- a/view/frontend/layout/checkout_index_index.xml +++ b/view/frontend/layout/checkout_index_index.xml @@ -50,6 +50,12 @@ + + Buckaroo_Magento2/js/view/checkout/summary/grand-total + + Order Total + + From da9950b7d6784718b784fcaa8542b6228394d99f Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Wed, 9 Oct 2024 17:07:33 +0200 Subject: [PATCH 08/32] refactor files --- view/frontend/layout/checkout_index_index.xml | 3 +++ view/frontend/web/js/view/checkout/summary/grand-total.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/view/frontend/layout/checkout_index_index.xml b/view/frontend/layout/checkout_index_index.xml index 9c7a1e883..40e34fd9a 100644 --- a/view/frontend/layout/checkout_index_index.xml +++ b/view/frontend/layout/checkout_index_index.xml @@ -53,6 +53,9 @@ Buckaroo_Magento2/js/view/checkout/summary/grand-total + Order Total Excl. Tax + Order Total Incl. Tax + You will be charged for Order Total diff --git a/view/frontend/web/js/view/checkout/summary/grand-total.js b/view/frontend/web/js/view/checkout/summary/grand-total.js index 3c1c89431..fe2f16404 100644 --- a/view/frontend/web/js/view/checkout/summary/grand-total.js +++ b/view/frontend/web/js/view/checkout/summary/grand-total.js @@ -71,7 +71,7 @@ define([ return 0; } - amount = total['grand_total'] - total['tax_amount']; + amount = total['grand_total']; if (amount < 0) { amount = 0; From 18dfa34f2f77a135f86081dd5fcb1433dfabe6c8 Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Wed, 9 Oct 2024 17:11:05 +0200 Subject: [PATCH 09/32] refactor files --- view/frontend/web/js/view/checkout/summary/grand-total.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/view/frontend/web/js/view/checkout/summary/grand-total.js b/view/frontend/web/js/view/checkout/summary/grand-total.js index fe2f16404..bec2857aa 100644 --- a/view/frontend/web/js/view/checkout/summary/grand-total.js +++ b/view/frontend/web/js/view/checkout/summary/grand-total.js @@ -71,7 +71,9 @@ define([ return 0; } - amount = total['grand_total']; + if(!isNaN(parseFloat(this.getAlreadyPayTotal()))){ + amount = parseFloat(total['grand_total']) - parseFloat(this.getAlreadyPayTotal()); + } if (amount < 0) { amount = 0; From f7ec4eea874aff5ffa07933323226c74d66b3e68 Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Wed, 9 Oct 2024 17:18:14 +0200 Subject: [PATCH 10/32] refactor files --- view/frontend/layout/checkout_index_index.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/view/frontend/layout/checkout_index_index.xml b/view/frontend/layout/checkout_index_index.xml index 40e34fd9a..7f0aa03b6 100644 --- a/view/frontend/layout/checkout_index_index.xml +++ b/view/frontend/layout/checkout_index_index.xml @@ -50,14 +50,14 @@ - - Buckaroo_Magento2/js/view/checkout/summary/grand-total - - Order Total Excl. Tax - Order Total Incl. Tax - You will be charged for - Order Total - + + + Buckaroo_Magento2/js/view/checkout/summary/grand-total + + Order Total Excl. Tax + Order Total Incl. Tax + You will be charged for + Order Total From 9e5808ec93edc101b3d28ee40d65e7209eea45a0 Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Fri, 11 Oct 2024 10:54:39 +0200 Subject: [PATCH 11/32] refactor files --- view/frontend/layout/checkout_index_index.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/view/frontend/layout/checkout_index_index.xml b/view/frontend/layout/checkout_index_index.xml index 7f0aa03b6..6798d3aa6 100644 --- a/view/frontend/layout/checkout_index_index.xml +++ b/view/frontend/layout/checkout_index_index.xml @@ -51,15 +51,6 @@ - - Buckaroo_Magento2/js/view/checkout/summary/grand-total - - Order Total Excl. Tax - Order Total Incl. Tax - You will be charged for - Order Total - - From baaae7ba82318fab7446afa73b8601625a097759 Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Fri, 11 Oct 2024 13:30:07 +0200 Subject: [PATCH 12/32] refactor files --- view/frontend/layout/checkout_index_index.xml | 9 ++++ .../js/view/checkout/summary/grand-total.js | 44 ++++++++++++------- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/view/frontend/layout/checkout_index_index.xml b/view/frontend/layout/checkout_index_index.xml index 6798d3aa6..7f0aa03b6 100644 --- a/view/frontend/layout/checkout_index_index.xml +++ b/view/frontend/layout/checkout_index_index.xml @@ -51,6 +51,15 @@ + + Buckaroo_Magento2/js/view/checkout/summary/grand-total + + Order Total Excl. Tax + Order Total Incl. Tax + You will be charged for + Order Total + + diff --git a/view/frontend/web/js/view/checkout/summary/grand-total.js b/view/frontend/web/js/view/checkout/summary/grand-total.js index bec2857aa..870f34236 100644 --- a/view/frontend/web/js/view/checkout/summary/grand-total.js +++ b/view/frontend/web/js/view/checkout/summary/grand-total.js @@ -34,17 +34,14 @@ define([ * @return {*|String} */ getValue: function () { - var price = 0; - - if (this.totals()) { - price = totals.getSegment('grand_total').value; + let grandTotal = this._getGrandTotalValue(); + const alreadyPaid = this.getAlreadyPaidTotal(); - if(!isNaN(parseFloat(this.getAlreadyPayTotal()))){ - price = parseFloat(price) - parseFloat(this.getAlreadyPayTotal()); - } + if (!isNaN(alreadyPaid)) { + grandTotal -= alreadyPaid; } - return this.getFormattedPrice(price); + return this.getFormattedPrice(grandTotal); }, /** @@ -68,12 +65,10 @@ define([ amount; if (!total) { - return 0; + return this.getFormattedPrice(0); } - if(!isNaN(parseFloat(this.getAlreadyPayTotal()))){ - amount = parseFloat(total['grand_total']) - parseFloat(this.getAlreadyPayTotal()); - } + amount = total['grand_total'] - total['tax_amount'] - this.getAlreadyPaidTotal(); if (amount < 0) { amount = 0; @@ -86,16 +81,20 @@ define([ * @return {Boolean} */ isBaseGrandTotalDisplayNeeded: function () { - var total = this.totals(); - + const total = this.totals(); if (!total) { return false; } - return total['base_currency_code'] != total['quote_currency_code']; //eslint-disable-line eqeqeq + return total['base_currency_code'] !== total['quote_currency_code']; }, - getAlreadyPayTotal : function () { + /** + * Retrieve the already paid total from the totals segments + * + * @returns {Number} + */ + getAlreadyPaidTotal: function () { var buckarooFeeSegment = totals.getSegment('buckaroo_already_paid'); try { if (buckarooFeeSegment.title) { @@ -109,10 +108,21 @@ define([ } } } catch (e) { - // console.log(e); } return parseFloat(buckarooFeeSegment.value).toFixed(2); + }, + + /** + * Helper method to retrieve the grand total value + * + * @returns {Number} + */ + _getGrandTotalValue: function () { + if (this.totals()) { + return parseFloat(totals.getSegment('grand_total').value) || 0; + } + return 0; } }); }); From 69b233d9c3ed74e11bfc13dd5832883ad443325d Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Fri, 11 Oct 2024 15:27:02 +0200 Subject: [PATCH 13/32] remove use of grand-total.js --- Model/Total/Quote/BuckarooAlreadyPay.php | 96 +++++++------ etc/sales.xml | 2 +- view/frontend/layout/checkout_index_index.xml | 21 +-- .../js/view/checkout/summary/already-paid.js | 68 ++++++++++ .../js/view/checkout/summary/grand-total.js | 128 ------------------ .../view/checkout/summary/remaining-amount.js | 80 +++++++++++ .../checkout/summary/already-paid.html | 11 ++ .../checkout/summary/grand-total.html | 42 ------ .../checkout/summary/remaining-amount.html | 11 ++ 9 files changed, 241 insertions(+), 218 deletions(-) create mode 100644 view/frontend/web/js/view/checkout/summary/already-paid.js delete mode 100644 view/frontend/web/js/view/checkout/summary/grand-total.js create mode 100644 view/frontend/web/js/view/checkout/summary/remaining-amount.js create mode 100644 view/frontend/web/template/checkout/summary/already-paid.html delete mode 100644 view/frontend/web/template/checkout/summary/grand-total.html create mode 100644 view/frontend/web/template/checkout/summary/remaining-amount.html diff --git a/Model/Total/Quote/BuckarooAlreadyPay.php b/Model/Total/Quote/BuckarooAlreadyPay.php index c7bb6ccf5..021697642 100644 --- a/Model/Total/Quote/BuckarooAlreadyPay.php +++ b/Model/Total/Quote/BuckarooAlreadyPay.php @@ -22,24 +22,41 @@ namespace Buckaroo\Magento2\Model\Total\Quote; use Buckaroo\Magento2\Helper\PaymentGroupTransaction; +use Buckaroo\Magento2\Model\ResourceModel\Giftcard\Collection; use Magento\Framework\Pricing\PriceCurrencyInterface; +use Magento\Quote\Model\Quote; +use Magento\Quote\Model\Quote\Address\Total; +use Magento\Quote\Model\Quote\Address\Total\AbstractTotal; +use Magento\Quote\Api\Data\ShippingAssignmentInterface; -class BuckarooAlreadyPay extends \Magento\Quote\Model\Quote\Address\Total\AbstractTotal +class BuckarooAlreadyPay extends AbstractTotal { - /** * @var PriceCurrencyInterface */ - public $priceCurrency; + protected $priceCurrency; + /** + * @var PaymentGroupTransaction + */ protected $groupTransaction; - protected $giftcardCollection; + /** + * @var Collection + */ + protected $giftcardCollection; + /** + * Constructor + * + * @param PriceCurrencyInterface $priceCurrency + * @param PaymentGroupTransaction $groupTransaction + * @param Collection $giftcardCollection + */ public function __construct( PriceCurrencyInterface $priceCurrency, PaymentGroupTransaction $groupTransaction, - \Buckaroo\Magento2\Model\ResourceModel\Giftcard\Collection $giftcardCollection + Collection $giftcardCollection ) { $this->setCode('buckaroo_already_paid'); $this->priceCurrency = $priceCurrency; @@ -50,53 +67,54 @@ public function __construct( /** * Add buckaroo fee information to address * - * @param \Magento\Quote\Model\Quote $quote - * @param \Magento\Quote\Model\Quote\Address\Total $total - * @return $this + * @param Quote $quote + * @param Total $total + * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function fetch(\Magento\Quote\Model\Quote $quote, \Magento\Quote\Model\Quote\Address\Total $total) + public function fetch(Quote $quote, Total $total) { $orderId = $quote->getReservedOrderId(); $customTitle = []; if ($orderId) { - $items = $this->groupTransaction->getGroupTransactionItemsNotRefunded($orderId); - - foreach ($items as $giftcard) { - $foundGiftcard = $this->giftcardCollection->getItemByColumnValue( - 'servicecode', - $giftcard['servicecode'] - ); - - if ($foundGiftcard !== null || $giftcard['servicecode'] === 'buckaroovoucher') { - - - if ($giftcard['servicecode'] === 'buckaroovoucher') { - $label = __('Voucher'); - } else { - $label = $foundGiftcard['label']; + try { + $items = $this->groupTransaction->getGroupTransactionItemsNotRefunded($orderId); + + foreach ($items as $giftcard) { + $foundGiftcard = $this->giftcardCollection->getItemByColumnValue( + 'servicecode', + $giftcard['servicecode'] + ); + + if ($foundGiftcard !== null || $giftcard['servicecode'] === 'buckaroovoucher') { + if ($giftcard['servicecode'] === 'buckaroovoucher') { + $label = __('Voucher'); + } else { + $label = $foundGiftcard['label']; + } + + $customTitle[] = [ + 'label' => __('Paid with') . ' ' . $label, + 'amount' => -$giftcard['amount'], // Ensure this is negative + 'servicecode' => $giftcard['servicecode'], + 'serviceamount' => $giftcard['amount'], + 'transaction_id' => $giftcard['transaction_id'], + ]; } - - $customTitle[] = [ - 'label' => __('Paid with') . ' ' . $label, - 'amount' => -$giftcard['amount'], - 'servicecode' => $giftcard['servicecode'], - 'serviceamount' => $giftcard['amount'], - 'transaction_id' => $giftcard['transaction_id'], - ]; } + } catch (\Exception $e) { + // Optional: Log the exception if you have a logger + // $this->logger->error($e->getMessage()); } } - /** - * @noinspection PhpUndefinedMethodInspection - */ - $totals = [ - 'code' => $this->getCode(), + return [ + 'code' => $this->getCode(), 'title' => $customTitle ? __(json_encode($customTitle)) : $this->getLabel(), - 'value' => $this->groupTransaction->getAlreadyPaid($orderId), + 'value' => -$this->groupTransaction->getAlreadyPaid($orderId), // Set as negative ]; - return $totals; } /** diff --git a/etc/sales.xml b/etc/sales.xml index a884141fb..f7e0a3db6 100644 --- a/etc/sales.xml +++ b/etc/sales.xml @@ -35,7 +35,7 @@
- +
diff --git a/view/frontend/layout/checkout_index_index.xml b/view/frontend/layout/checkout_index_index.xml index 7f0aa03b6..a15805346 100644 --- a/view/frontend/layout/checkout_index_index.xml +++ b/view/frontend/layout/checkout_index_index.xml @@ -51,14 +51,19 @@ - - Buckaroo_Magento2/js/view/checkout/summary/grand-total - - Order Total Excl. Tax - Order Total Incl. Tax - You will be charged for - Order Total - + + + Buckaroo_Magento2/js/view/checkout/summary/already-paid + 250 + Already Paid + false + + + + Buckaroo_Magento2/js/view/checkout/summary/remaining-amount + 300 + Remaining Amount + false diff --git a/view/frontend/web/js/view/checkout/summary/already-paid.js b/view/frontend/web/js/view/checkout/summary/already-paid.js new file mode 100644 index 000000000..f12590d64 --- /dev/null +++ b/view/frontend/web/js/view/checkout/summary/already-paid.js @@ -0,0 +1,68 @@ +// app/code/Buckaroo/Magento2/view/frontend/web/js/view/checkout/summary/already-paid.js +define([ + 'Magento_Checkout/js/view/summary/abstract-total', + 'Magento_Checkout/js/model/quote', + 'Magento_Catalog/js/price-utils', + 'Magento_Checkout/js/model/totals' +], function (Component, quote, priceUtils, totals) { + 'use strict'; + + return Component.extend({ + defaults: { + template: 'Buckaroo_Magento2/checkout/summary/already-paid' + }, + + /** + * Get the already paid value + * + * @returns {String} + */ + getValue: function () { + var alreadyPaid = this.getAlreadyPaidTotal(); + return this.getFormattedPrice(alreadyPaid); + }, + + /** + * Retrieve the already paid total from the totals segments + * + * @returns {Number} + */ + getAlreadyPaidTotal: function () { + var buckarooFeeSegment = totals.getSegment('buckaroo_already_paid'); + try { + if (buckarooFeeSegment.title) { + var items = JSON.parse(buckarooFeeSegment.title); + var total = 0; + if ((typeof items === 'object') && (items.length > 0)) { + for (var i = 0; i < items.length; i++) { + total = parseFloat(total) + parseFloat(items[i].serviceamount); + } + return parseFloat(total).toFixed(2); + } + } + } catch (e) { + } + + return parseFloat(buckarooFeeSegment.value).toFixed(2); + }, + + /** + * Format the price + * + * @param {Number} price + * @returns {String} + */ + getFormattedPrice: function (price) { + return priceUtils.formatPrice(price, quote.getPriceFormat()); + }, + + /** + * Check if the total is displayed + * + * @return {Boolean} + */ + isDisplayed: function () { + return this.getAlreadyPaidTotal() != 0; + } + }); +}); diff --git a/view/frontend/web/js/view/checkout/summary/grand-total.js b/view/frontend/web/js/view/checkout/summary/grand-total.js deleted file mode 100644 index 870f34236..000000000 --- a/view/frontend/web/js/view/checkout/summary/grand-total.js +++ /dev/null @@ -1,128 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -/** - * @api - */ - -define([ - 'Magento_Checkout/js/view/summary/abstract-total', - 'Magento_Checkout/js/model/quote', - 'Magento_Catalog/js/price-utils', - 'Magento_Checkout/js/model/totals' -], function (Component, quote, priceUtils, totals) { - 'use strict'; - - return Component.extend({ - defaults: { - isFullTaxSummaryDisplayed: window.checkoutConfig.isFullTaxSummaryDisplayed || false, - template: 'Buckaroo_Magento2/checkout/summary/grand-total' - }, - totals: quote.getTotals(), - isTaxDisplayedInGrandTotal: window.checkoutConfig.includeTaxInGrandTotal || false, - - /** - * @return {*} - */ - isDisplayed: function () { - return this.isFullMode(); - }, - - /** - * @return {*|String} - */ - getValue: function () { - let grandTotal = this._getGrandTotalValue(); - const alreadyPaid = this.getAlreadyPaidTotal(); - - if (!isNaN(alreadyPaid)) { - grandTotal -= alreadyPaid; - } - - return this.getFormattedPrice(grandTotal); - }, - - /** - * @return {*|String} - */ - getBaseValue: function () { - var price = 0; - - if (this.totals()) { - price = this.totals()['base_grand_total']; - } - - return priceUtils.formatPriceLocale(price, quote.getBasePriceFormat()); - }, - - /** - * @return {*} - */ - getGrandTotalExclTax: function () { - var total = this.totals(), - amount; - - if (!total) { - return this.getFormattedPrice(0); - } - - amount = total['grand_total'] - total['tax_amount'] - this.getAlreadyPaidTotal(); - - if (amount < 0) { - amount = 0; - } - - return this.getFormattedPrice(amount); - }, - - /** - * @return {Boolean} - */ - isBaseGrandTotalDisplayNeeded: function () { - const total = this.totals(); - if (!total) { - return false; - } - - return total['base_currency_code'] !== total['quote_currency_code']; - }, - - /** - * Retrieve the already paid total from the totals segments - * - * @returns {Number} - */ - getAlreadyPaidTotal: function () { - var buckarooFeeSegment = totals.getSegment('buckaroo_already_paid'); - try { - if (buckarooFeeSegment.title) { - var items = JSON.parse(buckarooFeeSegment.title); - var total = 0; - if ((typeof items === 'object') && (items.length > 0)) { - for (var i = 0; i < items.length; i++) { - total = parseFloat(total) + parseFloat(items[i].serviceamount); - } - return parseFloat(total).toFixed(2); - } - } - } catch (e) { - } - - return parseFloat(buckarooFeeSegment.value).toFixed(2); - }, - - /** - * Helper method to retrieve the grand total value - * - * @returns {Number} - */ - _getGrandTotalValue: function () { - if (this.totals()) { - return parseFloat(totals.getSegment('grand_total').value) || 0; - } - return 0; - } - }); -}); diff --git a/view/frontend/web/js/view/checkout/summary/remaining-amount.js b/view/frontend/web/js/view/checkout/summary/remaining-amount.js new file mode 100644 index 000000000..2dd13914e --- /dev/null +++ b/view/frontend/web/js/view/checkout/summary/remaining-amount.js @@ -0,0 +1,80 @@ +// app/code/Buckaroo/Magento2/view/frontend/web/js/view/checkout/summary/remaining-amount.js +define([ + 'Magento_Checkout/js/view/summary/abstract-total', + 'Magento_Checkout/js/model/quote', + 'Magento_Catalog/js/price-utils', + 'Magento_Checkout/js/model/totals' +], function (Component, quote, priceUtils, totals) { + 'use strict'; + + return Component.extend({ + defaults: { + template: 'Buckaroo_Magento2/checkout/summary/remaining-amount' + }, + + /** + * Get the remaining amount value + * + * @returns {String} + */ + getValue: function () { + var remainingAmount = this.getRemainingAmount(); + return this.getFormattedPrice(remainingAmount); + }, + + /** + * Calculate the remaining amount to be paid + * + * @returns {Number} + */ + getRemainingAmount: function () { + var grandTotal = totals.getSegment('grand_total').value || 0; + var alreadyPaid = this.getAlreadyPaidTotal(); + + return grandTotal - alreadyPaid; + }, + + /** + * Retrieve the already paid total from the quote + * + * @returns {Number} + */ + getAlreadyPaidTotal: function () { + var buckarooFeeSegment = totals.getSegment('buckaroo_already_paid'); + try { + if (buckarooFeeSegment.title) { + var items = JSON.parse(buckarooFeeSegment.title); + var total = 0; + if ((typeof items === 'object') && (items.length > 0)) { + for (var i = 0; i < items.length; i++) { + total = parseFloat(total) + parseFloat(items[i].serviceamount); + } + return parseFloat(total).toFixed(2); + } + } + } catch (e) { + } + + return parseFloat(buckarooFeeSegment.value).toFixed(2); + }, + + /** + * Format the price + * + * @param {Number} price + * @returns {String} + */ + getFormattedPrice: function (price) { + return priceUtils.formatPrice(price, quote.getPriceFormat()); + }, + + /** + * Check if the total is displayed + * + * @return {Boolean} + */ + isDisplayed: function () { + return this.getAlreadyPaidTotal() != 0.00; + } + }); +}); diff --git a/view/frontend/web/template/checkout/summary/already-paid.html b/view/frontend/web/template/checkout/summary/already-paid.html new file mode 100644 index 000000000..5afdf3127 --- /dev/null +++ b/view/frontend/web/template/checkout/summary/already-paid.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/view/frontend/web/template/checkout/summary/grand-total.html b/view/frontend/web/template/checkout/summary/grand-total.html deleted file mode 100644 index 5a324f922..000000000 --- a/view/frontend/web/template/checkout/summary/grand-total.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/view/frontend/web/template/checkout/summary/remaining-amount.html b/view/frontend/web/template/checkout/summary/remaining-amount.html new file mode 100644 index 000000000..40c42bc99 --- /dev/null +++ b/view/frontend/web/template/checkout/summary/remaining-amount.html @@ -0,0 +1,11 @@ + + + + + + + + + + + From b152a3004b10eda2e61f66fb118d8d8f80f60f88 Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Mon, 14 Oct 2024 16:18:04 +0200 Subject: [PATCH 14/32] add Remaining amount under grand total --- Model/Total/Quote/BuckarooRemainingAmount.php | 58 +++++++++++++++ etc/sales.xml | 5 ++ view/frontend/layout/checkout_index_index.xml | 16 ++--- .../js/view/checkout/summary/already-paid.js | 32 +-------- .../view/checkout/summary/remaining-amount.js | 71 ++++--------------- .../checkout/summary/already-paid.html | 4 +- .../checkout/summary/remaining-amount.html | 3 +- 7 files changed, 91 insertions(+), 98 deletions(-) create mode 100644 Model/Total/Quote/BuckarooRemainingAmount.php diff --git a/Model/Total/Quote/BuckarooRemainingAmount.php b/Model/Total/Quote/BuckarooRemainingAmount.php new file mode 100644 index 000000000..19b937ec1 --- /dev/null +++ b/Model/Total/Quote/BuckarooRemainingAmount.php @@ -0,0 +1,58 @@ +setCode('remaining_amount'); + $this->groupTransaction = $groupTransaction; + } + + /** + * Fetch remaining amount for display in the frontend + * + * @param Quote $quote + * @param Total $total + * @return array + */ + public function fetch(Quote $quote, Total $total) + { + // Fetch the already paid amount + $alreadyPaid = $this->groupTransaction->getAlreadyPaid($quote->getReservedOrderId()); + $grandTotal = $quote->getGrandTotal(); + $remainingAmount = max(0, $grandTotal - $alreadyPaid); + + return [ + 'code' => $this->getCode(), + 'title' => __('Remaining Amount'), + 'value' => $remainingAmount + ]; + } + + /** + * Get Buckaroo label + * + * @return \Magento\Framework\Phrase + */ + public function getLabel() + { + return __('Fee'); + } +} diff --git a/etc/sales.xml b/etc/sales.xml index f7e0a3db6..3171d1aaf 100644 --- a/etc/sales.xml +++ b/etc/sales.xml @@ -31,6 +31,11 @@ + + + + +
diff --git a/view/frontend/layout/checkout_index_index.xml b/view/frontend/layout/checkout_index_index.xml index a15805346..65c9c43d4 100644 --- a/view/frontend/layout/checkout_index_index.xml +++ b/view/frontend/layout/checkout_index_index.xml @@ -51,20 +51,20 @@ - - - Buckaroo_Magento2/js/view/checkout/summary/already-paid - 250 - Already Paid - false - Buckaroo_Magento2/js/view/checkout/summary/remaining-amount - 300 + 250 Remaining Amount false + + + Buckaroo_Magento2/js/view/checkout/summary/already-paid + 300 + Already Paid + false + diff --git a/view/frontend/web/js/view/checkout/summary/already-paid.js b/view/frontend/web/js/view/checkout/summary/already-paid.js index f12590d64..189a9e139 100644 --- a/view/frontend/web/js/view/checkout/summary/already-paid.js +++ b/view/frontend/web/js/view/checkout/summary/already-paid.js @@ -1,4 +1,3 @@ -// app/code/Buckaroo/Magento2/view/frontend/web/js/view/checkout/summary/already-paid.js define([ 'Magento_Checkout/js/view/summary/abstract-total', 'Magento_Checkout/js/model/quote', @@ -11,22 +10,13 @@ define([ defaults: { template: 'Buckaroo_Magento2/checkout/summary/already-paid' }, - - /** - * Get the already paid value - * - * @returns {String} - */ + isDisplayed: function () { + return this.getAlreadyPaidTotal() > 0; + }, getValue: function () { var alreadyPaid = this.getAlreadyPaidTotal(); return this.getFormattedPrice(alreadyPaid); }, - - /** - * Retrieve the already paid total from the totals segments - * - * @returns {Number} - */ getAlreadyPaidTotal: function () { var buckarooFeeSegment = totals.getSegment('buckaroo_already_paid'); try { @@ -45,24 +35,8 @@ define([ return parseFloat(buckarooFeeSegment.value).toFixed(2); }, - - /** - * Format the price - * - * @param {Number} price - * @returns {String} - */ getFormattedPrice: function (price) { return priceUtils.formatPrice(price, quote.getPriceFormat()); - }, - - /** - * Check if the total is displayed - * - * @return {Boolean} - */ - isDisplayed: function () { - return this.getAlreadyPaidTotal() != 0; } }); }); diff --git a/view/frontend/web/js/view/checkout/summary/remaining-amount.js b/view/frontend/web/js/view/checkout/summary/remaining-amount.js index 2dd13914e..9a12ae4f2 100644 --- a/view/frontend/web/js/view/checkout/summary/remaining-amount.js +++ b/view/frontend/web/js/view/checkout/summary/remaining-amount.js @@ -1,4 +1,3 @@ -// app/code/Buckaroo/Magento2/view/frontend/web/js/view/checkout/summary/remaining-amount.js define([ 'Magento_Checkout/js/view/summary/abstract-total', 'Magento_Checkout/js/model/quote', @@ -11,70 +10,28 @@ define([ defaults: { template: 'Buckaroo_Magento2/checkout/summary/remaining-amount' }, - - /** - * Get the remaining amount value - * - * @returns {String} - */ + isDisplayed: function () { + return this.getAlreadyPaidTotal() < 0; + }, getValue: function () { - var remainingAmount = this.getRemainingAmount(); + var remainingAmount = 0; + if (totals.getSegment('remaining_amount')) { + remainingAmount = totals.getSegment('remaining_amount').value; + } return this.getFormattedPrice(remainingAmount); }, - - /** - * Calculate the remaining amount to be paid - * - * @returns {Number} - */ - getRemainingAmount: function () { - var grandTotal = totals.getSegment('grand_total').value || 0; - var alreadyPaid = this.getAlreadyPaidTotal(); - - return grandTotal - alreadyPaid; - }, - - /** - * Retrieve the already paid total from the quote - * - * @returns {Number} - */ getAlreadyPaidTotal: function () { - var buckarooFeeSegment = totals.getSegment('buckaroo_already_paid'); - try { - if (buckarooFeeSegment.title) { - var items = JSON.parse(buckarooFeeSegment.title); - var total = 0; - if ((typeof items === 'object') && (items.length > 0)) { - for (var i = 0; i < items.length; i++) { - total = parseFloat(total) + parseFloat(items[i].serviceamount); - } - return parseFloat(total).toFixed(2); - } - } - } catch (e) { + var remainingAmount = 0; + if (totals.getSegment('buckaroo_already_paid')) { + remainingAmount = totals.getSegment('buckaroo_already_paid').value; } - - return parseFloat(buckarooFeeSegment.value).toFixed(2); + return remainingAmount; + }, + getTitle: function () { + return this.title; }, - - /** - * Format the price - * - * @param {Number} price - * @returns {String} - */ getFormattedPrice: function (price) { return priceUtils.formatPrice(price, quote.getPriceFormat()); - }, - - /** - * Check if the total is displayed - * - * @return {Boolean} - */ - isDisplayed: function () { - return this.getAlreadyPaidTotal() != 0.00; } }); }); diff --git a/view/frontend/web/template/checkout/summary/already-paid.html b/view/frontend/web/template/checkout/summary/already-paid.html index 5afdf3127..41d367b5b 100644 --- a/view/frontend/web/template/checkout/summary/already-paid.html +++ b/view/frontend/web/template/checkout/summary/already-paid.html @@ -2,10 +2,10 @@ - +

- +

diff --git a/view/frontend/web/template/checkout/summary/remaining-amount.html b/view/frontend/web/template/checkout/summary/remaining-amount.html index 40c42bc99..bcba4c746 100644 --- a/view/frontend/web/template/checkout/summary/remaining-amount.html +++ b/view/frontend/web/template/checkout/summary/remaining-amount.html @@ -1,6 +1,5 @@ - - + From a929dae5d13e1e706221ea3cf7ad5b6524ad08bd Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Tue, 15 Oct 2024 09:38:54 +0200 Subject: [PATCH 15/32] remove comments --- Model/Total/Quote/BuckarooAlreadyPay.php | 6 ++---- Model/Total/Quote/BuckarooRemainingAmount.php | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Model/Total/Quote/BuckarooAlreadyPay.php b/Model/Total/Quote/BuckarooAlreadyPay.php index 021697642..9efb45f73 100644 --- a/Model/Total/Quote/BuckarooAlreadyPay.php +++ b/Model/Total/Quote/BuckarooAlreadyPay.php @@ -1,5 +1,4 @@ __('Paid with') . ' ' . $label, - 'amount' => -$giftcard['amount'], // Ensure this is negative + 'amount' => -$giftcard['amount'], 'servicecode' => $giftcard['servicecode'], 'serviceamount' => $giftcard['amount'], 'transaction_id' => $giftcard['transaction_id'], @@ -105,7 +104,6 @@ public function fetch(Quote $quote, Total $total) } } } catch (\Exception $e) { - // Optional: Log the exception if you have a logger // $this->logger->error($e->getMessage()); } } @@ -113,7 +111,7 @@ public function fetch(Quote $quote, Total $total) return [ 'code' => $this->getCode(), 'title' => $customTitle ? __(json_encode($customTitle)) : $this->getLabel(), - 'value' => -$this->groupTransaction->getAlreadyPaid($orderId), // Set as negative + 'value' => -$this->groupTransaction->getAlreadyPaid($orderId), ]; } diff --git a/Model/Total/Quote/BuckarooRemainingAmount.php b/Model/Total/Quote/BuckarooRemainingAmount.php index 19b937ec1..bc6eff67a 100644 --- a/Model/Total/Quote/BuckarooRemainingAmount.php +++ b/Model/Total/Quote/BuckarooRemainingAmount.php @@ -1,4 +1,22 @@ Date: Wed, 16 Oct 2024 14:44:58 +0200 Subject: [PATCH 16/32] I have refactored the implementation of the "Fast Checkout iDEAL" button on the product page. The goal is to replace the previous jQuery-based implementation with Magento's native Knockout.js and UI component system, improving maintainability and future compatibility with Magento upgrades. --- view/frontend/layout/catalog_product_view.xml | 5 +- view/frontend/layout/checkout_cart_index.xml | 3 + .../product/view/ideal-fast-checkout.phtml | 83 ++++++++++--------- .../checkout/cart/ideal-fast-checkout.phtml | 83 ++++++++++--------- view/frontend/web/css/ideal-fast-checkout.css | 17 ++++ .../view/checkout/ideal-fast-checkout/pay.js | 44 ++++++++-- 6 files changed, 149 insertions(+), 86 deletions(-) create mode 100644 view/frontend/web/css/ideal-fast-checkout.css diff --git a/view/frontend/layout/catalog_product_view.xml b/view/frontend/layout/catalog_product_view.xml index 96ba3015a..46239ee9d 100644 --- a/view/frontend/layout/catalog_product_view.xml +++ b/view/frontend/layout/catalog_product_view.xml @@ -18,6 +18,9 @@ * @license https://tldrlegal.com/license/mit-license --> + + + - \ No newline at end of file + diff --git a/view/frontend/layout/checkout_cart_index.xml b/view/frontend/layout/checkout_cart_index.xml index 17a7d2bdb..abf009c79 100644 --- a/view/frontend/layout/checkout_cart_index.xml +++ b/view/frontend/layout/checkout_cart_index.xml @@ -6,6 +6,9 @@ */ --> + + + canShowProductButton()): ?> - - +if ($block->canShowProductButton()): ?> - + diff --git a/view/frontend/templates/checkout/cart/ideal-fast-checkout.phtml b/view/frontend/templates/checkout/cart/ideal-fast-checkout.phtml index ba779e13c..4eb96518f 100644 --- a/view/frontend/templates/checkout/cart/ideal-fast-checkout.phtml +++ b/view/frontend/templates/checkout/cart/ideal-fast-checkout.phtml @@ -1,45 +1,52 @@ canShowCartButton()): ?> - - - - + diff --git a/view/frontend/web/css/ideal-fast-checkout.css b/view/frontend/web/css/ideal-fast-checkout.css new file mode 100644 index 000000000..e107f91ac --- /dev/null +++ b/view/frontend/web/css/ideal-fast-checkout.css @@ -0,0 +1,17 @@ +#fast-checkout-ideal-btn { + height: 45px; + padding: 0; + border: none; + background: none; + display: flex; + align-items: center; + justify-content: center; + margin: 20px 0; +} + +#fast-checkout-ideal-btn img { + max-height: 100%; + max-width: 100%; + display: block; + margin: auto; +} diff --git a/view/frontend/web/js/view/checkout/ideal-fast-checkout/pay.js b/view/frontend/web/js/view/checkout/ideal-fast-checkout/pay.js index 5235ef3d0..f03403f90 100644 --- a/view/frontend/web/js/view/checkout/ideal-fast-checkout/pay.js +++ b/view/frontend/web/js/view/checkout/ideal-fast-checkout/pay.js @@ -1,23 +1,49 @@ define([ - 'jquery', + 'uiComponent', 'mage/url', + 'jquery', 'Magento_Customer/js/customer-data', 'mage/translate', 'mage/storage' -], function ($, urlBuilder, customerData, $t, storage) { +], function (Component, urlBuilder, $, customerData, $t, storage) { 'use strict'; - return { - createQuoteAndPlaceOrder: function (productData) { - this.showLoader(); + return Component.extend({ + page: null, + paymentData: null, + + initialize: function (config) { + this._super(); - this.page = productData.page; - productData.order_data = this.getOrderData(); + this.page = config.page; + this.paymentData = config.paymentData; var customerDataObject = customerData.get('customer'); customerDataObject.subscribe(function (updatedCustomer) { }.bind(this)); + + $(document).on('click', '#fast-checkout-ideal-btn', function() { + this.onCheckout(); + }.bind(this)); + }, + + onCheckout: function () { + var qty = $(".qty").val(); + + var productData = { + qty: qty, + page: this.page, + paymentData: this.paymentData, + order_data: this.getOrderData() + }; + + this.createQuoteAndPlaceOrder(productData); + }, + + createQuoteAndPlaceOrder: function (productData) { + this.showLoader(); + this.processOrderFlow(productData) .then(this.onQuoteCreateSuccess.bind(this, productData)) .catch(this.onQuoteCreateFail.bind(this)); @@ -33,7 +59,7 @@ define([ getOrderData: function () { let form = $("#product_addtocart_form"); - return this.page === 'product' ? form.serialize() : null; + return this.page === "product" ? form.serialize() : null; }, onQuoteCreateSuccess: function (productData, quoteResponse) { @@ -123,5 +149,5 @@ define([ hideLoader: function () { $('body').loader('hide'); } - }; + }); }); From 9256d07b82b2784d84ee308f468fe220a220212f Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Mon, 21 Oct 2024 15:53:06 +0200 Subject: [PATCH 17/32] fix API schema --- Api/Data/QuoteCreateResponseInterface.php | 4 +--- Api/IdealQuoteCreateInterface.php | 5 +---- Api/PayWithGiftcardInterface.php | 5 ++--- Api/PaypalExpressQuoteCreateInterface.php | 3 +-- 4 files changed, 5 insertions(+), 12 deletions(-) diff --git a/Api/Data/QuoteCreateResponseInterface.php b/Api/Data/QuoteCreateResponseInterface.php index c8e06f765..f8bc6cf6d 100644 --- a/Api/Data/QuoteCreateResponseInterface.php +++ b/Api/Data/QuoteCreateResponseInterface.php @@ -19,8 +19,6 @@ */ namespace Buckaroo\Magento2\Api\Data; -use Buckaroo\Magento2\Api\Data\BreakdownItemInterface; - interface QuoteCreateResponseInterface extends BreakdownItemInterface { /** @@ -36,4 +34,4 @@ public function getBreakdown(); * @return string */ public function getCartId(); -} \ No newline at end of file +} diff --git a/Api/IdealQuoteCreateInterface.php b/Api/IdealQuoteCreateInterface.php index e9aa88e57..3bead625c 100644 --- a/Api/IdealQuoteCreateInterface.php +++ b/Api/IdealQuoteCreateInterface.php @@ -21,9 +21,6 @@ namespace Buckaroo\Magento2\Api; -use Buckaroo\Magento2\Api\Data\QuoteCreateResponseInterface; -use Buckaroo\Magento2\Api\Data\Ideal\ShippingAddressRequestInterface; - interface IdealQuoteCreateInterface { /** @@ -31,7 +28,7 @@ interface IdealQuoteCreateInterface * * @param string $page * @param string|null $order_data - * @return QuoteCreateResponseInterface + * @return \Buckaroo\Magento2\Api\Data\QuoteCreateResponseInterface */ public function execute( string $page, diff --git a/Api/PayWithGiftcardInterface.php b/Api/PayWithGiftcardInterface.php index e6de57d84..cc3f9d729 100644 --- a/Api/PayWithGiftcardInterface.php +++ b/Api/PayWithGiftcardInterface.php @@ -23,15 +23,14 @@ use Buckaroo\Magento2\Api\Data\Giftcard\PayRequestInterface; -interface PayWithGiftcardInterface +interface PayWithGiftcardInterface { /** * Rest method for paying with giftcards * * @param string $cartId * @param string $giftcardId - * @param \Buckaroo\Magento2\Api\Data\Giftcard\PayRequestInterface $requestBody - * + * @param \Buckaroo\Magento2\Api\Data\Giftcard\PayRequestInterface $payment * @return \Buckaroo\Magento2\Api\Data\Giftcard\PayResponseInterface */ public function pay(string $cartId, string $giftcardId, PayRequestInterface $payment); diff --git a/Api/PaypalExpressQuoteCreateInterface.php b/Api/PaypalExpressQuoteCreateInterface.php index 74947cd96..053f376e0 100644 --- a/Api/PaypalExpressQuoteCreateInterface.php +++ b/Api/PaypalExpressQuoteCreateInterface.php @@ -22,7 +22,6 @@ namespace Buckaroo\Magento2\Api; use Buckaroo\Magento2\Api\Data\PaypalExpress\ShippingAddressRequestInterface; -use Buckaroo\Magento2\Api\Data\QuoteCreateResponseInterface; interface PaypalExpressQuoteCreateInterface { @@ -32,7 +31,7 @@ interface PaypalExpressQuoteCreateInterface * @param \Buckaroo\Magento2\Api\Data\PaypalExpress\ShippingAddressRequestInterface $shipping_address * @param string $page * @param string|null $order_data - * @return QuoteCreateResponseInterface + * @return \Buckaroo\Magento2\Api\Data\QuoteCreateResponseInterface */ public function execute( ShippingAddressRequestInterface $shipping_address, From 9069e2db0cc1fc93f08011f5c95fee934a6eda82 Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Tue, 22 Oct 2024 13:32:45 +0200 Subject: [PATCH 18/32] update ideal fast checkout email sender --- Controller/Redirect/Process.php | 13 ++++++++----- Model/Push.php | 7 +++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Controller/Redirect/Process.php b/Controller/Redirect/Process.php index 570f78069..a78c6f241 100755 --- a/Controller/Redirect/Process.php +++ b/Controller/Redirect/Process.php @@ -330,13 +330,16 @@ private function redirectProcess() { || $paymentMethod->getConfigData('order_email', $store) === "1" ) ) { - if (!($this->hasPostData('add_initiated_by_magento', 1) && - $this->hasPostData('brq_primary_service', 'KlarnaKp') && - $this->hasPostData('add_service_action_from_magento', 'reserve') && - !empty($this->response['brq_service_klarnakp_reservationnumber']) + if (!( + ($this->hasPostData('add_initiated_by_magento', 1) && + $this->hasPostData('brq_primary_service', 'KlarnaKp') && + $this->hasPostData('add_service_action_from_magento', 'reserve') && + !empty($this->response['brq_service_klarnakp_reservationnumber'])) + || + $this->hasPostData('add_service_action_from_magento', 'payfastcheckout') )) { if ($statusCode == $this->helper->getStatusCode('BUCKAROO_MAGENTO2_STATUSCODE_SUCCESS')) { - $this->logger->addDebug(__METHOD__ . '|sendemail|'); + $this->logger->addDebug(__METHOD__ . '|sendemail| |1|'); $this->orderSender->send($this->order, true); } } diff --git a/Model/Push.php b/Model/Push.php index 6c3fff0bd..140777368 100644 --- a/Model/Push.php +++ b/Model/Push.php @@ -259,10 +259,6 @@ public function receivePush() try { $response = $this->pushProcess(); - if ($this->isFastCheckout()) { - $this->updateOrderAddressesIfFastCheckout(); - } - return $response; } catch (\Throwable $e) { $this->logging->addDebug(__METHOD__ . '|Exception|' . $e->getMessage()); @@ -597,6 +593,9 @@ private function pushProcess() ); } + if ($this->isFastCheckout()) { + $this->updateOrderAddressesIfFastCheckout(); + } if (!$this->isGroupTransactionInfo()) { $this->setTransactionKey(); From 2ee4bc5097424f2da34db025b38950065a97e0e8 Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Tue, 22 Oct 2024 17:29:09 +0200 Subject: [PATCH 19/32] fix ideal fastcheckout shippingcost --- Model/Method/Ideal.php | 23 +++++++++++++++++++ .../view/checkout/ideal-fast-checkout/pay.js | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Model/Method/Ideal.php b/Model/Method/Ideal.php index 2402a8f30..bc10eb8d3 100644 --- a/Model/Method/Ideal.php +++ b/Model/Method/Ideal.php @@ -53,6 +53,14 @@ public function assignData(\Magento\Framework\DataObject $data) $this->getInfoInstance()->setAdditionalInformation('issuer', $data['additional_data']['issuer']); } + $payment = $this->getInfoInstance(); + $quote = $payment->getQuote(); + + if ($quote) { + $shippingCost = $quote->getShippingAddress()->getShippingAmount(); + $this->getInfoInstance()->setAdditionalInformation('shippingCost', $shippingCost); + } + return $this; } @@ -67,6 +75,7 @@ public function getOrderTransactionBuilder($payment) 'Name' => 'ideal', 'Action' => $this->getPayRemainder($payment, $transactionBuilder,'PayFastCheckout'), 'Version' => 2, + 'RequestParameter' => $this->getIdealFastCheckoutOrderRequestParameters($payment), ]; /** @@ -110,6 +119,20 @@ private function getOrderRequestParameters($payment): array return $parameters; } + private function getIdealFastCheckoutOrderRequestParameters($payment): array + { + $parameters = []; + + if ($this->isFastCheckout($payment) && $payment->getAdditionalInformation('shippingCost')) { + $parameters = [[ + '_' => $payment->getAdditionalInformation('shippingCost'), + 'Name' => 'shippingCost', + ]]; + } + + return $parameters; + } + protected function getRefundTransactionBuilderVersion() { return null; diff --git a/view/frontend/web/js/view/checkout/ideal-fast-checkout/pay.js b/view/frontend/web/js/view/checkout/ideal-fast-checkout/pay.js index f03403f90..272012621 100644 --- a/view/frontend/web/js/view/checkout/ideal-fast-checkout/pay.js +++ b/view/frontend/web/js/view/checkout/ideal-fast-checkout/pay.js @@ -29,7 +29,7 @@ define([ }, onCheckout: function () { - var qty = $(".qty").val(); + var qty = $("#qty").val(); var productData = { qty: qty, From c9c0a6fc6c324fc7b801dbbbbb293d6b7c61f2cb Mon Sep 17 00:00:00 2001 From: Sander Date: Wed, 23 Oct 2024 13:15:28 +0200 Subject: [PATCH 20/32] BP-3847-Tax percentage not send in request for Riverty/Klarna/Billink --- Model/Method/AbstractMethod.php | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Model/Method/AbstractMethod.php b/Model/Method/AbstractMethod.php index 95b207980..5427c5bca 100644 --- a/Model/Method/AbstractMethod.php +++ b/Model/Method/AbstractMethod.php @@ -2124,9 +2124,20 @@ public function getArticleArrayLine( protected function getTaxCategory($order) { - $request = $this->taxCalculation->getRateRequest(null, null, null, $order->getStore()); - $taxClassId = $this->configProviderBuckarooFee->getTaxClass($order->getStore()); - $percent = $this->taxCalculation->getRate($request->setProductClassId($taxClassId)); + $shippingAddress = $order->getShippingAddress(); + $billingAddress = $order->getBillingAddress(); + $customerTaxClassId = $order->getCustomerTaxClassId(); + $storeId = $order->getStoreId(); + $taxClassId = $this->configProviderBuckarooFee->getTaxClass(); + + $request = $this->taxCalculation->getRateRequest( + $shippingAddress, + $billingAddress, + $customerTaxClassId, + $storeId + ); + $request->setProductClassId($taxClassId); + $percent = $this->taxCalculation->getRate($request); return $percent; } @@ -2725,7 +2736,7 @@ public function checkTotalGrossAmount($requestData, $payment) } //Add diff line - if (!$this->helper->areEqualAmounts($order->getGrandTotal(), $itemsTotalAmount) && !$this->payRemainder) { + if (abs($order->getGrandTotal() - $itemsTotalAmount) > 0.01) { $diff = $order->getGrandTotal() - $itemsTotalAmount; $diffLine = $this->getDiffLine($count, $diff); $requestData = array_merge($requestData, $diffLine); From 9deeef7248428faa29e81e6dcc78dc545ef4436b Mon Sep 17 00:00:00 2001 From: Sander Date: Wed, 23 Oct 2024 13:19:56 +0200 Subject: [PATCH 21/32] BP-3847-Tax percentage not send in request for Riverty/Klarna/Billink --- Model/Method/AbstractMethod.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Model/Method/AbstractMethod.php b/Model/Method/AbstractMethod.php index 5427c5bca..641de97ae 100644 --- a/Model/Method/AbstractMethod.php +++ b/Model/Method/AbstractMethod.php @@ -2736,7 +2736,7 @@ public function checkTotalGrossAmount($requestData, $payment) } //Add diff line - if (abs($order->getGrandTotal() - $itemsTotalAmount) > 0.01) { + if (abs($order->getGrandTotal() - $itemsTotalAmount) > 0.01 && !$this->payRemainder) { $diff = $order->getGrandTotal() - $itemsTotalAmount; $diffLine = $this->getDiffLine($count, $diff); $requestData = array_merge($requestData, $diffLine); From 475198b3f323a61df13b0cb9632fa9a62ecd3d82 Mon Sep 17 00:00:00 2001 From: Sander Date: Wed, 23 Oct 2024 16:24:06 +0200 Subject: [PATCH 22/32] BP-3847-Tax percentage not send in request for Riverty/Klarna/Billink --- Helper/Data.php | 2 +- Model/Method/AbstractMethod.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Helper/Data.php b/Helper/Data.php index ad16cdd32..9683068b2 100644 --- a/Helper/Data.php +++ b/Helper/Data.php @@ -384,7 +384,7 @@ public function areEqualAmounts($amount1, $amount2) if ($amount2 == 0) { return $amount1 == $amount2; } else { - return abs((floatval($amount1) - floatval($amount2)) / floatval($amount2)) < 0.00001; + return abs((floatval($amount1) - floatval($amount2)) / floatval($amount2)) <= 0.01; } } diff --git a/Model/Method/AbstractMethod.php b/Model/Method/AbstractMethod.php index 641de97ae..01d5633b3 100644 --- a/Model/Method/AbstractMethod.php +++ b/Model/Method/AbstractMethod.php @@ -2736,7 +2736,7 @@ public function checkTotalGrossAmount($requestData, $payment) } //Add diff line - if (abs($order->getGrandTotal() - $itemsTotalAmount) > 0.01 && !$this->payRemainder) { + if (!$this->helper->areEqualAmounts($order->getGrandTotal(), $itemsTotalAmount) && !$this->payRemainder) { $diff = $order->getGrandTotal() - $itemsTotalAmount; $diffLine = $this->getDiffLine($count, $diff); $requestData = array_merge($requestData, $diffLine); From a4d181e51f107d64ad2b8077f99c94d2d822836a Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Thu, 24 Oct 2024 09:01:30 +0200 Subject: [PATCH 23/32] add csp_whitelist for applePay and Payconiq --- etc/csp_whitelist.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/etc/csp_whitelist.xml b/etc/csp_whitelist.xml index 35c36e996..8aadc2928 100644 --- a/etc/csp_whitelist.xml +++ b/etc/csp_whitelist.xml @@ -18,15 +18,18 @@ list.xsd"> + https://portal.payconiq.com https://static.buckaroo.nl + wss://websocketservice-externalapi.prod.buckaroo.io https://static.buckaroo.nl wss://websockets.buckaroo.io/ https://checkout.buckaroo.nl https://testcheckout.buckaroo.nl + https://applepay.buckaroo.io From a8241b2f7ae7258a4732e3d9540fad9efd2e4d83 Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Thu, 24 Oct 2024 16:27:07 +0200 Subject: [PATCH 24/32] update settings for fast payments --- Block/Catalog/Product/View/Applepay.php | 42 +++++-------------- .../Product/View/IdealFastCheckout.php | 42 +++---------------- Block/Catalog/Product/View/PaypalExpress.php | 24 +++-------- Model/ConfigProvider/Method/Applepay.php | 4 ++ Model/ConfigProvider/Method/Ideal.php | 5 +++ Model/ConfigProvider/Method/Paypal.php | 6 ++- .../catalog/product/view/applepay.phtml | 4 +- .../product/view/ideal-fast-checkout.phtml | 2 +- .../catalog/product/view/paypal-express.phtml | 4 +- .../templates/checkout/cart/applepay.phtml | 2 +- .../checkout/cart/ideal-fast-checkout.phtml | 2 +- .../checkout/cart/paypal-express.phtml | 2 +- 12 files changed, 42 insertions(+), 97 deletions(-) diff --git a/Block/Catalog/Product/View/Applepay.php b/Block/Catalog/Product/View/Applepay.php index b56485b71..9870b9d79 100644 --- a/Block/Catalog/Product/View/Applepay.php +++ b/Block/Catalog/Product/View/Applepay.php @@ -60,41 +60,23 @@ public function __construct( /** * @return bool */ - public function canShowButton() + public function canShowButton($page) { - $result = false; - - if ($this->cart->getSummaryQty() - && - ($this->applepayConfigProvider->getActive() != 0) - && - ($this->applepayConfigProvider->getAvailableButtons()) - && - (in_array('Cart', $this->applepayConfigProvider->getAvailableButtons())) - ) { - $result = true; - } - - return $result; + return $this->cart->getSummaryQty() && + $this->isModuleActive() && + in_array($page, $this->applepayConfigProvider->getAvailableButtons()) && + $this->applepayConfigProvider->isApplePayEnabled($this->_storeManager->getStore()); } /** + * Check if Buckaroo module is active + * * @return bool */ - public function canShowProductButton() + public function isModuleActive() { - $result = false; - - if (($this->applepayConfigProvider->getActive() != 0) - && - ($this->applepayConfigProvider->getAvailableButtons()) - && - (in_array('Product', $this->applepayConfigProvider->getAvailableButtons())) - ) { - $result = true; - } - - return $result; + $status = $this->applepayConfigProvider->getActive(); + return $status == 1 || $status == 2; } /** @@ -102,10 +84,6 @@ public function canShowProductButton() */ public function getCheckoutConfig() { - if (!$this->canShowButton()) { - return null; - } - return json_encode($this->compositeConfigProvider->getConfig(), JSON_HEX_TAG); } diff --git a/Block/Catalog/Product/View/IdealFastCheckout.php b/Block/Catalog/Product/View/IdealFastCheckout.php index b2e87188b..5647009e3 100644 --- a/Block/Catalog/Product/View/IdealFastCheckout.php +++ b/Block/Catalog/Product/View/IdealFastCheckout.php @@ -69,31 +69,12 @@ public function __construct( * * @return bool */ - public function canShowProductButton() + public function canShowButton($page) { - if ($this->isModuleActive() && $this->isButtonEnabled()){ - return $this->idealConfig->canShowButtonForPage( - 'Product', - $this->_storeManager->getStore() - ); - } - return false; - } - - /** - * Determine if the cart button can be shown - * - * @return bool - */ - public function canShowCartButton() - { - if ($this->isModuleActive() && $this->isButtonEnabled()){ - return $this->idealConfig->canShowButtonForPage( - 'Cart', - $this->_storeManager->getStore() - ); - } - return false; + return ($this->isModuleActive() && + $this->idealConfig->isFastCheckoutEnabled($this->_storeManager->getStore()) && + $this->idealConfig->canShowButtonForPage($page, $this->_storeManager->getStore()) && + $this->idealConfig->isIDealEnabled($this->_storeManager->getStore())); } /** @@ -107,19 +88,6 @@ public function isModuleActive() return $status == 1 || $status == 2; } - /** - * Check if ideal fast checkout button is enabled - * - * @return mixed - */ - public function isButtonEnabled() - { - return $this->idealConfig->isFastCheckoutEnabled( - $this->_storeManager->getStore() - ); - } - - /** * Get logo based on chosen color setting * diff --git a/Block/Catalog/Product/View/PaypalExpress.php b/Block/Catalog/Product/View/PaypalExpress.php index afb4540bd..ea1dfc567 100644 --- a/Block/Catalog/Product/View/PaypalExpress.php +++ b/Block/Catalog/Product/View/PaypalExpress.php @@ -56,26 +56,11 @@ public function __construct( $this->encryptor = $encryptor; $this->paypalConfig = $paypalConfig; } - public function canShowProductButton() + public function canShowButton($page) { - if ($this->isModuleActive()){ - return $this->paypalConfig->canShowButtonForPage( - 'Product', - $this->_storeManager->getStore() - ); - } - return false; - } - - public function canShowCartButton() - { - if ($this->isModuleActive()){ - return $this->paypalConfig->canShowButtonForPage( - 'Cart', - $this->_storeManager->getStore() - ); - } - return false; + return $this->isModuleActive() && + $this->paypalConfig->canShowButtonForPage($page, $this->_storeManager->getStore()) && + $this->paypalConfig->isPayPalEnabled($this->_storeManager->getStore()); } /** @@ -88,6 +73,7 @@ public function isModuleActive() $status = $this->configProviderAccount->getActive(); return $status == 1 || $status == 2; } + /** * Get all data required * diff --git a/Model/ConfigProvider/Method/Applepay.php b/Model/ConfigProvider/Method/Applepay.php index 6cfe184ae..b5b686a5a 100644 --- a/Model/ConfigProvider/Method/Applepay.php +++ b/Model/ConfigProvider/Method/Applepay.php @@ -170,4 +170,8 @@ public function getBaseAllowedCurrencies() ]; } + public function isApplePayEnabled($store = null) + { + return $this->getConfigFromXpath(self::XPATH_APPLEPAY_ACTIVE, $store); + } } diff --git a/Model/ConfigProvider/Method/Ideal.php b/Model/ConfigProvider/Method/Ideal.php index e7dab3100..d32c8d64d 100644 --- a/Model/ConfigProvider/Method/Ideal.php +++ b/Model/ConfigProvider/Method/Ideal.php @@ -173,6 +173,11 @@ public function isFastCheckoutEnabled($store = null) return $this->getConfigFromXpath(self::XPATH_IDEAL_FAST_CHECKOUT_ENABLE, $store); } + public function isIDealEnabled($store = null) + { + return $this->getConfigFromXpath(self::XPATH_IDEAL_ACTIVE, $store); + } + public function getLogoColor($store = null) { return $this->getConfigFromXpath(self::XPATH_IDEAL_FAST_CHECKOUT_LOGO, $store); diff --git a/Model/ConfigProvider/Method/Paypal.php b/Model/ConfigProvider/Method/Paypal.php index 01b399c49..f063ae685 100644 --- a/Model/ConfigProvider/Method/Paypal.php +++ b/Model/ConfigProvider/Method/Paypal.php @@ -108,7 +108,7 @@ public function getExpressMerchantId($store = null) return $this->getConfigFromXpath(self::XPATH_PAYPAL_EXPRESS_MERCHANT_ID, $store); } /** - * Test if express button is enabled for the $page + * Test if express button is enabled for the $page * * @param string $page * @@ -124,4 +124,8 @@ public function canShowButtonForPage($page, $store = null) $pages = explode(",", $buttons); return in_array($page, $pages); } + public function isPayPalEnabled($store = null) + { + return $this->getConfigFromXpath(self::XPATH_PAYPAL_ACTIVE, $store); + } } diff --git a/view/frontend/templates/catalog/product/view/applepay.phtml b/view/frontend/templates/catalog/product/view/applepay.phtml index b8a329eef..8be785333 100644 --- a/view/frontend/templates/catalog/product/view/applepay.phtml +++ b/view/frontend/templates/catalog/product/view/applepay.phtml @@ -18,7 +18,7 @@ * @license https://tldrlegal.com/license/mit-license */ ?> -canShowProductButton()): ?> +canShowButton('Product')): ?>
@@ -47,4 +47,4 @@ }
- \ No newline at end of file + diff --git a/view/frontend/templates/catalog/product/view/ideal-fast-checkout.phtml b/view/frontend/templates/catalog/product/view/ideal-fast-checkout.phtml index fb83b3c14..a4081c320 100644 --- a/view/frontend/templates/catalog/product/view/ideal-fast-checkout.phtml +++ b/view/frontend/templates/catalog/product/view/ideal-fast-checkout.phtml @@ -19,7 +19,7 @@ * @license https://tldrlegal.com/license/mit-license */ -if ($block->canShowProductButton()): ?> +if ($block->canShowButton('Product')): ?>