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 * * * +