Skip to content

Commit

Permalink
Merge pull request #438 from mollie/release/2.1.0
Browse files Browse the repository at this point in the history
Release/2.1.0
  • Loading branch information
Marvin-Magmodules committed Oct 12, 2021
2 parents 32eee3d + 055b96d commit d4821ff
Show file tree
Hide file tree
Showing 29 changed files with 593 additions and 90 deletions.
2 changes: 0 additions & 2 deletions Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\Encryption\EncryptorInterface;
use Magento\Framework\Module\Manager;
use Magento\Payment\Model\MethodInterface;
use Magento\Store\Model\ScopeInterface;
use Mollie\Payment\Logger\MollieLogger;
use Mollie\Payment\Model\Adminhtml\Source\VoucherCategory;
use phpDocumentor\Reflection\Types\Static_;

class Config
{
Expand Down
24 changes: 22 additions & 2 deletions Cron/RemoveSentPaymentReminders.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Magento\Framework\Stdlib\DateTime\DateTime;
use Magento\Sales\Model\Order;
use Mollie\Payment\Api\SentPaymentReminderRepositoryInterface;
use Mollie\Payment\Config;

class RemoveSentPaymentReminders
{
Expand All @@ -28,17 +29,36 @@ class RemoveSentPaymentReminders
*/
private $dateTime;

/**
* @var Config
*/
private $config;

public function __construct(
SentPaymentReminderRepositoryInterface $sentPaymentReminderRepository,
SearchCriteriaBuilder $builder,
DateTime $dateTime
DateTime $dateTime,
Config $config
) {
$this->sentPaymentReminderRepository = $sentPaymentReminderRepository;
$this->builder = $builder;
$this->dateTime = $dateTime;
$this->config = $config;
}

public function execute()
{
try {
$this->deletePaymentReminders();
} catch (\Throwable $exception) {
$this->config->addToLog('error', 'Error while running ' . static::class);
$this->config->addToLog('error', (string)$exception);

throw $exception;
}
}

protected function deletePaymentReminders(): void
{
do {
$date = (new \DateTimeImmutable($this->dateTime->gmtDate()))->sub(new \DateInterval('P1W'));
Expand All @@ -52,4 +72,4 @@ public function execute()
}
} while ($result->getTotalCount());
}
}
}
33 changes: 20 additions & 13 deletions Cron/SendPendingPaymentReminders.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,21 +70,28 @@ public function execute()
return;
}

/** @var SortOrder $sortOrder */
$sortOrder = $this->sortOrderFactory->create();
$sortOrder->setField('entity_id');
$sortOrder->setDirection(SortOrder::SORT_ASC);
try {
/** @var SortOrder $sortOrder */
$sortOrder = $this->sortOrderFactory->create();
$sortOrder->setField('entity_id');
$sortOrder->setDirection(SortOrder::SORT_ASC);

$delay = $this->config->secondChanceEmailDelay();
$date = (new \DateTimeImmutable($this->dateTime->gmtDate()))->sub(new \DateInterval('PT' . $delay . 'H'));
$this->builder->addFilter(Order::CREATED_AT, $date, 'lt');
$this->builder->addSortOrder($sortOrder);
$this->builder->setPageSize(200);
$delay = $this->config->secondChanceEmailDelay();
$date = (new \DateTimeImmutable($this->dateTime->gmtDate()))->sub(new \DateInterval('PT' . $delay . 'H'));
$this->builder->addFilter(Order::CREATED_AT, $date, 'lt');
$this->builder->addSortOrder($sortOrder);
$this->builder->setPageSize(200);

$result = $this->paymentReminderRepository->getList($this->builder->create());
$result = $this->paymentReminderRepository->getList($this->builder->create());

foreach ($result->getItems() as $item) {
$this->paymentReminder->send($item);
foreach ($result->getItems() as $item) {
$this->paymentReminder->send($item);
}
} catch (\Throwable $exception) {
$this->config->addToLog('error', 'Error while running ' . static::class);
$this->config->addToLog('error', (string)$exception);

throw $exception;
}
}
}
}
13 changes: 11 additions & 2 deletions GraphQL/Resolver/Checkout/ProcessTransaction.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\GraphQl\Config\Element\Field;
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
use Magento\Framework\GraphQl\Query\ResolverInterface;
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
use Magento\Quote\Api\CartRepositoryInterface;
Expand Down Expand Up @@ -60,6 +61,10 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
$token = $args['input']['payment_token'];
$tokenModel = $this->paymentTokenRepository->getByToken($token);

