CS
This commit is contained in:
parent
063ce25d01
commit
67b9dd85be
@ -679,35 +679,40 @@ class PayPal extends PaymentModule
|
|||||||
|
|
||||||
public function hookCancelProduct($params)
|
public function hookCancelProduct($params)
|
||||||
{
|
{
|
||||||
// if (Tools::isSubmit('generateDiscount') || !$this->isPayPalAPIAvailable())
|
if (!$this->isPayPalAPIAvailable()) {
|
||||||
// return false;
|
|
||||||
// // delete test sur la génération d'avoir
|
|
||||||
if (!$this->isPayPalAPIAvailable())
|
|
||||||
return false;
|
return false;
|
||||||
elseif ($params['order']->module != $this->name || !($order = $params['order']) || !Validate::isLoadedObject($order))
|
}
|
||||||
|
elseif ($params['order']->module != $this->name
|
||||||
|
|| !($order = $params['order']) || !Validate::isLoadedObject($order)) {
|
||||||
return false;
|
return false;
|
||||||
elseif (!$order->hasBeenPaid())
|
}
|
||||||
|
elseif (!$order->hasBeenPaid()) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$order_detail = new OrderDetail((int)$params['id_order_detail']);
|
$order_detail = new OrderDetail((int)$params['id_order_detail']);
|
||||||
if (!$order_detail || !Validate::isLoadedObject($order_detail))
|
if (!$order_detail || !Validate::isLoadedObject($order_detail))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$paypal_order = PayPalOrder::getOrderById((int)$order->id);
|
$paypal_order = PayPalOrder::getOrderById((int)$order->id);
|
||||||
if (!$paypal_order)
|
if (!$paypal_order) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$products = $order->getProducts();
|
$products = $order->getProducts();
|
||||||
$cancel_quantity = Tools::getValue('cancelQuantity');
|
$cancel_quantity = Tools::getValue('cancelQuantity');
|
||||||
$message = $this->l('Cancel products result:').'<br>';
|
$message = $this->l('Cancel products result:').'<br>';
|
||||||
|
|
||||||
|
// Get product amount to refund (HT)
|
||||||
$amount = (float)($products[(int)$order_detail->id]['product_price_wt'] * (int)$cancel_quantity[(int)$order_detail->id]);
|
$amount = (float)($products[(int)$order_detail->id]['product_price_wt'] * (int)$cancel_quantity[(int)$order_detail->id]);
|
||||||
|
|
||||||
if ($amount > 0){
|
if ($amount > 0){
|
||||||
$refund = $this->_makeRefund($paypal_order['id_transaction'], (int)$order->id, $amount);
|
$refund = $this->_makeRefund($paypal_order['id_transaction'], (int)$order->id, $amount);
|
||||||
} else {
|
} else {
|
||||||
$refund = array();
|
$refund = array();
|
||||||
$message .= $this->l('Transaction error because of the amount of the cancel product!').'<br>';
|
$message .= $this->l('Transaction error because of the amount of the cancel product!').'<br>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->formatMessage($refund, $message);
|
$this->formatMessage($refund, $message);
|
||||||
$this->_addNewPrivateMessage((int)$order->id, $message);
|
$this->_addNewPrivateMessage((int)$order->id, $message);
|
||||||
}
|
}
|
||||||
@ -1081,22 +1086,33 @@ class PayPal extends PaymentModule
|
|||||||
|
|
||||||
private function _makeRefund($id_transaction, $id_order, $amt = false)
|
private function _makeRefund($id_transaction, $id_order, $amt = false)
|
||||||
{
|
{
|
||||||
if (!$this->isPayPalAPIAvailable())
|
if (!$this->isPayPalAPIAvailable()) {
|
||||||
die(Tools::displayError('Fatal Error: no API Credentials are available'));
|
die(Tools::displayError('Fatal Error: no API Credentials are available'));
|
||||||
elseif (!$id_transaction)
|
}
|
||||||
|
elseif (!$id_transaction) {
|
||||||
die(Tools::displayError('Fatal Error: id_transaction is null'));
|
die(Tools::displayError('Fatal Error: id_transaction is null'));
|
||||||
|
}
|
||||||
|
|
||||||
if (!$amt)
|
// No amount make a total refund
|
||||||
$params = array('TRANSACTIONID' => $id_transaction, 'REFUNDTYPE' => 'Full');
|
if (!$amt) {
|
||||||
else
|
$params = array(
|
||||||
{
|
'TRANSACTIONID' => $id_transaction,
|
||||||
|
'REFUNDTYPE' => 'Full'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
$iso_currency = Db::getInstance()->getValue('
|
$iso_currency = Db::getInstance()->getValue('
|
||||||
SELECT `iso_code`
|
SELECT `iso_code`
|
||||||
FROM `'._DB_PREFIX_.'orders` o
|
FROM `'._DB_PREFIX_.'orders` o
|
||||||
LEFT JOIN `'._DB_PREFIX_.'currency` c ON (o.`id_currency` = c.`id_currency`)
|
LEFT JOIN `'._DB_PREFIX_.'currency` c ON (o.`id_currency` = c.`id_currency`)
|
||||||
WHERE o.`id_order` = '.(int)$id_order);
|
WHERE o.`id_order` = '.(int)$id_order);
|
||||||
|
|
||||||
$params = array('TRANSACTIONID' => $id_transaction, 'REFUNDTYPE' => 'Partial', 'AMT' => (float)$amt, 'CURRENCYCODE' => Tools::strtoupper($iso_currency));
|
$params = array(
|
||||||
|
'TRANSACTIONID' => $id_transaction,
|
||||||
|
'REFUNDTYPE' => 'Partial',
|
||||||
|
'AMT' => (float)$amt,
|
||||||
|
'CURRENCYCODE' => Tools::strtoupper($iso_currency)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$paypal_lib = new PaypalLib();
|
$paypal_lib = new PaypalLib();
|
||||||
@ -1122,53 +1138,69 @@ class PayPal extends PaymentModule
|
|||||||
return $new_message->add();
|
return $new_message->add();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function generateTotalRefund($id_order){
|
public function generateTotalRefund($id_order)
|
||||||
|
{
|
||||||
$this->_doTotalRefund($id_order);
|
$this->_doTotalRefund($id_order);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function _doTotalRefund($id_order)
|
private function _doTotalRefund($id_order)
|
||||||
{
|
{
|
||||||
$paypal_order = PayPalOrder::getOrderById((int)$id_order);
|
$paypal_order = PayPalOrder::getOrderById((int)$id_order);
|
||||||
if (!$this->isPayPalAPIAvailable() || !$paypal_order)
|
if (!$this->isPayPalAPIAvailable() || !$paypal_order) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$order = new Order((int)$id_order);
|
$order = new Order((int)$id_order);
|
||||||
if (!Validate::isLoadedObject($order))
|
if (!Validate::isLoadedObject($order)) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$products = $order->getProducts();
|
$products = $order->getProducts();
|
||||||
$currency = new Currency((int)$order->id_currency);
|
$currency = new Currency((int)$order->id_currency);
|
||||||
if (!Validate::isLoadedObject($currency))
|
if (!Validate::isLoadedObject($currency)) {
|
||||||
$this->_errors[] = $this->l('Not a valid currency');
|
$this->_errors[] = $this->l('Not a valid currency');
|
||||||
|
}
|
||||||
|
|
||||||
if (count($this->_errors))
|
if (count($this->_errors)) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$decimals = (is_array($currency) ? (int)$currency['decimals'] : (int)$currency->decimals) * _PS_PRICE_DISPLAY_PRECISION_;
|
$decimals = (is_array($currency) ? (int)$currency['decimals'] : (int)$currency->decimals) * _PS_PRICE_DISPLAY_PRECISION_;
|
||||||
|
|
||||||
// Amount for refund
|
// Amount for refund
|
||||||
$amt = 0.00;
|
$amt = 0.00;
|
||||||
|
|
||||||
foreach ($products as $product)
|
// Add product price * ( quantity total - quantity already refunded )
|
||||||
|
foreach ($products as $product) {
|
||||||
$amt += (float)($product['product_price_wt']) * ($product['product_quantity'] - $product['product_quantity_refunded']);
|
$amt += (float)($product['product_price_wt']) * ($product['product_quantity'] - $product['product_quantity_refunded']);
|
||||||
|
}
|
||||||
|
// Add shipping, add wrapping, remove discount
|
||||||
$amt += (float)($order->total_shipping) + (float)($order->total_wrapping) - (float)($order->total_discounts);
|
$amt += (float)($order->total_shipping) + (float)($order->total_wrapping) - (float)($order->total_discounts);
|
||||||
|
|
||||||
|
// @todo : add frais de port
|
||||||
|
|
||||||
if ($amt > 0) {
|
if ($amt > 0) {
|
||||||
// check if total or partial
|
// check if total or partial
|
||||||
if (Tools::ps_round($order->total_paid_real, $decimals) == Tools::ps_round($amt, $decimals))
|
if (Tools::ps_round($order->total_paid_real, $decimals) == Tools::ps_round($amt, $decimals)) {
|
||||||
$response = $this->_makeRefund($paypal_order['id_transaction'], $id_order);
|
$response = $this->_makeRefund($paypal_order['id_transaction'], $id_order);
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
$response = $this->_makeRefund($paypal_order['id_transaction'], $id_order, (float)($amt));
|
$response = $this->_makeRefund($paypal_order['id_transaction'], $id_order, (float)($amt));
|
||||||
|
}
|
||||||
|
|
||||||
$message = $this->l('Refund operation result:').'<br>';
|
$message = $this->l('Refund operation result:').'<br>';
|
||||||
foreach ($response as $key => $value)
|
foreach ($response as $key => $value) {
|
||||||
$message .= $key.': '.$value.'<br>';
|
$message .= $key.': '.$value.'<br>';
|
||||||
|
}
|
||||||
|
|
||||||
if (array_key_exists('ACK', $response) && $response['ACK'] == 'Success' && $response['REFUNDTRANSACTIONID'] != '')
|
if (array_key_exists('ACK', $response) && $response['ACK'] == 'Success' && $response['REFUNDTRANSACTIONID'] != '')
|
||||||
{
|
{
|
||||||
$message .= $this->l('PayPal refund successful!');
|
$message .= $this->l('PayPal refund successful!');
|
||||||
if (!Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'paypal_order` SET `payment_status` = \'Refunded\' WHERE `id_order` = '.(int)$id_order))
|
if (!Db::getInstance()->Execute(
|
||||||
|
'UPDATE `'._DB_PREFIX_.'paypal_order` SET `payment_status` = \'Refunded\'
|
||||||
|
WHERE `id_order` = '.(int)$id_order)) {
|
||||||
die(Tools::displayError('Error when updating PayPal database'));
|
die(Tools::displayError('Error when updating PayPal database'));
|
||||||
|
}
|
||||||
|
|
||||||
$history = new OrderHistory();
|
$history = new OrderHistory();
|
||||||
$history->id_order = (int)$id_order;
|
$history->id_order = (int)$id_order;
|
||||||
@ -1176,8 +1208,9 @@ class PayPal extends PaymentModule
|
|||||||
$history->addWithemail();
|
$history->addWithemail();
|
||||||
$history->save();
|
$history->save();
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
$message .= $this->l('Transaction error!');
|
$message .= $this->l('Transaction error!');
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$message = $this->l('Refund operation result:').'<br>';
|
$message = $this->l('Refund operation result:').'<br>';
|
||||||
$message .= $this->l('Transaction error because of the amount (amt)!');
|
$message .= $this->l('Transaction error because of the amount (amt)!');
|
||||||
|
Loading…
Reference in New Issue
Block a user