Scheduled prices feature integration
- Updated On 27 Aug 2020
- 4 Minutes To Read
-
Print
-
DarkLight
Install Feature Core
Prerequisites
To start feature integration, review and install the necessary features:
Name | Version |
---|---|
Spryker Core | master |
Product | master |
Price | master |
1) Install the Required Modules Using Composer
Run the following command to install the required modules:
composer require spryker-feature/scheduled-prices:"^master" --update-with-dependencies
Module | Expected Directory |
---|---|
PriceProductSchedule | vendor/spryker/price-product-schedule |
PriceProductScheduleDataImport | vendor/spryker/price-product-schedule-data-import |
PriceProductScheduleGui | vendor/spryker/price-product-schedule-gui |
2) Set up Database Schema and Transfer Objects
Run the following commands to:
- apply database changes
- generate entity and transfer changes
console transfer:generate
console propel:install
console transfer:generate
Database Entity | Type | Event |
---|---|---|
spy_price_product_schedule | table | created |
spy_price_product_schedule_list | table | created |
Transfer | Type | Event | Path |
---|---|---|---|
PriceProductScheduleTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleTransfer |
PriceProductScheduleCsvValidationResultTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleCsvValidationResultTransfer |
PriceProductScheduleImportTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleImportTransfer |
PriceProductScheduleImportMetaDataTransfer | |||
PriceProductScheduleImportTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleImportMetaDataTransfer |
PriceProductScheduleListTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleListTransfer |
PriceProductScheduleListResponseTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleListResponseTransfer |
PriceProductScheduleListImportRequestTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleListImportRequestTransfer |
PriceProductScheduleListImportErrorTransfer | |||
PriceProductScheduleImportTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleListImportErrorTransfer |
PriceProductScheduleListImportResponseTransfer | |||
PriceProductScheduleImportTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleListImportResponseTransfer |
PriceProductScheduleListMetaDataTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleListMetaDataTransfer |
PriceProductScheduleCriteriaFilterTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleCriteriaFilterTransfer |
PriceProductScheduleResponseTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleResponseTransfer |
PriceProductScheduleErrorTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleErrorTransfer |
PriceProductScheduleRedirectTransfer | class | created | src/Generated/Shared/Transfer/PriceProductScheduleRedirectTransfer |
SpyPriceProductScheduleEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyPriceProductScheduleEntityTransfer |
SpyPriceProductScheduleListEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyPriceProductScheduleListEntityTransfer |
3) Import Data
Import Price Product Schedules
Prepare your data according to your requirements using our demo data:
vendor/spryker/spryker/Bundles/PriceProductScheduleDataImport/data/import
abstract_sku,concrete_sku,price_type,store,currency,value_net,value_gross,from_included,to_included
001,,DEFAULT,DE,CHF,9832,10924,2019-01-01T00:00:00-00:00,2019-12-31T23:59:59-00:00
001,,DEFAULT,DE,CHF,7762,8624,2019-05-01T00:00:00-00:00,2019-06-30T23:59:59-00:00
001,,DEFAULT,DE,CHF,3881,4312,2019-06-23T00:00:00-00:00,2019-07-19T23:59:59-00:00
001,,DEFAULT,DE,EUR,8549,9499,2019-01-01T00:00:00-00:00,2019-12-31T23:59:59-00:00
001,,DEFAULT,DE,EUR,6749,7499,2019-05-01T00:00:00-00:00,2019-06-30T23:59:59-00:00
001,,DEFAULT,DE,EUR,3375,3750,2019-06-23T00:00:00-00:00,2019-07-19T23:59:59-00:00
,060_26027598,DEFAULT,DE,CHF,30902,34337,2019-05-01T00:00:00-00:00,2019-06-30T23:59:59-00:00
,060_26027598,DEFAULT,DE,CHF,15451,17169,2019-06-23T00:00:00-00:00,2019-07-19T23:59:59-00:00
,060_26175504,DEFAULT,AT,CHF,32909,36566,2019-01-01T00:00:00-00:00,2019-12-31T23:59:59-00:00
,060_26175504,DEFAULT,AT,CHF,25981,28868,2019-05-01T00:00:00-00:00,2019-06-30T23:59:59-00:00
,060_26175504,DEFAULT,AT,CHF,12991,14434,2019-06-23T00:00:00-00:00,2019-07-19T23:59:59-00:00
,060_26175504,DEFAULT,AT,EUR,28616,31797,2019-01-01T00:00:00-00:00,2019-12-31T23:59:59-00:00
,060_26175504,DEFAULT,AT,EUR,22592,25103,2019-05-01T00:00:00-00:00,2019-06-30T23:59:59-00:00
,060_26175504,DEFAULT,AT,EUR,11296,12552,2019-06-23T00:00:00-00:00,2019-07-19T23:59:59-00:00
Column | Is Obligatory? | Data Type | Data Example | Data Explanation |
---|---|---|---|---|
abstract_sku |
optional | string | 001 | Existing abstract product SKU of the scheduled price. |
concrete_sku |
optional | string | 060_26027598 | Existing concrete product SKU of the scheduled price. |
price_type |
mandatory | string | DEFAULT | Name of a price type. By default, it's "DEFAULT", but can be project specific (strike, sale, ...). |
store |
mandatory | string | DE | Store name of the scheduled price. |
currency |
mandatory | string | CHF | Currency ISO code. |
value_net |
optional | integer | 9832 | Net price in cents. |
value_gross |
optional | integer | 10924 | Gross price in cents. |
from_included |
mandatory | datetime | 2019-01-01T00:00:00-00:00 | Start date of the scheduled price (should be less than to_included ). |
to_included |
mandatory | datetime | 2019-12-31T23:59:59-00:00 | End date of the scheduled price. |
Register the following plugin to enable data import:
Plugin | Specification | Prerequisites | Namespace |
---|---|---|---|
PriceProductScheduleDataImportPlugin |
Imports scheduled prices data into database. | None | \Spryker\Zed\PriceProductScheduleDataImport\Communication\Plugin |
src/Pyz/Zed/DataImport/DataImportDependencyProvider.php
<?php
namespace Pyz\Zed\DataImport;
use Spryker\Zed\DataImport\DataImportDependencyProvider as SprykerDataImportDependencyProvider;
use Spryker\Zed\PriceProductScheduleDataImport\Communication\Plugin\PriceProductScheduleDataImportPlugin;
class DataImportDependencyProvider extends SprykerDataImportDependencyProvider
{
/**
* @return array
*/
protected function getDataImporterPlugins(): array
{
return [
new PriceProductScheduleDataImportPlugin(),
];
}
}
Run the following console command to import data:
console data:import:product-price-schedule
spy_price_product_schedule
table in the database.
4) Set up Behavior
Enable the following behaviors by registering the console commands, view and tab plugins:
Plugin | Specification | Prerequisites | Namespace |
---|---|---|---|
PriceProductScheduleApplyConsole |
|
None | Spryker\Zed\PriceProductSchedule\Communication\Console |
PriceProductScheduleCleanupConsole |
Deletes scheduled prices that have ended for the number of days provided as a parameter starting from the current date. | None | Spryker\Zed\PriceProductSchedule\Communication\Console |
ScheduledPriceProductConcreteFormEditTabsExpanderPlugin |
Expands product concrete Edit Product page with the Scheduled Prices tab. | None | Spryker\Zed\PriceProductScheduleGui\Communication\Plugin\ProductManagement |
ScheduledPriceProductAbstractFormEditTabsExpanderPlugin |
Expands product abstract Edit Product page with the Scheduled Prices tab. | None | Spryker\Zed\PriceProductScheduleGui\Communication\Plugin\ProductManagement |
ScheduledPriceProductAbstractEditViewExpanderPlugin |
Expands the Scheduled Prices tab of the Edit Product abstract page with scheduled prices data. | None | Spryker\Zed\PriceProductScheduleGui\Communication\Plugin\ProductManagement |
ScheduledPriceProductConcreteEditViewExpanderPlugin |
Expands the Scheduled Prices tab of the Edit Product concrete page with the scheduled prices data. | None | Spryker\Zed\PriceProductScheduleGui\Communication\Plugin\ProductManagement |
src/Pyz/Zed/Console/ConsoleDependencyProvider.php
<?php
namespace Pyz\Zed\Console;
use Spryker\Zed\Console\ConsoleDependencyProvider as SprykerConsoleDependencyProvider;
use Spryker\Zed\DataImport\Communication\Console\DataImportConsole;
use Spryker\Zed\PriceProductScheduleDataImport\PriceProductScheduleDataImportConfig;
use Spryker\Zed\PriceProductSchedule\Communication\Console\PriceProductScheduleApplyConsole;
use Spryker\Zed\PriceProductSchedule\Communication\Console\PriceProductScheduleCleanupConsole;
class ConsoleDependencyProvider extends SprykerConsoleDependencyProvider
{
/**
* @param \Spryker\Zed\Kernel\Container $container
*
* @return \Symfony\Component\Console\Command\Command[]
*/
protected function getConsoleCommands(Container $container)
{
$commands = [
new DataImportConsole(DataImportConsole::DEFAULT_NAME . ':' . PriceProductScheduleDataImportConfig::IMPORT_TYPE_PRODUCT_PRICE_SCHEDULE),
new PriceProductScheduleApplyConsole(),
new PriceProductScheduleCleanupConsole()
];
return $commands;
}
}
src/Pyz/Zed/PriceProductScheduleDataImport/PriceProductScheduleDataImportConfig.php
<?php
namespace Pyz\Zed\PriceProductScheduleDataImport;
use Spryker\Zed\PriceProductScheduleDataImport\PriceProductScheduleDataImportConfig as SprykerPriceProductScheduleDataImportConfig;
class PriceProductScheduleDataImportConfig extends SprykerPriceProductScheduleDataImportConfig
{
/**
* @return string
*/
protected function getModuleRoot(): string
{
$moduleRoot = realpath(APPLICATION_ROOT_DIR);
return $moduleRoot . DIRECTORY_SEPARATOR;
}
}
src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php
<?php
namespace Pyz\Zed\ProductManagement;
use Spryker\Zed\ProductManagement\ProductManagementDependencyProvider as SprykerProductManagementDependencyProvider;
use Spryker\Zed\PriceProductScheduleGui\Communication\Plugin\ProductManagement\ScheduledPriceProductAbstractEditViewExpanderPlugin;
use Spryker\Zed\PriceProductScheduleGui\Communication\Plugin\ProductManagement\ScheduledPriceProductAbstractFormEditTabsExpanderPlugin;
use Spryker\Zed\PriceProductScheduleGui\Communication\Plugin\ProductManagement\ScheduledPriceProductConcreteEditViewExpanderPlugin;
use Spryker\Zed\PriceProductScheduleGui\Communication\Plugin\ProductManagement\ScheduledPriceProductConcreteFormEditTabsExpanderPlugin;
class ProductManagementDependencyProvider extends SprykerProductManagementDependencyProvider
{
/**
* @return \Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductConcreteFormEditTabsExpanderPluginInterface[]
*/
protected function getProductConcreteFormEditTabsExpanderPlugins(): array
{
return [
new ScheduledPriceProductConcreteFormEditTabsExpanderPlugin(),
];
}
/**
* @return \Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductAbstractFormEditTabsExpanderPluginInterface[]
*/
protected function getProductAbstractFormEditTabsExpanderPlugins(): array
{
return [
new ScheduledPriceProductAbstractFormEditTabsExpanderPlugin(),
];
}
/**
* @return \Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductAbstractEditViewExpanderPluginInterface[]
*/
protected function getProductAbstractEditViewExpanderPlugins(): array
{
return [
new ScheduledPriceProductAbstractEditViewExpanderPlugin(),
];
}
/**
* @return \Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductConcreteEditViewExpanderPluginInterface[]
*/
protected function getProductConcreteEditViewExpanderPlugins(): array
{
return [
new ScheduledPriceProductConcreteEditViewExpanderPlugin(),
];
}
}
Run the following console command to apply scheduled prices:
console price-product-schedule:apply
- Scheduled prices have been correctly applied in the Back Office > Products > Products section.
- You can edit any abstract or concrete product.
- On the Edit Product page, you can find the Scheduled prices tab with your scheduled prices which you can create, update and delete.
- You can import scheduled prices in the Back Office > Prices > Scheduled Prices section.
- You can see the list of previous imports in the Back Office > Prices > Scheduled Prices section.
- You can see information about the import in the Back Office > Prices > Scheduled Prices page > View section.
- You can edit the name of the import and edit and delete scheduled prices inside this import in the Back Office > Prices > Scheduled Prices page > Edit section. You can download all the prices inside the import in the Back Office > Prices > Scheduled Prices page > Download section.
- You can delete the import in the Back Office > Prices > Scheduled Prices page > Delete section.
Run the following console command to clear applied scheduled prices:
console price-product-schedule:clean-up 1
spy_price_product_schedule
table.
5) Set up Cron Job
Enable the apply-price-product-schedule
console command in the cron-job list:
config/Zed/cronjobs/jobs.php
<?php
/**
* Notes:
*
* - jobs[]['name'] must not contains spaces or any other characters, that have to be urlencode()'d
* - jobs[]['role'] default value is 'admin'
*/
$stores = require(APPLICATION_ROOT_DIR . '/config/Shared/stores.php');
$allStores = array_keys($stores);
/* PriceProductSchedule */
$jobs[] = [
'name' => 'apply-price-product-schedule',
'command' => '$PHP_BIN vendor/bin/console price-product-schedule:apply',
'schedule' => '0 6 * * *',
'enable' => true,
'run_on_non_production' => true,
'stores' => $allStores,
];