if (!$tokenModel) {
throw new GraphQlNoSuchEntityException(__('No order found with token "%1"', $token));
}

$result = $this->mollie->processTransaction($tokenModel->getOrderId(), 'success', $token);

if (isset($result['error'])) {
Expand All @@ -78,14 +83,18 @@ private function getCart(string $status, ?string $cartId): ?array
PaymentStatus::STATUS_EXPIRED,
PaymentStatus::STATUS_CANCELED,
PaymentStatus::STATUS_FAILED,
PaymentStatus::STATUS_PENDING,
])) {
return null;
}

try {
$this->checkoutSession->restoreQuote();
$cart = $this->cartRepository->get($cartId);
$cart->setIsActive(1);
$cart->setReservedOrderId(null);
$this->cartRepository->save($cart);

return ['model' => $this->cartRepository->get($cartId)];
return ['model' => $cart];
} catch (NoSuchEntityException $exception) {
return null;
}
Expand Down
8 changes: 0 additions & 8 deletions Helper/General.php
Original file line number Diff line number Diff line change
Expand Up @@ -439,14 +439,6 @@ public function getApiMethod($order)
return $this->getStoreConfig($methodXpath, $order->getStoreId());
}

/**
* @return mixed
*/
public function getPaymentToken()
{
return $this->mathRandom->getUniqueHash();
}

/**
* Redirect Url Builder /w OrderId & UTM No Override
*
Expand Down
10 changes: 9 additions & 1 deletion Model/Client/Orders.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
use Mollie\Payment\Service\Order\Transaction;
use Mollie\Payment\Service\Order\TransactionProcessor;
use Mollie\Payment\Service\Magento\Vault\AddCardToVault;
use Mollie\Payment\Service\PaymentToken\PaymentTokenForOrder;

/**
* Class Orders
Expand Down Expand Up @@ -159,6 +160,11 @@ class Orders extends AbstractModel
*/
private $addCardToVault;

/**
* @var PaymentTokenForOrder
*/
private $paymentTokenForOrder;

/**
* Orders constructor.
*
Expand Down Expand Up @@ -213,6 +219,7 @@ public function __construct(
TransactionProcessor $transactionProcessor,
CancelOrder $cancelOrder,
AddCardToVault $addCardToVault,
PaymentTokenForOrder $paymentTokenForOrder,
EventManager $eventManager
) {
$this->orderLines = $orderLines;
Expand Down Expand Up @@ -240,6 +247,7 @@ public function __construct(
$this->eventManager = $eventManager;
$this->cancelOrder = $cancelOrder;
$this->addCardToVault = $addCardToVault;
$this->paymentTokenForOrder = $paymentTokenForOrder;
}

/**
Expand All @@ -262,7 +270,7 @@ public function startTransaction(Order $order, $mollieApi)
return $mollieOrder->getCheckoutUrl();
}

$paymentToken = $this->mollieHelper->getPaymentToken();
$paymentToken = $this->paymentTokenForOrder->execute($order);
$method = $this->mollieHelper->getMethodCode($order);
$method = str_replace('_vault', '', $method);
$orderData = [
Expand Down
10 changes: 9 additions & 1 deletion Model/Client/Payments.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
use Mollie\Payment\Service\Order\OrderCommentHistory;
use Mollie\Payment\Service\Order\Transaction;
use Mollie\Payment\Service\Order\TransactionProcessor;
use Mollie\Payment\Service\PaymentToken\PaymentTokenForOrder;

/**
* Class Payments
Expand Down Expand Up @@ -104,6 +105,11 @@ class Payments extends AbstractModel
*/
private $cancelOrder;

/**
* @var PaymentTokenForOrder
*/
private $paymentTokenForOrder;

