From 05a83ddc41c69b699a58c80ab5eb71f3eceabac2 Mon Sep 17 00:00:00 2001 From: Fabiano Mallmann <25328512+fabiano-mallmann@users.noreply.github.com> Date: Tue, 5 Sep 2023 10:47:25 -0300 Subject: [PATCH] PAOPN-576: add shipping and taxs in subs (#242 ) --- Concrete/Magento2PlatformOrderDecorator.php | 86 +++++++++++++++------ Model/PagarmeConfigProvider.php | 19 ++++- etc/adminhtml/system/marketplace.xml | 3 - etc/adminhtml/system/recurrence.xml | 41 +++++++++- i18n/pt_BR.csv | 5 +- 5 files changed, 122 insertions(+), 32 deletions(-) diff --git a/Concrete/Magento2PlatformOrderDecorator.php b/Concrete/Magento2PlatformOrderDecorator.php index 5d2bb217..dfead032 100644 --- a/Concrete/Magento2PlatformOrderDecorator.php +++ b/Concrete/Magento2PlatformOrderDecorator.php @@ -41,6 +41,7 @@ use Pagarme\Core\Payment\ValueObjects\CustomerType; use Pagarme\Core\Payment\ValueObjects\Phone; use Pagarme\Core\Recurrence\Aggregates\Plan; +use Pagarme\Core\Recurrence\Aggregates\Repetition; use Pagarme\Core\Recurrence\Services\RecurrenceService; use Pagarme\Pagarme\Helper\BuildChargeAddtionalInformationHelper; use Pagarme\Pagarme\Helper\RecurrenceProductHelper; @@ -55,6 +56,7 @@ use Pagarme\Core\Kernel\ValueObjects\TransactionType; use Magento\Quote\Model\Quote; use Pagarme\Pagarme\Helper\Marketplace\WebkulHelper; +use Pagarme\Pagarme\Model\PagarmeConfigProvider; class Magento2PlatformOrderDecorator extends AbstractPlatformOrderDecorator { @@ -72,12 +74,21 @@ class Magento2PlatformOrderDecorator extends AbstractPlatformOrderDecorator * @var OrderService */ private $orderService; + /** + * @var PagarmeConfigProvider + */ + private $config; + /** + * @var MoneyService + */ + private $moneyService; public function __construct() { $this->i18n = new LocalizationService(); $objectManager = ObjectManager::getInstance(); - + $this->moneyService = new MoneyService(); + $this->config = $objectManager->get('Pagarme\Pagarme\Model\PagarmeConfigProvider'); $this->orderFactory = $objectManager->get('Magento\Sales\Model\Order'); $this->orderService = new OrderService(); parent::__construct(); @@ -624,9 +635,9 @@ private function getGuestCustomer($quote) /** @return Item[] */ public function getItemCollection() { - $moneyService = new MoneyService(); $quote = $this->getQuote(); $itemCollection = $quote->getItemsCollection(); + $hasSubscriptionItem = false; $items = []; foreach ($itemCollection as $quoteItem) { //adjusting price. @@ -649,7 +660,7 @@ public function getItemCollection() $item = new Item; $item->setAmount( - $moneyService->floatToCents($price) + $this->moneyService->floatToCents($price) ); if ($quoteItem->getProductId()) { @@ -663,18 +674,53 @@ public function getItemCollection() ); $item->setName($quoteItem->getName()); - - $helper = new RecurrenceProductHelper(); - $selectedRepetition = $helper->getSelectedRepetition($quoteItem); - $item->setSelectedOption($selectedRepetition); - - $this->setRecurrenceInfo($item, $quoteItem); - + if ($this->getRecurrenceService()->getRecurrenceProductByProductId($quoteItem->getProductId())) { + $hasSubscriptionItem = true; + $helper = new RecurrenceProductHelper(); + $selectedRepetition = $helper->getSelectedRepetition($quoteItem); + $item->setSelectedOption($selectedRepetition); + $this->setRecurrenceInfo($item, $quoteItem); + } $items[] = $item; } + + if($hasSubscriptionItem) { + if($this->getPlatformOrder()->getShippingAmount() && $this->config->canAddShippingInItemsOnRecurrence()) { + $items[] = $this->addCustomItem( + $this->getPlatformOrder()->getShippingAmount(), + $this->getPlatformOrder()->getShippingDescription(), + $selectedRepetition + ); + } + if($this->getPlatformOrder()->getBaseTaxAmount() && $this->config->canAddTaxInItemsOnRecurrence()) { + $items[] = $this->addCustomItem( + $this->getPlatformOrder()->getBaseTaxAmount(), + __("Taxs"), + $selectedRepetition + ); + } + } return $items; } + private function addCustomItem($value, $name, $selectedRepetition) + { + $product = new Item(); + $product->setName($name); + $product->setDescription($name); + $product->setQuantity(1); + $product->setCode(0); + $product->setSelectedOption($this->mountRepetition($value, $selectedRepetition)); + $product->setType("subscription"); + $product->setAmount($this->moneyService->floatToCents($value)); + return $product; + } + private function mountRepetition($value, $selectedRepetition) + { + $selectedRepetition->setRecurrencePrice($this->moneyService->floatToCents($value)); + return $selectedRepetition; + } + public function setRecurrenceInfo($item, $quoteItem) { $recurrenceService = $this->getRecurrenceService(); @@ -809,7 +855,6 @@ private function extractPaymentDataFromPagarmeDebit( private function extractBasePaymentData($additionalInformation) { - $moneyService = new MoneyService(); $identifier = null; $customerId = null; $brand = null; @@ -874,7 +919,6 @@ private function extractBasePaymentData($additionalInformation) private function extractPaymentDataFromPagarmeTwoCreditCard($additionalInformation, &$paymentData, $payment) { - $moneyService = new MoneyService(); $indexes = ['first', 'second']; foreach ($indexes as $index) { $identifier = null; @@ -918,11 +962,11 @@ private function extractPaymentDataFromPagarmeTwoCreditCard($additionalInformati $index ); - $amount = $moneyService->removeSeparators( + $amount = $this->moneyService->removeSeparators( $additionalInformation["cc_{$index}_card_amount"] ); - $newPaymentData->amount = $moneyService->floatToCents($amount / 100); + $newPaymentData->amount = $this->moneyService->floatToCents($amount / 100); $newPaymentData->saveOnSuccess = isset($additionalInformation["cc_savecard_{$index}"]) && $additionalInformation["cc_savecard_{$index}"] === '1'; @@ -988,7 +1032,6 @@ private function extractPaymentDataFromPagarmeBilletCreditcard( &$paymentData, $payment ) { - $moneyService = new MoneyService(); $identifier = null; $customerId = null; @@ -1034,7 +1077,7 @@ private function extractPaymentDataFromPagarmeBilletCreditcard( "", $additionalInformation["cc_cc_amount"] ?? '' ); - $newPaymentData->amount = $moneyService->floatToCents($amount / 100); + $newPaymentData->amount = $this->moneyService->floatToCents($amount / 100); $creditCardDataIndex = AbstractCreditCardPayment::getBaseCode(); if (!isset($paymentData[$creditCardDataIndex])) { @@ -1059,7 +1102,7 @@ private function extractPaymentDataFromPagarmeBilletCreditcard( ); $newPaymentData->amount = - $moneyService->floatToCents($amount / 100); + $this->moneyService->floatToCents($amount / 100); $boletoDataIndex = BoletoPayment::getBaseCode(); if (!isset($paymentData[$boletoDataIndex])) { @@ -1079,10 +1122,9 @@ private function extractPaymentDataFromPagarmeBillet( &$paymentData, $payment ) { - $moneyService = new MoneyService(); $newPaymentData = new \stdClass(); $newPaymentData->amount = - $moneyService->floatToCents($this->platformOrder->getGrandTotal()); + $this->moneyService->floatToCents($this->platformOrder->getGrandTotal()); $boletoDataIndex = BoletoPayment::getBaseCode(); if (!isset($paymentData[$boletoDataIndex])) { @@ -1104,10 +1146,9 @@ private function extractPaymentDataFromPagarmePix( &$paymentData, $payment ) { - $moneyService = new MoneyService(); $newPaymentData = new \stdClass(); $newPaymentData->amount = - $moneyService->floatToCents($this->platformOrder->getGrandTotal()); + $this->moneyService->floatToCents($this->platformOrder->getGrandTotal()); $pixDataIndex = PixPayment::getBaseCode(); if (!isset($paymentData[$pixDataIndex])) { @@ -1126,7 +1167,6 @@ private function extractPaymentDataFromPagarmePix( public function getShipping() { - $moneyService = new MoneyService(); /** @var Shipping $shipping */ $shipping = null; $quote = $this->getQuote(); @@ -1141,7 +1181,7 @@ public function getShipping() $shipping = new Shipping(); $shipping->setAmount( - $moneyService->floatToCents($platformShipping->getShippingAmount()) + $this->moneyService->floatToCents($platformShipping->getShippingAmount()) ); $shipping->setDescription($platformShipping->getShippingDescription()); $shipping->setRecipientName($platformShipping->getName()); diff --git a/Model/PagarmeConfigProvider.php b/Model/PagarmeConfigProvider.php index 63bab8f7..7fba0886 100644 --- a/Model/PagarmeConfigProvider.php +++ b/Model/PagarmeConfigProvider.php @@ -18,7 +18,9 @@ class PagarmeConfigProvider implements ConfigProviderInterface /** * Contains if the module is active or not */ - const XML_PATH_IS_GATEWAY_INTEGRATION_TYPE = 'pagarme_pagarme/global/is_gateway_integration_type'; + const XML_PATH_IS_GATEWAY_INTEGRATION_TYPE = 'pagarme_pagarme/global/is_gateway_integration_type'; + const XML_PATH_RECURRENCE_ADD_SHIPPING_IN_ITEMS = 'pagarme_pagarme/recurrence/add_shipping_in_items'; + const XML_PATH_RECURRENCE_ADD_TAX_IN_ITEMS = 'pagarme_pagarme/recurrence/add_tax_in_items'; const XML_PATH_IS_ENABLE_SAVED_CARDS = 'payment/pagarme_creditcard/enabled_saved_cards'; const XML_PATH_SOFT_DESCRIPTION = 'payment/pagarme_creditcard/soft_description'; const XML_PATH_MAX_INSTALLMENT = 'payment/pagarme_creditcard/installments_number'; @@ -93,6 +95,21 @@ public function isGatewayIntegrationType() ); } + public function canAddShippingInItemsOnRecurrence() + { + return $this->scopeConfig->getValue( + self::XML_PATH_RECURRENCE_ADD_SHIPPING_IN_ITEMS, + ScopeInterface::SCOPE_STORE + ) ?? false; + } + public function canAddTaxInItemsOnRecurrence() + { + return $this->scopeConfig->getValue( + self::XML_PATH_RECURRENCE_ADD_TAX_IN_ITEMS, + ScopeInterface::SCOPE_STORE + ) ?? false; + } + public function validateSoftDescription() { $isGatewayIntegrationType = $this->isGatewayIntegrationType(); diff --git a/etc/adminhtml/system/marketplace.xml b/etc/adminhtml/system/marketplace.xml index 7704c321..7eaba6fe 100644 --- a/etc/adminhtml/system/marketplace.xml +++ b/etc/adminhtml/system/marketplace.xml @@ -96,8 +96,5 @@ 1 - - 1 - diff --git a/etc/adminhtml/system/recurrence.xml b/etc/adminhtml/system/recurrence.xml index 92b1eaa5..8aca4bf1 100644 --- a/etc/adminhtml/system/recurrence.xml +++ b/etc/adminhtml/system/recurrence.xml @@ -2,7 +2,7 @@ - + @@ -14,6 +14,9 @@ Magento\Config\Model\Config\Source\Yesno pagarme_pagarme/recurrence/show_recurrence_currency_widget + + 1 + @@ -21,11 +24,17 @@ Allow to purchase recurrence products with simple products on the same shopping cart Magento\Config\Model\Config\Source\Yesno pagarme_pagarme/recurrence/purchase_recurrence_product_with_normal_product + + 1 + pagarme_pagarme/recurrence/conflict_recurrence_product_with_normal_product + + 1 + @@ -33,11 +42,17 @@ Allow to purchase more than one recurrence product on the same shopping cart Magento\Config\Model\Config\Source\Yesno pagarme_pagarme/recurrence/purchase_recurrence_product_with_recurrence_product + + 1 + pagarme_pagarme/recurrence/conflict_recurrence_product_with_recurrence_product + + 1 + @@ -45,9 +60,27 @@ With this option enabled, the module will decrease product stock with each recurrence cycle Magento\Config\Model\Config\Source\Yesno pagarme_pagarme/recurrence/decrease_stock + + 1 + + + + + + Magento\Config\Model\Config\Source\Yesno + pagarme_pagarme/recurrence/add_shipping_in_items + + 1 + + + + + + Magento\Config\Model\Config\Source\Yesno + pagarme_pagarme/recurrence/add_tax_in_items + + 1 + - - 1 - diff --git a/i18n/pt_BR.csv b/i18n/pt_BR.csv index ff0d0ce0..bae4d001 100644 --- a/i18n/pt_BR.csv +++ b/i18n/pt_BR.csv @@ -15,7 +15,7 @@ "Multi-means Double Credit Card","Multimeios Dois Cartões de Crédito" "Multi-means Credit Card and Boleto","Multimeios Cartão de Crédito e Boleto" "Debit Card","Cartão de Débito" -"Recurrence Settings (Beta)","Configurações de Recorrência (Beta)" +"Recurrence Settings","Configurações de Recorrência" "Show Recurrence Currency Widget","Mostrar Widget de Moeda de Recorrência" "Conflict checkout message","Mensagem de Conflito do Checkout" "Print Billet","Imprimir Boleto" @@ -496,3 +496,6 @@ "Please, enter valid Name on Card","Por favor, digite um Nome no Cartão válido" "Please, enter valid Expiration Date","Por favor, digite um Data de Validade válida" "The cvv field must be a minimum length of 3 and a maximum length of 4.","O campo de cvv deve ter um tamanho mínimo de 3 e um tamanho máximo de 4." +"Add shipping values in items","Realizar a cobrança do frete" +"Add tax values in items","Realizar a cobrança das taxas" +"Taxs","Taxas"