From 4292048e4d6c771bdd88da357d6f73ff697cea6c Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Thu, 12 Dec 2024 10:43:22 +0100 Subject: [PATCH 1/2] update buckaroofee --- Helper/PaymentFee.php | 275 +++++++++++------- Model/ConfigProvider/BuckarooFee.php | 4 +- Model/Method/AbstractMethod.php | 2 +- Model/Method/Afterpay.php | 2 +- Model/Total/Quote/Tax/BuckarooFee.php | 38 ++- Service/Sales/Pdf/BuckarooFee.php | 11 +- Service/Tax/TaxCalculate.php | 31 +- .../Model/Total/Quote/BuckarooFeeTest.php | 12 +- 8 files changed, 223 insertions(+), 152 deletions(-) diff --git a/Helper/PaymentFee.php b/Helper/PaymentFee.php index e6c2a35bf..a72bd5631 100644 --- a/Helper/PaymentFee.php +++ b/Helper/PaymentFee.php @@ -20,48 +20,60 @@ namespace Buckaroo\Magento2\Helper; -use \Buckaroo\Magento2\Model\Config\Source\Display\Type as DisplayType; - +use Buckaroo\Magento2\Model\Config\Source\Display\Type as DisplayType; use Buckaroo\Magento2\Helper\PaymentGroupTransaction; - -class PaymentFee extends \Magento\Framework\App\Helper\AbstractHelper +use Magento\Framework\App\Helper\AbstractHelper; +use Magento\Framework\App\Helper\Context; +use Buckaroo\Magento2\Model\ConfigProvider\Account as AccountConfigProvider; +use Buckaroo\Magento2\Model\ConfigProvider\BuckarooFee as BuckarooFeeConfigProvider; +use Buckaroo\Magento2\Model\ConfigProvider\Method\Factory as MethodConfigProviderFactory; +use Buckaroo\Magento2\Model\ResourceModel\Giftcard\Collection as GiftcardCollection; +use Magento\Framework\DataObject; +use Magento\Sales\Model\Order; +use Magento\Sales\Model\Order\Invoice; +use Magento\Sales\Model\Order\Creditmemo; +use Magento\Store\Api\Data\StoreInterface; + +class PaymentFee extends AbstractHelper { - /** @var \Buckaroo\Magento2\Model\ConfigProvider\Account */ + /** @var AccountConfigProvider */ protected $configProviderAccount; - /** @var \Buckaroo\Magento2\Model\ConfigProvider\BuckarooFee */ + /** @var BuckarooFeeConfigProvider */ protected $configProviderBuckarooFee; - /** @var \Buckaroo\Magento2\Model\ConfigProvider\Method\Factory */ + /** @var MethodConfigProviderFactory */ protected $configProviderMethodFactory; + /** @var bool|float */ public $buckarooFee = false; + /** @var bool|float */ public $buckarooFeeTax = false; + /** @var PaymentGroupTransaction */ protected $groupTransaction; - /** - * @var \Buckaroo\Magento2\Model\ResourceModel\Giftcard\Collection - */ + /** @var GiftcardCollection */ protected $giftcardCollection; /** - * @param \Magento\Framework\App\Helper\Context $context - * @param \Buckaroo\Magento2\Model\ConfigProvider\Account $configProviderAccount - * @param \Buckaroo\Magento2\Model\ConfigProvider\BuckarooFee $configProviderBuckarooFee - * @param \Buckaroo\Magento2\Model\ConfigProvider\Method\Factory $configProviderMethodFactory + * @param Context $context + * @param AccountConfigProvider $configProviderAccount + * @param BuckarooFeeConfigProvider $configProviderBuckarooFee + * @param MethodConfigProviderFactory $configProviderMethodFactory + * @param PaymentGroupTransaction $groupTransaction + * @param GiftcardCollection $giftcardCollection */ public function __construct( - \Magento\Framework\App\Helper\Context $context, - \Buckaroo\Magento2\Model\ConfigProvider\Account $configProviderAccount, - \Buckaroo\Magento2\Model\ConfigProvider\BuckarooFee $configProviderBuckarooFee, - \Buckaroo\Magento2\Model\ConfigProvider\Method\Factory $configProviderMethodFactory, + Context $context, + AccountConfigProvider $configProviderAccount, + BuckarooFeeConfigProvider $configProviderBuckarooFee, + MethodConfigProviderFactory $configProviderMethodFactory, PaymentGroupTransaction $groupTransaction, - \Buckaroo\Magento2\Model\ResourceModel\Giftcard\Collection $giftcardCollection + GiftcardCollection $giftcardCollection ) { parent::__construct($context); - $this->configProviderAccount = $configProviderAccount; $this->configProviderBuckarooFee = $configProviderBuckarooFee; $this->configProviderMethodFactory = $configProviderMethodFactory; @@ -70,26 +82,27 @@ public function __construct( } /** - * Return totals of data object + * Retrieve totals array based on the data object. * - * @param \Magento\Framework\DataObject $dataObject + * @param DataObject $dataObject * @return array */ public function getTotals($dataObject) { $totals = []; + $store = $this->getStoreFromDataObject($dataObject); - $taxClassId = $this->configProviderAccount->getBuckarooFeeTaxClass(); - $label = $this->getBuckarooPaymentFeeLabel($dataObject); + $taxClassId = $this->configProviderBuckarooFee->getBuckarooFeeTaxClass($store); + $isIncludingTax = $this->isFeeDisplayTypeIncludingTax($taxClassId); + $label = $this->getBuckarooPaymentFeeLabel($dataObject); $fee = $dataObject->getBuckarooFee(); $feeTaxAmount = $dataObject->getBuckarooFeeTaxAmount(); $baseFee = $dataObject->getBaseBuckarooFee(); $baseFeeTaxAmount = $dataObject->getBuckarooFeeBaseTaxAmount(); - // Check the setting to determine if the fee should include tax - if ($taxClassId && $this->buckarooPaymentCalculationInclTax()) { - // Add the fee with tax included + // Add the fee total line depending on the display type + if ($isIncludingTax) { $this->addTotalToTotals( $totals, 'buckaroo_fee_incl', @@ -98,7 +111,6 @@ public function getTotals($dataObject) $label . __(' (Incl. Tax)') ); } else { - // Add the fee without tax $this->addTotalToTotals( $totals, 'buckaroo_fee', @@ -112,22 +124,55 @@ public function getTotals($dataObject) $this->buckarooFee = $fee; $this->buckarooFeeTax = $feeTaxAmount; + return $totals; } - public function buckarooPaymentCalculationInclTax($store = null) + /** + * Extract the store from the data object. + * + * @param DataObject $dataObject + * @return StoreInterface|null + */ + protected function getStoreFromDataObject($dataObject) { - $configValue = $this->configProviderBuckarooFee->getPaymentFeeTax($store); + if ($dataObject instanceof Order) { + return $dataObject->getStore(); + } elseif ($dataObject instanceof Invoice || $dataObject instanceof Creditmemo) { + return $dataObject->getOrder()->getStore(); + } - return $configValue == DisplayType::DISPLAY_TYPE_INCLUDING_TAX; + return null; } - public function addAlreadyPayedTotals($dataObject, &$totals) + + /** + * Determine if the fee display type is set to "Including Tax". + * + * @param mixed $displayType + * @return bool + */ + protected function isFeeDisplayTypeIncludingTax($displayType) { - $order_id = $this->getOrderIncrementId($dataObject); - $alreadyPayed = $this->groupTransaction->getAlreadyPaid($order_id); + return (int)$displayType === DisplayType::DISPLAY_TYPE_INCLUDING_TAX; + } - if (!$dataObject instanceof \Magento\Sales\Model\Order\Creditmemo && $alreadyPayed > 0) { + /** + * Add "already paid" totals for giftcards or vouchers if applicable. + * + * @param DataObject $dataObject + * @param array &$totals + * @return void + */ + public function addAlreadyPayedTotals($dataObject, array &$totals) + { + $orderId = $this->getOrderIncrementId($dataObject); + $alreadyPayed = $this->groupTransaction->getAlreadyPaid($orderId); + + // For orders (not creditmemos), if there's an already paid amount, adjust totals accordingly + if (!$dataObject instanceof Creditmemo && $alreadyPayed > 0) { + // Remove the fee line if previously added unset($totals['buckaroo_fee']); + $this->addTotalToTotals( $totals, 'buckaroo_already_paid', @@ -138,10 +183,10 @@ public function addAlreadyPayedTotals($dataObject, &$totals) return; } - if ($order_id !== null && $alreadyPayed > 0) { - + // Handling creditmemo cases + if ($orderId !== null && $alreadyPayed > 0) { $requestParams = $this->_request->getParams(); - $items = $this->groupTransaction->getGroupTransactionItems($order_id); + $items = $this->groupTransaction->getGroupTransactionItems($orderId); $giftcards = []; if (isset($requestParams['creditmemo']['buckaroo_already_paid'])) { @@ -150,7 +195,8 @@ public function addAlreadyPayedTotals($dataObject, &$totals) $giftcards[$transaction[1]] = $value; } } - foreach ($items as $key => $giftcard) { + + foreach ($items as $giftcard) { $foundGiftcard = $this->giftcardCollection->getItemByColumnValue( 'servicecode', $giftcard['servicecode'] @@ -161,32 +207,36 @@ public function addAlreadyPayedTotals($dataObject, &$totals) $label = __('Paid with ' . $foundGiftcard['label']); } - $refundedAlreadyPaidSaved = $giftcard->getRefundedAmount() ?? 0; - $amountValue = $giftcard['amount']; - $amountBaseValue = $giftcard['amount']; + $refundedAlreadyPaidSaved = $giftcard->getRefundedAmount() ?? 0.0; + $amountValue = (float)$giftcard['amount']; + $amountBaseValue = $amountValue; + // Handle partially refundable giftcards if (!empty($foundGiftcard['is_partial_refundable'])) { - $residual = floatval($giftcard['amount']) - floatval($refundedAlreadyPaidSaved); + $residual = $amountValue - (float)$refundedAlreadyPaidSaved; + if ( - array_key_exists($foundGiftcard['servicecode'], $giftcards) - && floatval($giftcards[$foundGiftcard['servicecode']]) <= $residual + array_key_exists($foundGiftcard['servicecode'], $giftcards) && + (float)$giftcards[$foundGiftcard['servicecode']] <= $residual ) { - $amountValue = floatval($giftcards[$foundGiftcard['servicecode']]); - $amountBaseValue = floatval($giftcards[$foundGiftcard['servicecode']]); + $amountValue = (float)$giftcards[$foundGiftcard['servicecode']]; + $amountBaseValue = $amountValue; } else { - $amountBaseValue = $residual; $amountValue = $residual; + $amountBaseValue = $residual; } } else { - if ((!empty(floatval($refundedAlreadyPaidSaved)) - && floatval($refundedAlreadyPaidSaved) === floatval($amountValue))) { + // Non-partially refundable logic + if ((float)$refundedAlreadyPaidSaved === $amountValue) { + $amountValue = 0; $amountBaseValue = 0; + } elseif ( + is_array($foundGiftcard) && + array_key_exists($foundGiftcard['servicecode'], $giftcards) && + empty((float)$giftcards[$foundGiftcard['servicecode']]) + ) { $amountValue = 0; - } elseif (is_array($foundGiftcard) && array_key_exists($foundGiftcard['servicecode'], $giftcards)) { - if (empty(floatval($giftcards[$foundGiftcard['servicecode']]))) { - $amountBaseValue = 0; - $amountValue = 0; - } + $amountBaseValue = 0; } } @@ -204,26 +254,25 @@ public function addAlreadyPayedTotals($dataObject, &$totals) } /** - * Get order increment id from data object + * Get order increment ID from a data object (Order/Invoice/Creditmemo). * * @param mixed $dataObject - * * @return string|null */ public function getOrderIncrementId($dataObject) { - if ($dataObject instanceof \Magento\Sales\Model\Order) { + if ($dataObject instanceof Order) { return $dataObject->getIncrementId(); } - if ( - $dataObject instanceof \Magento\Sales\Model\Order\Invoice - || $dataObject instanceof \Magento\Sales\Model\Order\Creditmemo - ) { + if ($dataObject instanceof Invoice || $dataObject instanceof Creditmemo) { return $dataObject->getOrder()->getIncrementId(); } + return null; } /** + * Get the Buckaroo fee amount. + * * @return mixed */ public function getBuckarooFee() @@ -232,6 +281,8 @@ public function getBuckarooFee() } /** + * Get the Buckaroo fee tax amount. + * * @return mixed */ public function getBuckarooFeeTax() @@ -240,48 +291,24 @@ public function getBuckarooFeeTax() } /** - * Return the correct label for the payment method - * - * @param $dataObject + * Retrieve the correct label for the Buckaroo payment fee. * + * @param mixed $dataObject * @return string */ public function getBuckarooPaymentFeeLabel($dataObject) { - $method = false; + $method = $this->extractPaymentMethodFromDataObject($dataObject); $label = false; - /** - * Parse data object for payment method - */ - if ($dataObject instanceof \Magento\Sales\Model\Order) { - $method = $dataObject->getPayment()->getMethod(); - } elseif ( - $dataObject instanceof \Magento\Sales\Model\Order\Invoice - || $dataObject instanceof \Magento\Sales\Model\Order\Creditmemo - ) { - $method = $dataObject->getOrder()->getPayment()->getMethod(); - } elseif (is_string($dataObject)) { - $method = $dataObject; - } - - /** - * If a method is found, and the method has a config provider, try to get the label from config - */ if ($method && $this->configProviderMethodFactory->has($method)) { $label = $this->configProviderMethodFactory->get($method)->getPaymentFeeLabel(); } - /** - * If no label is set yet, get the default configurable label - */ if (!$label) { $label = $this->configProviderAccount->getPaymentFeeLabel(); } - /** - * If no label is set yet, return a default label - */ if (!$label) { $label = __('Buckaroo Fee'); } @@ -290,41 +317,67 @@ public function getBuckarooPaymentFeeLabel($dataObject) } /** - * Add total into array totals + * Extract the payment method code from order, invoice, creditmemo, or direct string. * - * @param array &$totals - * @param string $code - * @param float $value - * @param float $baseValue - * @param string $label + * @param mixed $dataObject + * @return string|false + */ + protected function extractPaymentMethodFromDataObject($dataObject) + { + if ($dataObject instanceof Order) { + return $dataObject->getPayment()->getMethod(); + } elseif ($dataObject instanceof Invoice || $dataObject instanceof Creditmemo) { + return $dataObject->getOrder()->getPayment()->getMethod(); + } elseif (is_string($dataObject)) { + return $dataObject; + } + + return false; + } + + /** + * Add a total entry into the provided totals array. + * + * @param array &$totals + * @param string $code + * @param float $value + * @param float $baseValue + * @param string $label + * @param string $blockName + * @param string $transactionId + * @param array $extraInfo * @return void */ protected function addTotalToTotals( - &$totals, - $code, - $value, - $baseValue, - $label, - $block_name = false, - $transaction_id = false, - $extra_info = [] + array &$totals, + $code, + $value, + $baseValue, + $label, + $blockName = false, + $transactionId = false, + array $extraInfo = [] ) { + // Only add totals if values are non-zero if ($value == 0 && $baseValue == 0) { return; } + $total = [ - 'code' => $code, - 'value' => $value, + 'code' => $code, + 'value' => $value, 'base_value' => $baseValue, - 'label' => $label, - 'extra_info' => $extra_info + 'label' => $label, + 'extra_info' => $extraInfo ]; - if ($block_name) { - $total['block_name'] = $block_name; + + if ($blockName) { + $total['block_name'] = $blockName; } - if ($transaction_id) { - $total['transaction_id'] = $transaction_id; + if ($transactionId) { + $total['transaction_id'] = $transactionId; } + $totals[] = $total; } } diff --git a/Model/ConfigProvider/BuckarooFee.php b/Model/ConfigProvider/BuckarooFee.php index 5411167a3..1c88521cb 100644 --- a/Model/ConfigProvider/BuckarooFee.php +++ b/Model/ConfigProvider/BuckarooFee.php @@ -31,7 +31,7 @@ class BuckarooFee extends AbstractConfigProvider /** * Buckaroo fee tax class */ - const XPATH_BUCKAROOFEE_TAX_CLASS = 'tax/classes/buckaroo_fee_tax_class'; + const XPATH_ACCOUNT_BUCKAROO_FEE_TAX_CLASS = 'buckaroo_magento2/account/buckaroo_fee_tax_class'; /** * Retrieve the tax class for Buckaroo fee @@ -41,7 +41,7 @@ class BuckarooFee extends AbstractConfigProvider */ public function getBuckarooFeeTaxClass($store = null) { - return $this->scopeConfig->getValue(self::XPATH_BUCKAROOFEE_TAX_CLASS, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store); + return $this->scopeConfig->getValue(self::XPATH_ACCOUNT_BUCKAROO_FEE_TAX_CLASS, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store); } /** diff --git a/Model/Method/AbstractMethod.php b/Model/Method/AbstractMethod.php index 1f3a5f2ec..6cce2e77e 100644 --- a/Model/Method/AbstractMethod.php +++ b/Model/Method/AbstractMethod.php @@ -2158,7 +2158,7 @@ protected function getTaxCategory($order) $billingAddress = $order->getBillingAddress(); $customerTaxClassId = $order->getCustomerTaxClassId(); $storeId = $order->getStoreId(); - $taxClassId = $this->configProviderBuckarooFee->getTaxClass(); + $taxClassId = $this->configProviderBuckarooFee->getBuckarooFeeTaxClass($order->getStore()); $request = $this->taxCalculation->getRateRequest( $shippingAddress, diff --git a/Model/Method/Afterpay.php b/Model/Method/Afterpay.php index 5c1b856a0..f48b40b6f 100644 --- a/Model/Method/Afterpay.php +++ b/Model/Method/Afterpay.php @@ -771,7 +771,7 @@ public function getArticleArrayLine( protected function getTaxCategory($order) { $storeId = (int) $order->getStoreId(); - $taxClassId = $this->configProviderBuckarooFee->getTaxClass($storeId); + $taxClassId = $this->configProviderBuckarooFee->getBuckarooFeeTaxClass($order->getStore()); $taxCategory = 4; diff --git a/Model/Total/Quote/Tax/BuckarooFee.php b/Model/Total/Quote/Tax/BuckarooFee.php index f16b6ecba..b50c6f350 100755 --- a/Model/Total/Quote/Tax/BuckarooFee.php +++ b/Model/Total/Quote/Tax/BuckarooFee.php @@ -20,7 +20,6 @@ namespace Buckaroo\Magento2\Model\Total\Quote\Tax; -use Buckaroo\Magento2\Model\ConfigProvider\Account as ConfigProviderAccount; use Buckaroo\Magento2\Helper\PaymentGroupTransaction; use Magento\Customer\Api\AccountManagementInterface as CustomerAccountManagement; use Magento\Customer\Api\Data\AddressInterfaceFactory as CustomerAddressFactory; @@ -55,17 +54,25 @@ class BuckarooFee extends CommonTaxCollector * @var PaymentGroupTransaction */ protected $groupTransaction; + /** * @var Calculate */ protected $calculate; /** - * @var ConfigProviderAccount + * @var \Buckaroo\Magento2\Model\ConfigProvider\BuckarooFee + */ + protected $configProviderBuckarooFee; + + /** + * @var TaxHelper|null */ - protected $configProviderAccount; + protected $taxHelper; /** + * Constructor + * * @param TaxConfig $taxConfig * @param TaxCalculationInterface $taxCalculationService * @param QuoteDetailsInterfaceFactory $quoteDetailsDataObjectFactory @@ -73,13 +80,13 @@ class BuckarooFee extends CommonTaxCollector * @param TaxClassKeyInterfaceFactory $taxClassKeyDataObjectFactory * @param CustomerAddressFactory $customerAddressFactory * @param CustomerAddressRegionFactory $customerAddressRegionFactory - * @param TaxHelper|null $taxHelper - * @param QuoteDetailsItemExtensionInterfaceFactory|null $quoteDetailsItemExtensionInterfaceFactory - * @param CustomerAccountManagement|null $customerAccountManagement * @param PriceCurrencyInterface $priceCurrency * @param PaymentGroupTransaction $groupTransaction * @param Calculate $calculate - * @param ConfigProviderAccount $configProviderAccount + * @param \Buckaroo\Magento2\Model\ConfigProvider\BuckarooFee $configProviderBuckarooFee + * @param TaxHelper|null $taxHelper + * @param QuoteDetailsItemExtensionInterfaceFactory|null $quoteDetailsItemExtensionInterfaceFactory + * @param CustomerAccountManagement|null $customerAccountManagement */ public function __construct( TaxConfig $taxConfig, @@ -92,7 +99,7 @@ public function __construct( PriceCurrencyInterface $priceCurrency, PaymentGroupTransaction $groupTransaction, Calculate $calculate, - ConfigProviderAccount $configProviderAccount, + \Buckaroo\Magento2\Model\ConfigProvider\BuckarooFee $configProviderBuckarooFee, TaxHelper $taxHelper = null, QuoteDetailsItemExtensionInterfaceFactory $quoteDetailsItemExtensionInterfaceFactory = null, ?CustomerAccountManagement $customerAccountManagement = null @@ -133,12 +140,13 @@ public function __construct( $this->priceCurrency = $priceCurrency; $this->groupTransaction = $groupTransaction; $this->calculate = $calculate; - $this->configProviderAccount = $configProviderAccount; + $this->configProviderBuckarooFee = $configProviderBuckarooFee; + $this->taxHelper = $taxHelper; $this->setCode('pretax_buckaroo_fee'); } /** - * Collect buckaroo fee related items and add them to tax calculation + * Collect Buckaroo fee related items and add them to tax calculation * * @param Quote $quote * @param ShippingAssignmentInterface $shippingAssignment @@ -188,14 +196,16 @@ public function collect( parent::collect($quote, $shippingAssignment, $total); - return $this; } /** + * Add associated taxable for Buckaroo fee + * * @param ShippingAssignmentInterface $shippingAssignment * @param Result $result * @param Quote $quote + * @return void */ private function addAssociatedTaxable(ShippingAssignmentInterface $shippingAssignment, Result $result, Quote $quote) { @@ -210,7 +220,11 @@ private function addAssociatedTaxable(ShippingAssignmentInterface $shippingAssig $associatedTaxables = []; } - $taxClassId = $this->configProviderAccount->getBuckarooFeeTaxClass(); + // Retrieve the store from the quote + $store = $quote->getStore(); + + // Retrieve the Buckaroo fee tax class ID from BuckarooFeeConfigProvider using the store + $taxClassId = $this->configProviderBuckarooFee->getBuckarooFeeTaxClass($store); $associatedTaxables[] = [ CommonTaxCollector::KEY_ASSOCIATED_TAXABLE_TYPE => self::QUOTE_TYPE, diff --git a/Service/Sales/Pdf/BuckarooFee.php b/Service/Sales/Pdf/BuckarooFee.php index 31268891d..a12ac0a90 100644 --- a/Service/Sales/Pdf/BuckarooFee.php +++ b/Service/Sales/Pdf/BuckarooFee.php @@ -78,7 +78,7 @@ public function getTotalsForDisplay() $label = $this->paymentFee->getBuckarooPaymentFeeLabel($this->getOrder()); $fontSize = $this->getFontSize() ? $this->getFontSize() : 7; - $isFeeInclusiveOfTax = (bool)$this->configProviderAccount->getBuckarooFeeTaxClass(); + $isFeeInclusiveOfTax = $this->configProviderBuckarooFee->getBuckarooFeeTaxClass($store); $amountInclTax = $this->getSource()->getBuckarooFeeInclTax(); @@ -88,7 +88,7 @@ public function getTotalsForDisplay() $amountInclTax = $this->getOrder()->formatPriceTxt($amountInclTax); - if ($isFeeInclusiveOfTax && $this->buckarooPaymentCalculationInclTax($store)) { + if ($isFeeInclusiveOfTax == DisplayType::DISPLAY_TYPE_INCLUDING_TAX) { $totals = [ [ 'amount' => $this->getAmountPrefix() . $amountInclTax, @@ -108,11 +108,4 @@ public function getTotalsForDisplay() return $totals; } - - public function buckarooPaymentCalculationInclTax($store = null) - { - $configValue = $this->configProviderBuckarooFee->getPaymentFeeTax($store); - - return $configValue == DisplayType::DISPLAY_TYPE_INCLUDING_TAX; - } } diff --git a/Service/Tax/TaxCalculate.php b/Service/Tax/TaxCalculate.php index 54a420093..c39568036 100755 --- a/Service/Tax/TaxCalculate.php +++ b/Service/Tax/TaxCalculate.php @@ -20,7 +20,7 @@ namespace Buckaroo\Magento2\Service\Tax; -use Buckaroo\Magento2\Model\ConfigProvider\Account as ConfigProviderAccount; +use Buckaroo\Magento2\Model\ConfigProvider\BuckarooFee as BuckarooFeeConfigProvider; use Magento\Quote\Api\Data\CartInterface; use Magento\Tax\Model\Calculation; @@ -32,30 +32,41 @@ class TaxCalculate private $taxCalculation; /** - * @var ConfigProviderAccount + * @var BuckarooFeeConfigProvider */ - protected $configProviderAccount; + protected $configProviderBuckarooFee; /** + * Constructor + * * @param Calculation $taxCalculation - * @param ConfigProviderAccount $configProviderAccount + * @param BuckarooFeeConfigProvider $configProviderBuckarooFee */ - public function __construct(Calculation $taxCalculation, ConfigProviderAccount $configProviderAccount) - { + public function __construct( + Calculation $taxCalculation, + BuckarooFeeConfigProvider $configProviderBuckarooFee + ) { $this->taxCalculation = $taxCalculation; - $this->configProviderAccount = $configProviderAccount; + $this->configProviderBuckarooFee = $configProviderBuckarooFee; } - public function getTaxFromAmountIncludingTax(CartInterface $cart, $amount) + /** + * Calculate tax amount from an amount that includes tax. + * + * @param CartInterface $cart + * @param float $amount Amount including tax + * @return float Tax amount + */ + public function getTaxFromAmountIncludingTax(CartInterface $cart, float $amount): float { $shippingAddress = $cart->getShippingAddress(); $billingAddress = $cart->getBillingAddress(); $customerTaxClassId = $cart->getCustomerTaxClassId(); $storeId = $cart->getStoreId(); - $taxClassId = $this->configProviderAccount->getBuckarooFeeTaxClass(); + + $taxClassId = $this->configProviderBuckarooFee->getBuckarooFeeTaxClass($cart->getStore()); if (empty($taxClassId) || !is_numeric($taxClassId)) { - // If the tax class ID is not set, return zero tax amount to avoid errors return 0.0; } diff --git a/Test/Unit/Model/Total/Quote/BuckarooFeeTest.php b/Test/Unit/Model/Total/Quote/BuckarooFeeTest.php index cc5c69ab4..2677a8588 100644 --- a/Test/Unit/Model/Total/Quote/BuckarooFeeTest.php +++ b/Test/Unit/Model/Total/Quote/BuckarooFeeTest.php @@ -48,9 +48,9 @@ public function testGetBaseFeeReturnsConfigValueIfIsNumber() $quoteMock = $this->getFakeMock(Quote::class)->getMock(); $configProviderFeeMock = $this->getFakeMock(ConfigProviderBuckarooFee::class) - ->setMethods(['getTaxClass', 'getPaymentFeeTax']) + ->setMethods(['getBuckarooFeeTaxClass', 'getPaymentFeeTax']) ->getMock(); - $configProviderFeeMock->expects($this->once())->method('getTaxClass')->willReturn(1); + $configProviderFeeMock->expects($this->once())->method('getBuckarooFeeTaxClass')->willReturn(1); $configProviderFeeMock->expects($this->once())->method('getPaymentFeeTax')->willReturn($taxIncl); $catalogHelper = $this->getFakeMock(Data::class)->setMethods(['getTaxPrice'])->getMock(); @@ -373,9 +373,9 @@ public function testCollectShouldReturnSelfIfFeeIsZero() $configProviderFactoryMock->expects($this->once())->method('getPaymentFee')->willReturn($expectedFee); $configProviderFeeMock = $this->getFakeMock(ConfigProviderBuckarooFee::class) - ->setMethods(['getTaxClass','getPaymentFeeTax']) + ->setMethods(['getBuckarooFeeTaxClass','getPaymentFeeTax']) ->getMock(); - $configProviderFeeMock->expects($this->once())->method('getTaxClass')->willReturn(1); + $configProviderFeeMock->expects($this->once())->method('getBuckarooFeeTaxClass')->willReturn(1); $catalogHelperMock = $this->getFakeMock(Data::class)->setMethods(['getTaxPrice'])->getMock(); $catalogHelperMock->expects($this->once())->method('getTaxPrice')->willReturn($expectedFee); @@ -438,9 +438,9 @@ public function testCollectShouldSetTotalsOnQuote() $priceCurrencyMock->method('convert')->with($fee, $store)->willReturn($fee); $configProviderFeeMock = $this->getFakeMock(ConfigProviderBuckarooFee::class) - ->setMethods(['getTaxClass', 'getPaymentFeeTax']) + ->setMethods(['getBuckarooFeeTaxClass', 'getPaymentFeeTax']) ->getMock(); - $configProviderFeeMock->expects($this->once())->method('getTaxClass')->willReturn(1); + $configProviderFeeMock->expects($this->once())->method('getBuckarooFeeTaxClass')->willReturn(1); $configProviderFeeMock->expects($this->once())->method('getPaymentFeeTax')->willReturn($taxIncl); $catalogHelperMock = $this->getFakeMock(Data::class)->setMethods(['getTaxPrice'])->getMock(); From becb3147c307775cdf7d18cd2a678e9121cecc60 Mon Sep 17 00:00:00 2001 From: "v.carkaxhija" Date: Thu, 12 Dec 2024 16:24:12 +0100 Subject: [PATCH 2/2] update buckaroofee --- Model/Method/AbstractMethod.php | 2 +- Model/Method/Afterpay.php | 8 ++----- Model/Total/Quote/Tax/BuckarooFee.php | 22 ++----------------- Model/Total/Quote/Tax/BuckarooFeeAfterTax.php | 2 ++ 4 files changed, 7 insertions(+), 27 deletions(-) diff --git a/Model/Method/AbstractMethod.php b/Model/Method/AbstractMethod.php index 6cce2e77e..c2bcb68a0 100644 --- a/Model/Method/AbstractMethod.php +++ b/Model/Method/AbstractMethod.php @@ -2773,8 +2773,8 @@ public function checkTotalGrossAmount($requestData, $payment) } return $requestData; - } + public function canUseForCountry($country) { if ($this->getConfigData('allowspecific') != 1) { diff --git a/Model/Method/Afterpay.php b/Model/Method/Afterpay.php index f48b40b6f..89b41794c 100644 --- a/Model/Method/Afterpay.php +++ b/Model/Method/Afterpay.php @@ -778,11 +778,8 @@ protected function getTaxCategory($order) if (!$taxClassId) { return $taxCategory; } - /** - * @var \Buckaroo\Magento2\Model\ConfigProvider\Method\Afterpay $afterPayConfig - */ - $afterPayConfig = $this->configProviderMethodFactory - ->get($this->_code); + + $afterPayConfig = $this->configProviderMethodFactory->get($this->_code); $highClasses = explode(',', (string)$afterPayConfig->getHighTaxClasses($storeId)); $middleClasses = explode(',', (string)$afterPayConfig->getMiddleTaxClasses($storeId)); @@ -798,7 +795,6 @@ protected function getTaxCategory($order) } elseif (in_array($taxClassId, $zeroClasses)) { $taxCategory = 3; } else { - // No classes == 4 $taxCategory = 4; } diff --git a/Model/Total/Quote/Tax/BuckarooFee.php b/Model/Total/Quote/Tax/BuckarooFee.php index b50c6f350..a3094d61f 100755 --- a/Model/Total/Quote/Tax/BuckarooFee.php +++ b/Model/Total/Quote/Tax/BuckarooFee.php @@ -159,9 +159,9 @@ public function collect( Total $total ) { if (!$shippingAssignment->getItems()) { + parent::collect($quote, $shippingAssignment, $total); return $this; } - $orderId = $quote->getReservedOrderId(); // Check if already paid amount is affecting the calculation @@ -170,30 +170,13 @@ public function collect( } $result = $this->calculate->calculatePaymentFee($quote, $total); + if ($result === null){ return $this; } - $amount = $this->priceCurrency->convert($result->getRoundedAmount()); $this->addAssociatedTaxable($shippingAssignment, $result, $quote); - $feeDataObject = $this->quoteDetailsItemDataObjectFactory->create() - ->setType('buckaroo_fee') - ->setCode('buckaroo_fee') - ->setQuantity(1); - - $feeDataObject->setUnitPrice($result->getRoundedAmount()); - $feeDataObject->setTaxClassKey( - $this->taxClassKeyDataObjectFactory->create() - ->setType(TaxClassKeyInterface::TYPE_ID) - ->setValue(4) - ); - $feeDataObject->setIsTaxIncluded(true); - - $quoteDetails = $this->prepareQuoteDetails($shippingAssignment, [$feeDataObject]); - - $this->taxCalculationService->calculateTax($quoteDetails, $quote->getStoreId()); - parent::collect($quote, $shippingAssignment, $total); return $this; @@ -225,7 +208,6 @@ private function addAssociatedTaxable(ShippingAssignmentInterface $shippingAssig // Retrieve the Buckaroo fee tax class ID from BuckarooFeeConfigProvider using the store $taxClassId = $this->configProviderBuckarooFee->getBuckarooFeeTaxClass($store); - $associatedTaxables[] = [ CommonTaxCollector::KEY_ASSOCIATED_TAXABLE_TYPE => self::QUOTE_TYPE, CommonTaxCollector::KEY_ASSOCIATED_TAXABLE_CODE => self::CODE_QUOTE_GW, diff --git a/Model/Total/Quote/Tax/BuckarooFeeAfterTax.php b/Model/Total/Quote/Tax/BuckarooFeeAfterTax.php index e61ae0af6..37322724c 100644 --- a/Model/Total/Quote/Tax/BuckarooFeeAfterTax.php +++ b/Model/Total/Quote/Tax/BuckarooFeeAfterTax.php @@ -74,11 +74,13 @@ public function collect( if (empty($extraTaxableDetails[BuckarooFee::QUOTE_TYPE])) { return $this; } + $itemTaxDetails = $extraTaxableDetails[BuckarooFee::QUOTE_TYPE]; if (empty($itemTaxDetails[CommonTaxCollector::ASSOCIATION_ITEM_CODE_FOR_QUOTE][0])) { return $this; } + $buckarooFeeTaxDetails = $itemTaxDetails[CommonTaxCollector::ASSOCIATION_ITEM_CODE_FOR_QUOTE][0]; $buckarooFeeBaseTaxAmount = $buckarooFeeTaxDetails['base_row_tax'];