Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 1 addition & 10 deletions classes/models/LengowHook.php
Original file line number Diff line number Diff line change
Expand Up @@ -408,9 +408,7 @@ public function hookDisplayAdminOrderTabLink(array $params): string
}

$hasContent = $marketplace->hasReturnTrackingNumber()
|| $marketplace->hasReturnTrackingCarrier()
|| !empty($marketplace->getRefundReasons())
|| !empty($marketplace->getRefundModes());
|| $marketplace->hasReturnTrackingCarrier();

if (!$hasContent) {
return '';
Expand Down Expand Up @@ -445,9 +443,6 @@ public function hookDisplayAdminOrderTabContent(array $params): string

$isActiveReturnTrackingNumber = $marketplace->hasReturnTrackingNumber();
$isActiveReturnCarrier = $marketplace->hasReturnTrackingCarrier();
$refundReasons = $marketplace->getRefundReasons();
$refundModes = $marketplace->getRefundModes();
$refundSelectedDatas = $lengowOrder->getRefundDataFromLengowOrder($idOrder, $marketplace->name);

$locale = new LengowTranslation();

Expand All @@ -461,10 +456,6 @@ public function hookDisplayAdminOrderTabContent(array $params): string
'returnTrackingNumberLabel' => $locale->t('order.screen.return_tracking_number_label'),
'returnCarrierLabel' => $locale->t('order.screen.return_carrier_label'),
'carriers' => $isActiveReturnCarrier ? LengowCarrier::getCarriersChoices($this->context->language->id) : [],
'refundReasons' => $refundReasons,
'refundModes' => $refundModes,
'refundReasonSelected' => $refundSelectedDatas['refund_reason'] ?? '',
'refundModeSelected' => $refundSelectedDatas['refund_mode'] ?? '',
]);