/**
* Payments constructor.
*
Expand Down Expand Up @@ -138,6 +144,7 @@ public function __construct(
OrderAmount $orderAmount,
TransactionDescription $transactionDescription,
CancelOrder $cancelOrder,
PaymentTokenForOrder $paymentTokenForOrder,
EventManager $eventManager
) {
$this->orderSender = $orderSender;
Expand All @@ -155,6 +162,7 @@ public function __construct(
$this->orderAmount = $orderAmount;
$this->transactionDescription = $transactionDescription;
$this->cancelOrder = $cancelOrder;
$this->paymentTokenForOrder = $paymentTokenForOrder;
}

/**
Expand All @@ -175,7 +183,7 @@ public function startTransaction(Order $order, $mollieApi)
return $payment->getCheckoutUrl();
}

$paymentToken = $this->mollieHelper->getPaymentToken();
$paymentToken = $this->paymentTokenForOrder->execute($order);
$method = $this->mollieHelper->getMethodCode($order);
$paymentData = [
'amount' => $this->mollieHelper->getOrderAmountByOrder($order),
Expand Down
14 changes: 14 additions & 0 deletions Service/Order/Lines/Generator/GeneratorInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php
/*
* Copyright Magmodules.eu. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Mollie\Payment\Service\Order\Lines\Generator;

use Magento\Sales\Api\Data\OrderInterface;

interface GeneratorInterface
{
public function process(OrderInterface $order, array $orderLines): array;
}
102 changes: 102 additions & 0 deletions Service/Order/Lines/Generator/WeeeFeeGenerator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
<?php
/*
* Copyright Magmodules.eu. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Mollie\Payment\Service\Order\Lines\Generator;

use Magento\Sales\Api\Data\OrderInterface;
use Magento\Sales\Api\Data\OrderItemInterface;
use Mollie\Payment\Helper\General;

class WeeeFeeGenerator implements GeneratorInterface
{
/**
* @var General
*/
private $mollieHelper;

/**
* @var bool
*/
private $forceBaseCurrency;

/**
* @var string|null
*/
private $currency;

public function __construct(General $mollieHelper)
{
$this->mollieHelper = $mollieHelper;
}

public function process(OrderInterface $order, array $orderLines): array
{
$this->forceBaseCurrency = (bool)$this->mollieHelper->useBaseCurrency($order->getStoreId());
$this->currency = $this->forceBaseCurrency ? $order->getBaseCurrencyCode() : $order->getOrderCurrencyCode();

if ($orderLine = $this->getWeeeFeeOrderLine($order)) {
$orderLines[] = $orderLine;
}

return $orderLines;
}

private function getWeeeFeeOrderLine(OrderInterface $order): ?array
{
$total = 0.0;
$weeeItems = $this->getWeeeItems($order);
if (!$weeeItems) {
return null;
}

/** @var OrderItemInterface $item */
foreach ($weeeItems as $item) {
$amount = $item->getWeeeTaxAppliedAmount();
if ($this->forceBaseCurrency) {
$amount = $item->getBaseWeeeTaxAppliedAmount();
}

$total += $amount;
}

return [
'type' => 'surcharge',
'name' => $this->getTitle($weeeItems),
'quantity' => 1,
'unitPrice' => $this->mollieHelper->getAmountArray($this->currency, $total),
'totalAmount' => $this->mollieHelper->getAmountArray($this->currency, $total),
'vatRate' => 0,
'vatAmount' => $this->mollieHelper->getAmountArray($this->currency, 0.0),
];
}

private function getWeeeItems(OrderInterface $order): array
{
return array_filter($order->getItems(), function (OrderItemInterface $item) {
return $item->getWeeeTaxAppliedAmount();
});
}

private function getTitle(array $items): string
{
/** @var OrderItemInterface $item */
foreach ($items as $item) {
$json = json_decode($item->getWeeeTaxApplied(), true);

if (!$json) {
continue;
}

foreach ($json as $applied) {
if (isset($applied['title'])) {
return $applied['title'];
}
}
}

return 'FPT';
}
}
Loading

0 comments on commit d4821ff

Please sign in to comment.