Skip to content
Snippets Groups Projects

Issue #3501302: Support non-USD currencies in the "Change price in cart" action

1 file
+ 28
1
Compare changes
  • Side-by-side
  • Inline
@@ -8,6 +8,7 @@ use Drupal\Core\Session\AccountInterface;
use Drupal\commerce_order\Entity\OrderItemInterface;
use Drupal\commerce_price\Price;
use Drupal\eca\Plugin\Action\ConfigurableActionBase;
use Drupal\eca\Plugin\ECA\PluginFormTrait;
/**
* Describes the eca_commerce change_price_in_cart action.
@@ -23,6 +24,9 @@ use Drupal\eca\Plugin\Action\ConfigurableActionBase;
*/
class ChangePriceInCartAction extends ConfigurableActionBase {
use CurrencyActionTrait;
use PluginFormTrait;
/**
* {@inheritdoc}
*/
@@ -40,7 +44,13 @@ class ChangePriceInCartAction extends ConfigurableActionBase {
$newPrice = $this->tokenService->replace($this->configuration['final_price']);
$newPrice = str_replace('$', '', $newPrice);
$newPrice = new Price($newPrice, 'USD');
$fallback_currency = $this->getFallbackCurrency($entity);
$currency = $this->configuration['currency'] ?: $fallback_currency;
if ($currency === '_eca_token') {
$currency = $this->getTokenValue('currency', $fallback_currency);
}
$newPrice = new Price($newPrice, $currency);
$entity->setUnitPrice($newPrice, TRUE);
$entity->save();
}
@@ -52,6 +62,7 @@ class ChangePriceInCartAction extends ConfigurableActionBase {
public function defaultConfiguration(): array {
return [
'final_price' => '',
'currency' => '',
] + parent::defaultConfiguration();
}
@@ -65,6 +76,15 @@ class ChangePriceInCartAction extends ConfigurableActionBase {
'#title' => $this->t('Final Price'),
'#default_value' => $this->configuration['final_price'],
];
$form['currency'] = [
'#type' => 'select',
'#title' => $this->t('Currency'),
'#options' => ['_none' => 'Use default'] + $this->getAvailableCurrencies(),
'#default_value' => $this->configuration['currency'],
'#size' => 5,
'#required' => TRUE,
'#eca_token_select_option' => TRUE,
];
return parent::buildConfigurationForm($form, $form_state);
}
@@ -73,6 +93,13 @@ class ChangePriceInCartAction extends ConfigurableActionBase {
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state): void {
$this->configuration['final_price'] = $form_state->getValue('final_price');
if ($form_state->getValue('currency') === '_none') {
$currency = '';
}
else {
$currency = $form_state->getValue('currency');
}
$this->configuration['currency'] = $currency;
parent::submitConfigurationForm($form, $form_state);
}
Loading