return $this->module->display(_PS_MODULE_LENGOW_DIR_, 'views/templates/hook/order/admin_order_tab.tpl');
Expand Down
74 changes: 61 additions & 13 deletions classes/models/LengowMarketplace.php
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ public function __construct(string $name)
: '';
$acceptFreeValue = !isset($argDescription->accept_free_values)
|| (bool) $argDescription->accept_free_values;
$this->argValues[(string) $argKey] = [
$this->argValues[(string) $key][(string) $argKey] = [
'default_value' => $defaultValue,
'accept_free_values' => $acceptFreeValue,
'valid_values' => $validValues,
Expand Down Expand Up @@ -246,17 +246,27 @@ public function getAction(string $name): array|false
* Get the default value for argument
*
* @param string $name argument's name
* @param string $action optional action context (ship / cancel / refund)
*
* @return string|false
*/
public function getDefaultValue(string $name): string|false
public function getDefaultValue(string $name, string $action = ''): string|false
{
if (array_key_exists($name, $this->argValues)) {
$defaultValue = $this->argValues[$name]['default_value'];
if ($action !== '' && isset($this->argValues[$action][$name])) {
$defaultValue = $this->argValues[$action][$name]['default_value'];
if (!empty($defaultValue)) {
return $defaultValue;
}
}
// Fallback: search across all actions (backward compatibility)
foreach ($this->argValues as $actionArgs) {
if (isset($actionArgs[$name])) {
$defaultValue = $actionArgs[$name]['default_value'];
if (!empty($defaultValue)) {
return $defaultValue;
}
}
}

return false;
}
Expand Down Expand Up @@ -553,12 +563,17 @@ protected function getAllParams(string $action, LengowOrder $lengowOrder, array
break;
case LengowAction::ARG_REFUND_REASON:
case LengowAction::ARG_REASON:
$params[$arg] = $lengowOrder->getRefundReasonByPrestashopId((int) $lengowOrder->lengowId)
?? $this->getDefaultValue((string) $arg);
$savedReason = $lengowOrder->getRefundReasonByPrestashopId((int) $lengowOrder->lengowId);
$reasonValue = $savedReason ?: $this->getDefaultValue((string) $arg, $action);
if ($reasonValue !== false && $reasonValue !== '') {
$params[$arg] = $reasonValue;
} elseif (isset($actions['optional_args']) && in_array($arg, $actions['optional_args'], true)) {
break;
}
break;
case LengowAction::ARG_REFUND_MODE:
$params[$arg] = $lengowOrder->getRefundModeByPrestashopId((int) $lengowOrder->lengowId)
?? $this->getDefaultValue((string) $arg);
?? $this->getDefaultValue((string) $arg, $action);
break;
default:
if (isset($actions['optional_args']) && in_array($arg, $actions['optional_args'], true)) {
Expand Down Expand Up @@ -599,7 +614,7 @@ protected function getAllParamsForPartialRefund(string $action, LengowOrder $len
case LengowAction::ARG_REFUND_REASON:
case LengowAction::ARG_REASON:
$params[$arg] = $lengowOrder->getRefundReasonByPrestashopId((int) $lengowOrder->lengowId)
?? $this->getDefaultValue((string) $arg);
?? $this->getDefaultValue((string) $arg, LengowAction::TYPE_REFUND);
break;
case LengowAction::ARG_REFUND_PRICE:
$params[$arg] = $decodedExtra['total_order'] ?? 0.00;
Expand All @@ -612,7 +627,7 @@ protected function getAllParamsForPartialRefund(string $action, LengowOrder $len
break;
case LengowAction::ARG_REFUND_MODE:
$params[$arg] = $lengowOrder->getRefundModeByPrestashopId((int) $lengowOrder->lengowId)
?? $this->getDefaultValue((string) $arg);
?? $this->getDefaultValue((string) $arg, LengowAction::TYPE_REFUND);
break;
case LengowAction::ARG_REFUND_SHIPPING_PRICE:
$params[$arg] = (float) $shippingPriceTTC;
Expand Down Expand Up @@ -922,9 +937,13 @@ public function getRefundReasons(): array
$locale = new LengowTranslation();
$choices = [$locale->t('order.screen.refund_reason_label') => ''];
$arguments = $this->getMarketplaceArguments(LengowAction::TYPE_REFUND);
$reasons = in_array(LengowAction::ARG_REFUND_REASON, $arguments) ? $this->argValues[LengowAction::ARG_REFUND_REASON]['valid_values'] : [];
$reasons = in_array(LengowAction::ARG_REFUND_REASON, $arguments)
? ($this->argValues[LengowAction::TYPE_REFUND][LengowAction::ARG_REFUND_REASON]['valid_values'] ?? [])
: [];
if (empty($reasons)) {
$reasons = in_array(LengowAction::ARG_REASON, $arguments) ? $this->argValues[LengowAction::ARG_REASON]['valid_values'] : [];
$reasons = in_array(LengowAction::ARG_REASON, $arguments)
? ($this->argValues[LengowAction::TYPE_REFUND][LengowAction::ARG_REASON]['valid_values'] ?? [])
: [];
}
if (empty($reasons)) {
return [];
Expand All @@ -936,6 +955,33 @@ public function getRefundReasons(): array
return $choices;
}

/**
* Get all cancel reasons choices
*
* @return array<string, mixed>
*/
public function getCancelReasons(): array
{
$action = $this->getAction(LengowAction::TYPE_CANCEL);
if (!$action) {
return [];
}
$locale = new LengowTranslation();
$choices = [$locale->t('order.screen.cancel_reason_label') => ''];
$arguments = $this->getMarketplaceArguments(LengowAction::TYPE_CANCEL);
$reasons = in_array(LengowAction::ARG_REASON, $arguments)
? ($this->argValues[LengowAction::TYPE_CANCEL][LengowAction::ARG_REASON]['valid_values'] ?? [])
: [];
if (empty($reasons)) {
return [];
}
foreach ($reasons as $key => $reason) {
$choices[$reason] = $key;
}

return $choices;
}

/**
* Will return all refund modes for cdsicount
*
Expand All @@ -949,7 +995,9 @@ public function getRefundModes(): array
}
$locale = new LengowTranslation();
$arguments = $this->getMarketplaceArguments(LengowAction::TYPE_REFUND);
$modes = in_array(LengowAction::ARG_REFUND_MODE, $arguments) ? $this->argValues[LengowAction::ARG_REFUND_MODE]['valid_values'] : [];
$modes = in_array(LengowAction::ARG_REFUND_MODE, $arguments)
? ($this->argValues[LengowAction::TYPE_REFUND][LengowAction::ARG_REFUND_MODE]['valid_values'] ?? [])
: [];
$choices = [$locale->t('order.screen.refund_mode_label') => ''];
if (empty($modes)) {
return [];
Expand All @@ -975,7 +1023,7 @@ public function getRefundArguments(): array
}
$arguments = $this->getMarketplaceArguments(LengowAction::TYPE_REFUND);

return array_intersect($arguments, array_keys($this->argValues));
return array_intersect($arguments, array_keys($this->argValues[LengowAction::TYPE_REFUND] ?? []));
}

/**
Expand Down
22 changes: 18 additions & 4 deletions classes/models/LengowOrder.php
Original file line number Diff line number Diff line change
Expand Up @@ -1295,6 +1295,18 @@ public static function countOrderToBeSent(): int
return (int) $row['total'];
}

/**
* Get the cancel reason from the Lengow orders table (stored in the shared refund_reason column)
*
* @param int $idOrder PrestaShop order id
*
* @return string|null
*/
public static function getCancelReasonByPrestashopId(int $idOrder): ?string
{
return self::getRefundReasonByPrestashopId($idOrder);
}

/**
* Get the refund reason from the Lengow orders table
*
Expand Down Expand Up @@ -1373,14 +1385,16 @@ public function getRefundDataFromLengowOrder(int $orderId, string $marketplaceNa

if (!$result) {
return [
'refund_reason' => [],
'refund_mode' => [],
'refund_reason' => '',
'refund_mode' => '',
'cancel_reason' => '',
];
}

return [
'refund_reason' => $result['refund_reason'] ?? [],
'refund_mode' => $result['refund_mode'] ?? [],
'refund_reason' => $result['refund_reason'] ?? '',
'refund_mode' => $result['refund_mode'] ?? '',
'cancel_reason' => $result['refund_reason'] ?? '',
];
}

Expand Down
4 changes: 4 additions & 0 deletions config/admin/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ services:
class: PrestaShop\Module\Lengow\Controller\Admin\LengowOrderAdminController
public: true
tags: ['controller.service_arguments']
arguments:
- '@prestashop.adapter.legacy.context'
- '@twig'
- '@PrestaShop\Module\Lengow\Service\OrderRefundDataUpdater'
PrestaShop\Module\Lengow\Controller\Admin\LengowOrderSettingAdminController:
class: PrestaShop\Module\Lengow\Controller\Admin\LengowOrderSettingAdminController
public: true
Expand Down
19 changes: 10 additions & 9 deletions config/checkmd5.csv
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
/lengow.php|bcddd149ff8cb4c6892b7e1d207ac3fa
/loader.php|b3d94d65d0a074088758bc1e50736a01
/config/index.php|be8b25f88c14bddd7711e4585ebae316
/translations/en.csv|81b2e2ef964f1081ff0f455b22a99d42
/translations/es.csv|213e98bd91d287476e23a155844ed0ae
/translations/fr.csv|a58e1647eaa7fdc493c171860eca27e2
/translations/en.csv|2d407494a45d6d5247f9df2ae25f14bb
/translations/es.csv|d2b98d9a2d61f16d7923e64b3c54b3bd
/translations/fr.csv|ec528396f3a42d453511486433beb717
/translations/index.php|be8b25f88c14bddd7711e4585ebae316
/translations/it.csv|8f3106c2c9c88c6b7f40ccb24aec629b
/translations/it.csv|8fedd3707afac47a8833e709ea127b78
/classes/controllers/LengowOrderController.php|1b6b5b8a2fc59948489fda8c321befde
/classes/controllers/LengowDashboardController.php|ebe6a9d71e4a9be250061d96ec23b9ca
/classes/controllers/LengowLegalsController.php|14effece7503b9524c83f628d255d146
Expand All @@ -22,19 +22,19 @@
/classes/controllers/index.php|a90243841e2e64a4ee2965d4dfa12491
/classes/controllers/LengowFeedController.php|41b4db4ac3a070ee3cc599044b51f75d
/classes/models/LengowCustomer.php|78579376c21dce9dcea169e642d9802c
/classes/models/LengowHook.php|7e17d9ebfa664d8689fec493745a3900
/classes/models/LengowHook.php|21b50bbcf412fae023548eab9f4a5e43
/classes/models/LengowOrderDetail.php|a51019c529e83b2f0eda9e8d713dbd3d
/classes/models/LengowImport.php|9a106938d503900de7807abf00ac9c6f
/classes/models/LengowInstall.php|be765799d993e72a2656cb2f84f81579
/classes/models/LengowConfiguration.php|25df6dedabd775a60420e8c263751278
/classes/models/LengowMain.php|058ddf81649f4a53b93bddefaa6f4129
/classes/models/LengowAction.php|0e51cdaa86b88539c40c7c5273fb8c0d
/classes/models/LengowOrder.php|e7d80bb7b25ca35d2d5958ad71aaf26d
/classes/models/LengowOrder.php|b1824154437ff4d8c9bb5770c3b4ffe7
/classes/models/LengowList.php|071e3d48dfe8f4517374bc57718059b5
/classes/models/LengowOrderCarrier.php|130bddda8e7a344fc2153cb1d55b58f3
/classes/models/LengowOrderError.php|7ab270578749382990d67e7dcc3c3d50
/classes/models/LengowImportOrder.php|1aedede7194e7c832405f86eb7451902
/classes/models/LengowMarketplace.php|a2175dbe84b063c5097745e13dacb025
/classes/models/LengowMarketplace.php|e0872ec2adc322a65ce7c15148e5e958
/classes/models/LengowMethod.php|fad805cab01bc5ad136066b65e265f3d
/classes/models/LengowToolbox.php|0a7e1d3cd33ccaa8948c8c48b1893617
/classes/models/LengowProduct.php|9a53599f08f1b931ed462e1887722deb
Expand All @@ -47,7 +47,7 @@
/classes/models/LengowSync.php|0a1a7b2e3922fd50e5768d7846e17175
/classes/models/LengowExport.php|a5e89e32339b8b6d0c84beeff2f5fedb
/classes/models/LengowLink.php|bdbc53d7f8c0d25ded5203e321c2933c
/classes/models/LengowConnector.php|0746d2e0d7b4de082f5447567392444d
/classes/models/LengowConnector.php|8f7b3e57cc20bd9a0a48498f29ade5ca
/classes/models/LengowTranslation.php|8664ba0942d6ebaee4e66384df308a1f
/classes/models/LengowFile.php|b49c051be110d6dd977826d9c5076fea
/classes/models/LengowAddress.php|59d6f28bc5dfc1ba4582a416564785e5
Expand Down Expand Up @@ -385,6 +385,7 @@
/views/img/unplugged.png|55b5eeee08952d538185a659abbbb932
/views/img/index.php|be8b25f88c14bddd7711e4585ebae316
/views/img/home-orders.png|db05b21ec6b166d844b42c0e807cb265
/views/PrestaShop/Admin/Sell/Order/Order/Blocks/View/order_actions.html.twig|fa6aae9ca4f5dd38d422c7f4a700038f
/views/PrestaShop/Admin/Sell/Order/Order/Blocks/View/Modal/index.php|be8b25f88c14bddd7711e4585ebae316
/views/PrestaShop/Admin/Sell/Order/Order/Blocks/View/index.php|be8b25f88c14bddd7711e4585ebae316
/views/PrestaShop/Admin/Sell/Order/Order/Blocks/index.php|be8b25f88c14bddd7711e4585ebae316
Expand Down Expand Up @@ -477,7 +478,7 @@
/views/templates/front/tagpage.tpl|f040d02eb2f79ed7d50e72f7f707db0e
/views/templates/front/index.php|be8b25f88c14bddd7711e4585ebae316
/views/templates/hook/order/admin_order_side.tpl|88fc73bbfd960cc7b37165801151a387
/views/templates/hook/order/admin_order_tab.tpl|dde75b9aab71dec0b10131e2c4a3d361
/views/templates/hook/order/admin_order_tab.tpl|d79c6736125bb1a341f5d47a02fed28c
/views/templates/hook/order/index.php|be8b25f88c14bddd7711e4585ebae316
/views/templates/hook/index.php|be8b25f88c14bddd7711e4585ebae316
/views/templates/index.php|be8b25f88c14bddd7711e4585ebae316
Expand Down
18 changes: 18 additions & 0 deletions config/routes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,21 @@ lengow_toolbox:
_controller: 'PrestaShop\Module\Lengow\Controller\Admin\LengowToolboxAdminController::indexAction'
_legacy_controller: AdminLengowToolbox
_legacy_link: AdminLengowToolbox

lengow_order_reasons:
path: /lengow/order-reasons/{orderId}
methods: [ GET ]
defaults:
_controller: 'PrestaShop\Module\Lengow\Controller\Admin\LengowOrderAdminController::getOrderReasonsAction'

lengow_save_refund_reason:
path: /lengow/save-refund-reason
methods: [ POST ]
defaults:
_controller: 'PrestaShop\Module\Lengow\Controller\Admin\LengowOrderAdminController::saveRefundReasonAction'

lengow_save_refund_mode:
path: /lengow/save-refund-mode
methods: [ POST ]
defaults:
_controller: 'PrestaShop\Module\Lengow\Controller\Admin\LengowOrderAdminController::saveRefundModeAction'
Loading
Loading