We will be off from 27/1 (Monday) to 31/1 (Friday) (GMT +7) for our Tet Holiday (Lunar New Year) in our country

Commit 06f2386a authored by Rik ter Beek's avatar Rik ter Beek

#72 add refunded amount to adyen_order_payment table, fix multiple refunds on...

#72 add refunded amount to adyen_order_payment table, fix multiple refunds on same pspreference for split payments, show split payments in overview payment information of the order and add column original_reference to notification table.
parent 9fdbcbb2
......@@ -37,6 +37,10 @@ interface NotificationInterface
* Pspreference.
*/
const PSPREFRENCE = 'pspreference';
/*
* Pspreference.
*/
const ORIGINAL_REFERENCE = 'original_reference';
/*
* Merchantreference
*/
......@@ -117,6 +121,22 @@ interface NotificationInterface
*/
public function setPspreference($pspreference);
/**
* Sets OriginalReference.
*
* @param string $originalReference
* @return $this
*/
public function setOriginalReference($originalReference);
/**
* Gets the OriginalReference for the notification.
*
* @return int|null OriginalReference.
*/
public function getOriginalReference();
/**
* Gets the Merchantreference for the notification.
*
......
......@@ -32,23 +32,30 @@ class AbstractInfo extends \Magento\Payment\Block\Info
* @var \Adyen\Payment\Helper\Data
*/
protected $_adyenHelper;
/**
* @var \Adyen\Payment\Model\Resource\Order\Payment\CollectionFactory
*/
protected $_adyenOrderPaymentCollectionFactory;
/**
* Constructor
*
* AbstractInfo constructor.
*
* @param \Adyen\Payment\Helper\Data $adyenHelper
* @param \Adyen\Payment\Model\Resource\Order\Payment\CollectionFactory $adyenOrderPaymentCollectionFactory
* @param Template\Context $context
* @param array $data
*/
public function __construct(
\Adyen\Payment\Helper\Data $adyenHelper,
\Adyen\Payment\Model\Resource\Order\Payment\CollectionFactory $adyenOrderPaymentCollectionFactory,
Template\Context $context,
array $data = []
)
{
parent::__construct($context, $data);
$this->_adyenHelper = $adyenHelper;
$this->_adyenOrderPaymentCollectionFactory = $adyenOrderPaymentCollectionFactory;
}
/**
......
......@@ -39,4 +39,22 @@ class Hpp extends AbstractInfo
{
return $this->_adyenHelper->getAdyenHppConfigDataFlag('payment_selection_on_adyen');
}
/**
* @return null
* @throws \Magento\Framework\Exception\LocalizedException
*/
public function getSplitPayments()
{
// retrieve split payments of the order
$orderPaymentCollection = $this->_adyenOrderPaymentCollectionFactory
->create()
->addPaymentFilterAscending($this->getInfo()->getId());
if ($orderPaymentCollection->getSize() > 0) {
return $orderPaymentCollection;
} else {
return null;
}
}
}
......@@ -165,6 +165,9 @@ class Json extends \Magento\Framework\App\Action\Action
if (isset($response['pspReference'])) {
$notification->setPspreference($response['pspReference']);
}
if (isset($response['originalReference'])) {
$notification->setOriginalReference($response['originalReference']);
}
if (isset($response['merchantReference'])) {
$notification->setMerchantReference($response['merchantReference']);
}
......
......@@ -106,11 +106,11 @@ class RefundDataBuilder implements BuilderInterface
if ($ratio) {
// refund based on ratio calculate refund amount
$modificationAmount = $ratio * (
$splitPayment->getAmount() - $splitPayment->getRefundedAmount()
$splitPayment->getAmount() - $splitPayment->getTotalRefunded()
);
} else {
// total authorised amount of the split payment
$splitPaymentAmount = $splitPayment->getAmount() - $splitPayment->getRefundedAmount();
$splitPaymentAmount = $splitPayment->getAmount() - $splitPayment->getTotalRefunded();
// if refunded amount is greather then split payment amount do a full refund
if ($amount >= $splitPaymentAmount) {
......@@ -149,7 +149,6 @@ class RefundDataBuilder implements BuilderInterface
]
];
}
return $result;
}
}
\ No newline at end of file
......@@ -93,6 +93,11 @@ class Cron
*/
protected $_pspReference;
/**
* @var
*/
protected $_originalReference;
/**
* @var
*/
......@@ -212,7 +217,7 @@ class Cron
$dateStart = new \DateTime();
$dateStart->modify('-5 day');
$dateEnd = new \DateTime();
$dateEnd->modify('-1 minute');
// $dateEnd->modify('-1 minute');
$dateRange = ['from' => $dateStart, 'to' => $dateEnd, 'datetime' => true];
// create collection
......@@ -326,6 +331,7 @@ class Cron
{
// declare the common parameters
$this->_pspReference = $notification->getPspreference();
$this->_originalReference = $notification->getOriginalReference();
$this->_merchantReference = $notification->getMerchantReference();
$this->_eventCode = $notification->getEventCode();
$this->_success = $notification->getSuccess();
......@@ -874,6 +880,29 @@ class Cron
{
$this->_adyenLogger->addAdyenNotificationCronjob('Refunding the order');
// check if it is a split payment if so save the refunded data
if ($this->_originalReference != "") {
$this->_adyenLogger->addAdyenNotificationCronjob('Going to update the refund to split payments table');
$orderPayment = $this->_adyenOrderPaymentCollectionFactory
->create()
->addFieldToFilter(\Adyen\Payment\Model\Notification::PSPREFRENCE, $this->_originalReference)
->getFirstItem();
if ($orderPayment->getId() > 0) {
$currency = $this->_order->getOrderCurrencyCode();
$amountRefunded = $amountRefunded = $orderPayment->getTotalRefunded() +
$this->_adyenHelper->originalAmount($this->_value, $currency);
$orderPayment->setUpdatedAt(new \DateTime());
$orderPayment->setTotalRefunded($amountRefunded);
$orderPayment->save();
$this->_adyenLogger->addAdyenNotificationCronjob('Update the refund in the split payments table');
} else {
$this->_adyenLogger->addAdyenNotificationCronjob('Payment not found in split payment table');
}
}
/*
* Don't create a credit memo if refund is initialize in Magento
* because in this case the credit memo already exists
......@@ -893,7 +922,7 @@ class Cron
$order->getPayment()->registerRefundNotification($amount);
*/
$this->_adyenLogger->addAdyenNotificationCronjob('Please create your credit memo inside magentos');
$this->_adyenLogger->addAdyenNotificationCronjob('Please create your credit memo inside magento');
} else {
$this->_adyenLogger->addAdyenNotificationCronjob('Could not create a credit memo for order');
}
......@@ -1216,7 +1245,7 @@ class Cron
$res = $this->_adyenOrderPaymentCollectionFactory
->create()
->getTotalAmount($paymentId);
if($res && isset($res[0]) && is_array($res[0])) {
$amount = $res[0]['total_amount'];
$orderAmount = $this->_adyenHelper->formatAmount($amount, $orderCurrencyCode);
......
......@@ -130,6 +130,23 @@ class Notification extends \Magento\Framework\Model\AbstractModel
return $this->setData(self::PSPREFRENCE, $pspreference);
}
/**
* @return mixed
*/
public function getOriginalReference()
{
return $this->getData(self::ORIGINAL_REFERENCE);
}
/**
* @param string $originalReference
* @return $this
*/
public function setOriginalReference($originalReference)
{
return $this->setData(self::ORIGINAL_REFERENCE, $originalReference);
}
/**
* Gets the Merchantreference for the notification.
*
......
......@@ -56,6 +56,10 @@ class UpgradeSchema implements UpgradeSchemaInterface
$this->updateSchemaVersion1451($setup);
}
if (version_compare($context->getVersion(), '1.4.5.2', '<')) {
$this->updateSchemaVersion1452($setup);
}
$setup->endSetup();
}
......@@ -207,8 +211,27 @@ class UpgradeSchema implements UpgradeSchemaInterface
->setComment('Adyen Order Payment');
$setup->getConnection()->createTable($table);
}
/**
* @param SchemaSetupInterface $setup
*/
public function updateSchemaVersion1452(SchemaSetupInterface $setup)
{
// add originalReference to notification table
$connection = $setup->getConnection();
$column = [
'type' => Table::TYPE_TEXT,
'length' => 255,
'nullable' => true,
'comment' => 'Original Reference',
'after' => \Adyen\Payment\Model\Notification::PSPREFRENCE
];
$connection->addColumn(
$setup->getTable('adyen_notification'),
\Adyen\Payment\Model\Notification::ORIGINAL_REFERENCE, $column
);
}
}
\ No newline at end of file
......@@ -2,7 +2,7 @@
"name": "adyen/module-payment",
"description": "Official Magento2 Plugin to connect to Payment Service Provider Adyen.",
"type": "magento2-module",
"version": "1.4.5.1",
"version": "1.4.5.2",
"license": [
"OSL-3.0",
"AFL-3.0"
......
......@@ -24,7 +24,7 @@
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Adyen_Payment" setup_version="1.4.5.1">
<module name="Adyen_Payment" setup_version="1.4.5.2">
<sequence>
<module name="Magento_Sales"/>
<module name="Magento_Quote"/>
......
......@@ -54,6 +54,26 @@ $_isDemoMode = $block->isDemoMode();
<?php echo __('Total fraud score: %1', $_info->getAdditionalInformation('adyen_total_fraud_score')) ?><br/>
<?php endif; ?>
<?php if($block->getSplitPayments()): ?>
<table class="edit-order-table">
<tr>
<th>PspReference</th>
<th>Payment Method</th>
<th>Amount</th>
<th>Refunded</th>
</tr>
<?php foreach ($block->getSplitPayments() as $payment): ?>
<tr>
<td><?php echo $payment->getPspreference() ?></td>
<td><?php echo $payment->getPaymentMethod() ?></td>
<td><?php echo $payment->getAmount() ?></td>
<td><?php echo $payment->getTotalRefunded() ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php endif; ?>
<?php if ($_specificInfo = $block->getSpecificInformation()):?>
<table class="data-table admin__table-secondary">
<?php foreach ($_specificInfo as $_label => $_value):?>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment