diff --git a/Cron/CurrenciesCron.php b/Cron/CurrenciesCron.php
new file mode 100644
index 000000000..f0238081f
--- /dev/null
+++ b/Cron/CurrenciesCron.php
@@ -0,0 +1,108 @@
+
+ * @copyright 2020 Nosto Solutions Ltd
+ * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause
+ *
+ */
+
+namespace Nosto\Tagging\Cron;
+
+use Exception;
+use Nosto\Operation\UpdateSettings;
+use Nosto\Tagging\Helper\Account as NostoHelperAccount;
+use Nosto\Tagging\Helper\Scope as NostoHelperScope;
+use Nosto\Tagging\Logger\Logger as NostoLogger;
+use Nosto\Tagging\Model\Meta\Account\Settings\Builder as NostoSettingsBuilder;
+use Nosto\Tagging\Model\Meta\Account\Settings\Currencies\Builder as NostoCurrenciesBuilder;
+
+/**
+ * Cronjob class that periodically updates currencies used in the store
+ */
+class CurrenciesCron
+{
+ protected NostoLogger $logger;
+ private NostoCurrenciesBuilder $nostoCurrenciesBuilder;
+ private NostoHelperScope $nostoHelperScope;
+ private NostoHelperAccount $nostoHelperAccount;
+ private NostoSettingsBuilder $nostoSettingsBuilder;
+
+ /**
+ * CurrenciesCron constructor.
+ *
+ * @param NostoLogger $logger
+ * @param NostoHelperScope $nostoHelperScope
+ * @param NostoCurrenciesBuilder $nostoCurrenciesBuilder
+ * @param NostoHelperAccount $nostoHelperAccount
+ * @param NostoSettingsBuilder $nostoSettingsBuilder
+ */
+ public function __construct(
+ NostoLogger $logger,
+ NostoHelperScope $nostoHelperScope,
+ NostoCurrenciesBuilder $nostoCurrenciesBuilder,
+ NostoHelperAccount $nostoHelperAccount,
+ NostoSettingsBuilder $nostoSettingsBuilder
+ ) {
+ $this->logger = $logger;
+ $this->nostoHelperScope = $nostoHelperScope;
+ $this->nostoCurrenciesBuilder = $nostoCurrenciesBuilder;
+ $this->nostoHelperAccount = $nostoHelperAccount;
+ $this->nostoSettingsBuilder = $nostoSettingsBuilder;
+ }
+
+ public function execute(): void
+ {
+ $this->logger->info('Updating currencies to Nosto for all store views');
+ foreach ($this->nostoHelperScope->getStores(false) as $store) {
+ $this->logger->info('Updating currencies for ' . $store->getName());
+ if ($account = $this->nostoHelperAccount->findAccount($store)) {
+ try {
+ $settings = $this->nostoSettingsBuilder->build($store);
+ $settings->setCurrencies($this->nostoCurrenciesBuilder->build($store));
+ $service = new UpdateSettings($account);
+ $service->update($settings);
+ } catch (Exception $e) {
+ $this->logger->error(sprintf(
+ 'Unable to update the currencies for the store view %s. Message was: %s',
+ $store->getName(),
+ $e->getMessage()
+ ));
+ }
+ } else {
+ $this->logger->info(sprintf(
+ 'Skipping update; an account doesn\'t exist for %s',
+ $store->getName()
+ ));
+ }
+ }
+ }
+}
diff --git a/Model/Meta/Account/Settings/Builder.php b/Model/Meta/Account/Settings/Builder.php
index 01c8a2300..7e7bcee2c 100644
--- a/Model/Meta/Account/Settings/Builder.php
+++ b/Model/Meta/Account/Settings/Builder.php
@@ -47,13 +47,11 @@
use Nosto\Tagging\Helper\Data as NostoDataHelper;
use Nosto\Tagging\Helper\Variation as NostoVariationHelper;
use Nosto\Tagging\Logger\Logger as NostoLogger;
-use Nosto\Tagging\Model\Meta\Account\Settings\Currencies\Builder as NostoCurrenciesBuilder;
class Builder
{
private NostoLogger $logger;
private ManagerInterface $eventManager;
- private NostoCurrenciesBuilder $nostoCurrenciesBuilder;
private NostoHelperCurrency $nostoHelperCurrency;
private NostoDataHelper $nostoDataHelper;
private NostoVariationHelper $nostoVariationHelper;
@@ -63,7 +61,6 @@ class Builder
* @param NostoLogger $logger
* @param ManagerInterface $eventManager
* @param NostoHelperCurrency $nostoHelperCurrency
- * @param NostoCurrenciesBuilder $nostoCurrenciesBuilder
* @param NostoDataHelper $nostoDataHelper
* @param NostoVariationHelper $nostoVariationHelper
*/
@@ -71,13 +68,11 @@ public function __construct(
NostoLogger $logger,
ManagerInterface $eventManager,
NostoHelperCurrency $nostoHelperCurrency,
- NostoCurrenciesBuilder $nostoCurrenciesBuilder,
NostoDataHelper $nostoDataHelper,
NostoVariationHelper $nostoVariationHelper
) {
$this->logger = $logger;
$this->eventManager = $eventManager;
- $this->nostoCurrenciesBuilder = $nostoCurrenciesBuilder;
$this->nostoHelperCurrency = $nostoHelperCurrency;
$this->nostoDataHelper = $nostoDataHelper;
$this->nostoVariationHelper = $nostoVariationHelper;
@@ -102,7 +97,7 @@ public function build(Store $store)
} elseif ($this->nostoDataHelper->isPricingVariationEnabled($store)) {
$settings->setDefaultVariantId($this->nostoVariationHelper->getDefaultVariationCode());
}
- $settings->setCurrencies($this->nostoCurrenciesBuilder->build($store));
+ // Currencies are build in CurrenciesCron to avoid increased loading times when logging into the admin
} catch (Exception $e) {
$this->logger->exception($e);
}
diff --git a/etc/crontab.xml b/etc/crontab.xml
index 3e9f51951..b3cb11b91 100644
--- a/etc/crontab.xml
+++ b/etc/crontab.xml
@@ -41,5 +41,8 @@
4 * * * *
+
+ 0 1 * * *
+