Install the SSP Service Management feature
Edit on GitHubSelf-Service Portal is currently running under an Early Access Release. Early Access Releases are subject to specific legal terms, they are unsupported and do not provide production-ready SLAs. They can also be deprecated without a General Availability Release. Nevertheless, we welcome feedback from early adopters on these cutting-edge, exploratory features.
This document describes how to install the Self-Service Portal (SSP) SSP Inquiry Management feature.
Prerequisites
FEATURE | VERSION | INSTALLATION GUIDE |
---|---|---|
Spryker Core | 202410.0 | Install the Spryker Core feature |
Click and Collect | 202410.0 | Enable Click and Collect |
Self-Service Portal | 202410.0 | Install Self-Service Portal |
Install the required modules
Install the required packages using Composer:
composer require spryker-feature/ssp-service-management:"^0.1.2" --update-with-dependencies
Make sure the following package is listed in composer.lock
:
MODULE | EXPECTED DIRECTORY |
---|---|
SspServiceManagement | vendor/spryker-feature/ssp-service-management |
Set up configuration
CONFIGURATION | SPECIFICATION | NAMESPACE |
---|---|---|
ClickAndCollectPageExampleConfig::CLICK_AND_COLLECT_SHIPMENT_TYPES | Shipment types supported by the Click&Collect feature. | Pyz\Yves\ClickAndCollectPageExample |
SspServiceManagementConfig::getDefaultMerchantReference() | Reference of a merchant used for creating product offers from the Back Office. | Pyz\Zed\SspServiceManagement |
DataImportConfig::getFullImportTypes() | List of data import entities to be imported during a full import. | Pyz\Zed\DataImport |
src/Pyz/Yves/ClickAndCollectPageExample/ClickAndCollectPageExampleConfig.php
declare(strict_types = 1);
namespace Pyz\Yves\ClickAndCollectPageExample;
use SprykerShop\Yves\ClickAndCollectPageExample\ClickAndCollectPageExampleConfig as SprykerClickAndCollectPageExampleConfig;
class ClickAndCollectPageExampleConfig extends SprykerClickAndCollectPageExampleConfig
{
/**
* @uses \SprykerFeature\Yves\SspServiceManagement\SspServiceManagementConfig::SHIPMENT_TYPE_ON_SITE_SERVICE
*
* @var string
*/
protected const SHIPMENT_TYPE_ON_SITE_SERVICE = 'on-site-service';
/**
* @var list<string>
*/
protected const CLICK_AND_COLLECT_SHIPMENT_TYPES = [
self::SHIPMENT_TYPE_ON_SITE_SERVICE,
self::SHIPMENT_TYPE_DELIVERY,
self::SHIPMENT_TYPE_PICKUP,
];
}
src/Pyz/Zed/SspServiceManagement/SspServiceManagementConfig.php
<?php
declare(strict_types = 1);
namespace Pyz\Zed\SspServiceManagement;
use SprykerFeature\Zed\SspServiceManagement\SspServiceManagementConfig as SprykerSspServiceManagementConfig;
class SspServiceManagementConfig extends SprykerSspServiceManagementConfig
{
/**
* @return string
*/
public function getDefaultMerchantReference(): string
{
return 'MER000001';
}
}
src/Pyz/Zed/DataImport/DataImportConfig.php
<?php
declare(strict_types = 1);
namespace Pyz\Zed\DataImport;
use Pyz\Zed\DataImport\DataImportConfig;
use SprykerFeature\Zed\SspServiceManagement\SspServiceManagementConfig;
class DataImportConfig extends SprykerDataImportConfig
{
/**
* @return array<string>
*/
public function getFullImportTypes(): array
{
return [
SspServiceManagementConfig::IMPORT_TYPE_PRODUCT_ABSTRACT_TYPE,
SspServiceManagementConfig::IMPORT_TYPE_PRODUCT_ABSTRACT_TO_PRODUCT_ABSTRACT_TYPE,
SspServiceManagementConfig::IMPORT_TYPE_PRODUCT_SHIPMENT_TYPE,
];
}
}
Set up database schema
Apply schema updates:
console propel:install
Make sure the following changes occurred in the database:
DATABASE ENTITY | TYPE | EVENT |
---|---|---|
spy_product_shipment_type | table | created |
spy_sales_product_abstract_type | table | created |
spy_sales_order_item_product_abstract_type | table | created |
spy_product_abstract_type | table | created |
spy_product_abstract_to_product_abstract_type | table | created |
spy_product.is_service_date_time_enabled | column | added |
spy_sales_order_item_metadata.scheduled_at | column | added |
spy_sales_order_item.is_service_date_time_enabled | column | added |
Set up transfer objects
Generate transfer classes:
console transfer:generate
Ensure the following transfer objects have been generated:
TRANSFER | TYPE | EVENT | PATH |
---|---|---|---|
ProductConcrete | transfer | updated | src/Generated/Shared/Transfer/ProductConcreteTransfer |
ProductAbstract | transfer | updated | src/Generated/Shared/Transfer/ProductAbstractTransfer |
ShipmentTypeCriteria | transfer | created | src/Generated/Shared/Transfer/ShipmentTypeCriteriaTransfer |
ShipmentType | transfer | created | src/Generated/Shared/Transfer/ShipmentTypeTransfer |
ShipmentTypeCollection | transfer | created | src/Generated/Shared/Transfer/ShipmentTypeCollectionTransfer |
ShipmentTypeConditions | transfer | created | src/Generated/Shared/Transfer/ShipmentTypeConditionsTransfer |
ProductConcreteStorage | transfer | created | src/Generated/Shared/Transfer/ProductConcreteStorageTransfer |
EventEntity | transfer | created | src/Generated/Shared/Transfer/EventEntityTransfer |
ProductView | transfer | created | src/Generated/Shared/Transfer/ProductViewTransfer |
ProductStorageCriteria | transfer | created | src/Generated/Shared/Transfer/ProductStorageCriteriaTransfer |
ShipmentTypeStorageCollection | transfer | created | src/Generated/Shared/Transfer/ShipmentTypeStorageCollectionTransfer |
ShipmentTypeStorageConditions | transfer | created | src/Generated/Shared/Transfer/ShipmentTypeStorageConditionsTransfer |
ShipmentTypeStorageCriteria | transfer | created | src/Generated/Shared/Transfer/ShipmentTypeStorageCriteriaTransfer |
ShipmentTypeStorage | transfer | created | src/Generated/Shared/Transfer/ShipmentTypeStorageTransfer |
Store | transfer | updated | src/Generated/Shared/Transfer/StoreTransfer |
ItemMetadata | transfer | created | src/Generated/Shared/Transfer/ItemMetadataTransfer |
ProductImage | transfer | created | src/Generated/Shared/Transfer/ProductImageTransfer |
ProductOffer | transfer | created | src/Generated/Shared/Transfer/ProductOfferTransfer |
ServicePointCollection | transfer | created | src/Generated/Shared/Transfer/ServicePointCollectionTransfer |
ServiceCollection | transfer | created | src/Generated/Shared/Transfer/ServiceCollectionTransfer |
SspServiceCollection | transfer | created | src/Generated/Shared/Transfer/SspServiceCollectionTransfer |
Item | transfer | updated | src/Generated/Shared/Transfer/ItemTransfer |
Service | transfer | created | src/Generated/Shared/Transfer/ServiceTransfer |
SspService | transfer | created | src/Generated/Shared/Transfer/SspServiceTransfer |
MerchantCriteria | transfer | created | src/Generated/Shared/Transfer/MerchantCriteriaTransfer |
MerchantCollection | transfer | created | src/Generated/Shared/Transfer/MerchantCollectionTransfer |
MerchantStockCriteria | transfer | created | src/Generated/Shared/Transfer/MerchantStockCriteriaTransfer |
StockCollection | transfer | created | src/Generated/Shared/Transfer/StockCollectionTransfer |
ProductOfferStock | transfer | created | src/Generated/Shared/Transfer/ProductOfferStockTransfer |
Locale | transfer | created | src/Generated/Shared/Transfer/LocaleTransfer |
ServiceConditions | transfer | created | src/Generated/Shared/Transfer/ServiceConditionsTransfer |
SspServiceConditions | transfer | created | src/Generated/Shared/Transfer/SspServiceConditionsTransfer |
ServicesSearchConditionGroup | transfer | created | src/Generated/Shared/Transfer/ServicesSearchConditionGroupTransfer |
SspServicesSearchConditionGroup | transfer | created | src/Generated/Shared/Transfer/SspServicesSearchConditionGroupTransfer |
ServiceCriteria | transfer | created | src/Generated/Shared/Transfer/ServiceCriteriaTransfer |
SspServiceCriteria | transfer | created | src/Generated/Shared/Transfer/SspServiceCriteriaTransfer |
OrderItemFilter | transfer | created | src/Generated/Shared/Transfer/OrderItemFilterTransfer |
Quote | transfer | updated | src/Generated/Shared/Transfer/QuoteTransfer |
SalesOrderItemCollectionRequest | transfer | created | src/Generated/Shared/Transfer/SalesOrderItemCollectionRequestTransfer |
ProductOfferValidity | transfer | created | src/Generated/Shared/Transfer/ProductOfferValidityTransfer |
ServicePointConditions | transfer | created | src/Generated/Shared/Transfer/ServicePointConditionsTransfer |
ServicePointCriteria | transfer | created | src/Generated/Shared/Transfer/ServicePointCriteriaTransfer |
ServicePoint | transfer | created | src/Generated/Shared/Transfer/ServicePointTransfer |
Merchant | transfer | created | src/Generated/Shared/Transfer/MerchantTransfer |
Stock | transfer | created | src/Generated/Shared/Transfer/StockTransfer |
Payment | transfer | updated | src/Generated/Shared/Transfer/PaymentTransfer |
PaymentMethodCriteria | transfer | created | src/Generated/Shared/Transfer/PaymentMethodCriteriaTransfer |
PaymentMethodConditions | transfer | created | src/Generated/Shared/Transfer/PaymentMethodConditionsTransfer |
PaymentMethodCollection | transfer | created | src/Generated/Shared/Transfer/PaymentMethodCollectionTransfer |
Order | transfer | updated | src/Generated/Shared/Transfer/OrderTransfer |
Error | transfer | created | src/Generated/Shared/Transfer/ErrorTransfer |
SalesOrderItemCollectionResponse | transfer | created | src/Generated/Shared/Transfer/SalesOrderItemCollectionResponseTransfer |
ItemCollection | transfer | created | src/Generated/Shared/Transfer/ItemCollectionTransfer |
ItemState | transfer | created | src/Generated/Shared/Transfer/ItemStateTransfer |
ServiceType | transfer | created | src/Generated/Shared/Transfer/ServiceTypeTransfer |
PaymentMethod | transfer | created | src/Generated/Shared/Transfer/PaymentMethodTransfer |
LocalizedAttributes | transfer | created | src/Generated/Shared/Transfer/LocalizedAttributesTransfer |
ProductAbstractType | transfer | created | src/Generated/Shared/Transfer/ProductAbstractTypeTransfer |
ProductAbstractTypeCollection | transfer | created | src/Generated/Shared/Transfer/ProductAbstractTypeCollectionTransfer |
ProductAbstractTypeCriteria | transfer | created | src/Generated/Shared/Transfer/ProductAbstractTypeCriteriaTransfer |
ProductAbstractTypeConditions | transfer | created | src/Generated/Shared/Transfer/ProductAbstractTypeConditionsTransfer |
ProductPayload | transfer | created | src/Generated/Shared/Transfer/ProductPayloadTransfer |
ProductPageSearch | transfer | created | src/Generated/Shared/Transfer/ProductPageSearchTransfer |
ProductPageLoad | transfer | created | src/Generated/Shared/Transfer/ProductPageLoadTransfer |
DataImporterConfiguration | transfer | created | src/Generated/Shared/Transfer/DataImporterConfigurationTransfer |
DataImporterDataSourceConfiguration | transfer | created | src/Generated/Shared/Transfer/DataImporterDataSourceConfigurationTransfer |
DataImporterReaderConfiguration | transfer | created | src/Generated/Shared/Transfer/DataImporterReaderConfigurationTransfer |
DataImporterReport | transfer | created | src/Generated/Shared/Transfer/DataImporterReportTransfer |
Sort | transfer | created | src/Generated/Shared/Transfer/SortTransfer |
Pagination | transfer | created | src/Generated/Shared/Transfer/PaginationTransfer |
CartChange | transfer | created | src/Generated/Shared/Transfer/CartChangeTransfer |
Shipment | transfer | updated | src/Generated/Shared/Transfer/ShipmentTransfer |
FacetConfig | transfer | created | src/Generated/Shared/Transfer/FacetConfigTransfer |
ProductOfferStorage | transfer | created | src/Generated/Shared/Transfer/ProductOfferStorageTransfer |
ServiceStorage | transfer | created | src/Generated/Shared/Transfer/ServiceStorageTransfer |
ServicePointStorage | transfer | created | src/Generated/Shared/Transfer/ServicePointStorageTransfer |
Address | transfer | created | src/Generated/Shared/Transfer/AddressTransfer |
ServicePointSearchCollection | transfer | created | src/Generated/Shared/Transfer/ServicePointSearchCollectionTransfer |
ServicePointSearchRequest | transfer | created | src/Generated/Shared/Transfer/ServicePointSearchRequestTransfer |
ServicePointSearch | transfer | created | src/Generated/Shared/Transfer/ServicePointSearchTransfer |
SaveOrder | transfer | created | src/Generated/Shared/Transfer/SaveOrderTransfer |
Customer | transfer | updated | src/Generated/Shared/Transfer/CustomerTransfer |
CompanyBusinessUnitCollection | transfer | created | src/Generated/Shared/Transfer/CompanyBusinessUnitCollectionTransfer |
CompanyBusinessUnitCriteriaFilter | transfer | created | src/Generated/Shared/Transfer/CompanyBusinessUnitCriteriaFilterTransfer |
FilterField | transfer | created | src/Generated/Shared/Transfer/FilterFieldTransfer |
CompanyUser | transfer | updated | src/Generated/Shared/Transfer/CompanyUserTransfer |
CompanyBusinessUnit | transfer | updated | src/Generated/Shared/Transfer/CompanyBusinessUnitTransfer |
Company | transfer | updated | src/Generated/Shared/Transfer/CompanyTransfer |
PageMap | transfer | created | src/Generated/Shared/Transfer/PageMapTransfer |
Configure navigation
Add the Services
and Offers
sections to navigation.xml
:
config/Zed/navigation.xml
<?xml version="1.0"?>
<config>
<sales>
<ssp-service-management>
<label>Services</label>
<title>Services</title>
<bundle>ssp-service-management</bundle>
<controller>list</controller>
<action>index</action>
</ssp-service-management>
</sales>
<product-offer-gui>
<label>Offers</label>
<title>Offers</title>
<bundle>product-offer-gui</bundle>
<controller>list</controller>
<action>index</action>
</product-offer-gui>
</config>
Make sure the following menu items are available in the Back Office navigation:
- Sales > Services
- Marketplace > Offers
Add translations
- Append the glossary:
Glossary
>ssp_service_management.validation.no_order_items_provided,No order items provided.,en_US
ssp_service_management.validation.no_order_items_provided,Keine Auftragspositionen angegeben.,de_DE
ssp_service_management.validation.order_not_found,Order with ID %id% not found.,en_US
ssp_service_management.validation.order_not_found,Bestellung mit ID %id% nicht gefunden.,de_DE
ssp_service_management.validation.no_payment_methods_found,No payment methods found for this order.,en_US
ssp_service_management.validation.no_payment_methods_found,Keine Zahlungsmethoden für diese Bestellung gefunden.,de_DE
ssp_service_management.list.search_placeholder,Search,en_US
ssp_service_management.list.search_placeholder,Search,de_DE
ssp_service_management.list.search_button,Search,en_US
ssp_service_management.list.search_button,Suchen,de_DE
ssp_service_management.list.title,Services,en_US
ssp_service_management.list.title,Dienstleistungen,de_DE
ssp_service_management.list.order_reference,Order Reference,en_US
ssp_service_management.list.order_reference,Bestellreferenz,de_DE
ssp_service_management.list.product_name,Service Name,en_US
ssp_service_management.list.product_name,Servicename,de_DE
ssp_service_management.list.service_sku,SKU,en_US
ssp_service_management.list.service_sku,SKU,de_DE
ssp_service_management.list.scheduled_at,Time and Date,en_US
ssp_service_management.list.scheduled_at,Zeit und Datum,de_DE
ssp_service_management.list.created_at,Created At,en_US
ssp_service_management.list.created_at,Erstellt am,de_DE
ssp_service_management.list.empty,You don't have any services yet.,en_US
ssp_service_management.list.empty,Sie haben noch keine Dienstleistungen.,de_DE
ssp_service_management.list.widget.title,Services,en_US
ssp_service_management.list.widget.title,Dienstleistungen,de_DE
ssp_service_management.list.state,State,en_US
ssp_service_management.list.state,Status,de_DE
ssp_service_management.list.reset_button,Reset,en_US
ssp_service_management.list.reset_button,Zurücksetzen,de_DE
ssp_service_management.list.my_services,My Services,en_US
ssp_service_management.list.my_services,Meine Dienstleistungen,de_DE
ssp_service_management.list.business_unit_services,Business Unit Services,en_US
ssp_service_management.list.business_unit_services,Geschäftsbereich Dienstleistungen,de_DE
ssp_service_management.list.company_services,Company Services,en_US
ssp_service_management.list.company_services,Unternehmensdienstleistungen,de_DE
ssp_service_management.update_scheduled_time,Change scheduled time,en_US
ssp_service_management.update_scheduled_time,Geplante Zeit ändern,de_DE
ssp_service_management.update_scheduled_time.service.sku,SKU,en_US
ssp_service_management.update_scheduled_time.service.sku,SKU,de_DE
ssp_service_management.update_scheduled_time.service.name,Name,en_US
ssp_service_management.update_scheduled_time.service.name,Name,de_DE
ssp_service_management.update_scheduled_time.service.quantity,Quantity,en_US
ssp_service_management.update_scheduled_time.service.quantity,Menge,de_DE
ssp_service_management.update_scheduled_time.service.state,State,en_US
ssp_service_management.update_scheduled_time.service.state,Status,de_DE
ssp_service_management.update_scheduled_time.title,Update Service Scheduled Time,en_US
ssp_service_management.update_scheduled_time.title,Geplante Servicezeit aktualisieren,de_DE
ssp_service_management.update_scheduled_time.success,Order item rescheduled successfully.,en_US
ssp_service_management.update_scheduled_time.success,Bestellposition erfolgreich neu geplant.,de_DE
ssp_service_management.update_scheduled_time.order_item_details,Order Item Details,en_US
ssp_service_management.update_scheduled_time.order_item_details,Bestellpositionsdetails,de_DE
ssp_service_management.update_scheduled_time.button.save,Save,en_US
ssp_service_management.update_scheduled_time.button.save,Speichern,de_DE
ssp_service_management.update_scheduled_time.button.cancel,Cancel,en_US
ssp_service_management.update_scheduled_time.button.cancel,Abbrechen,de_DE
ssp_service_management.update_scheduled_time.error.order_item_not_found,Order item with uuid %uuid% not found.,en_US
ssp_service_management.update_scheduled_time.error.order_item_not_found,Bestellposition mit UUID %uuid% nicht gefunden.,de_DE
ssp_service_management.list.field.business_unit,Business Unit,en_US
ssp_service_management.list.field.business_unit,Geschäftsbereich,de_DE
ssp_service_management.list.button.view,View,en_US
ssp_service_management.list.button.view,Ansehen,de_DE
ssp_service_management.product.no_shipment_types_available,Keine Versandarten für dieses Produkt verfügbar.,de_DE
ssp_service_management.product.no_shipment_types_available,No shipping types available for this product.,en_US
ssp_service_management.product.shipment_types,Versandarten,de_DE
ssp_service_management.product.shipment_types,Shipment Types,en_US
ssp_service_management.product.select_service_point,Wählen Sie einen Servicepunkt,de_DE
ssp_service_management.product.select_service_point,Select a service point,en_US
ssp_service_management.product.service_point_required,Ein Servicepunkt ist für dieses Produkt erforderlich,de_DE
ssp_service_management.product.service_point_required,A service point is required for this product,en_US
ssp_service_management.cart_item.service_point.name,Service point,en_US
ssp_service_management.cart_item.service_point.name,Servicepunkt,de_DE
ssp_service_management.product.service_date_time,Choose date and time,en_US
ssp_service_management.product.service_date_time,Wählen Sie Datum und Uhrzeit,de_DE
product.filter.product-abstract-types,Product Abstract Types,en_US
product.filter.product-abstract-types,Produktabstraktsarten,de_DE
- Append
shipment.csv
:
>on-site-service,On-Site Service,On-Site Service,Tax Exempt
- Append
shipment_type.csv
:
>on-site-service,On-Site Service,1
- Append
service.csv
:
>s3,sp1,on-site-service,1
- Append
service_type.csv
:
>On-Site Service,on-site-service
- Append
shipment_method_shipment_type.csv
:
>on-site-service,on-site-service
- Append
shipment_type_service_type.csv
:
>on-site-service,on-site-service
- Append
shipment_method_store.csv
:
>on-site-service,DE,EUR,,0
- Append
product_abstract_product_abstract_type.csv
:
>abstract_sku,product_abstract_type_key
001,product
666,service
- Append
product_abstract_type.csv
:
>key,name
product,product
service,service
- Append
shipment_type_store.csv
:
>on-site-service,DE
- Append
shipment_price.csv
:
>on-site-service,DE,EUR,,0
- Append
product_shipment_type.csv
:
>concrete_sku,shipment_type_key
001_25904006,delivery
Change the data import recipes
- Enable the
product-shipment-type
andproduct-abstract-product-abstract-type
data imports in the following files:
data/import/local/full_AT.yml
data/import/local/full_DE.yml
data/import/local/full_EU.yml
data/import/local/full_US.yml
- data_entity: product-shipment-type
source: data/import/common/common/product_shipment_type.csv
- data_entity: product-abstract-product-abstract-type
source: data/import/common/common/product_abstract_product_abstract_type.csv
Import data
Import glossary and demo data:
console data:import glossary
console data:import product-abstract-product-abstract-type
console data:import product-abstract-type
console data:import product-shipment-type
console data:import shipment-price
console data:import shipment-type-store
console data:import product-abstract-product-abstract-type
console data:import shipment-method-store
console data:import shipment-type-service-type
console data:import shipment-method-shipment-type
console data:import service-type
console data:import service
console data:import shipment-type
console data:import shipment
- Make sure the glossary keys have been added to
spy_glossary_key
andspy_glossary_translation
tables. - Make sure the following tables contain the imported data:
spy_product_shipment_type
spy_sales_product_abstract_type
spy_sales_order_item_product_abstract_type
spy_product_abstract_type
spy_product_abstract_to_product_abstract_type
Set up behavior
PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
---|---|---|---|
ProductAbstractTypeFacetConfigTransferBuilderPlugin | Configures a facet filter for product abstract types as an enumeration type with multi-value support. | SprykerFeature\Client\SspServiceManagement\Plugin\Catalog | |
ShipmentTypeProductViewExpanderPlugin | Adds shipment type information to product view based on provided shipment type identifiers. | SprykerFeature\Client\SspServiceManagement\Plugin\ProductStorage | |
ProductOfferPreAddToCartPlugin | Adds the product offer reference to an item during the add-to-cart process. | SprykerFeature\Yves\SspServiceManagement\Plugin\CartPage | |
ServicePointPreAddToCartPlugin | Associates a service point with a cart item using a provided product offer reference and service point UUID. | SprykerFeature\Yves\SspServiceManagement\Plugin\CartPage | |
ShipmentTypePreAddToCartPlugin | Associates a shipment type with a cart item during the add-to-cart process. | SprykerFeature\Yves\SspServiceManagement\Plugin\CartPage | |
ServiceDateTimePreAddToCartPlugin | Sets the service date and time in item metadata when the “scheduled at” parameter is provided during the add-to-cart process. | SprykerFeature\Yves\SspServiceManagement\Plugin\CartPage | |
SspServiceManagementPageRouteProviderPlugin | Defines and adds routes for managing service points, searching, listing customer services, updating service times, and canceling services. | SprykerFeature\Yves\SspServiceManagement\Plugin\Router | |
ProductAbstractTypeProductAbstractPostCreatePlugin | Adds product abstract type information after creating a product abstract. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product | |
ProductAbstractTypeProductAbstractAfterUpdatePlugin | Updates product abstract type information after updating a product abstract. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product | |
ShipmentTypeProductConcretePostCreatePlugin | Adds shipment type information after creating a product concrete. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product | |
ShipmentTypeProductConcretePostUpdatePlugin | Updates shipment type information after updating a product concrete. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product | |
ShipmentTypeProductConcreteExpanderPlugin | Expands product concrete data with shipment type information. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product | |
ProductAbstractTypeProductAbstractExpanderPlugin | Expands product abstract data with product abstract type information. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product | |
ProductAbstractTypeProductPageDataExpanderPlugin | Expands product page data with product abstract type information. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductPageSearch | |
ProductAbstractTypeProductPageDataLoaderPlugin | Loads product abstract type data for product page search. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductPageSearch | |
ProductAbstractTypeMapExpanderPlugin | Expands product abstract map data with product abstract type information. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductPageSearch | |
ShipmentTypeProductConcreteStorageCollectionExpanderPlugin | Expands product concrete storage collection with shipment type information. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductStorage | |
SspShipmentTypeQuoteExpanderPlugin | Expands quote data with SSP shipment type information. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Quote | |
ServicePointQuoteExpanderPlugin | Expands quote data with service point information. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Quote | |
ScheduleTimeOrderItemExpanderPreSavePlugin | Expands order item data with scheduled time information before saving. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Sales | |
ProductTypeOrderItemsPostSavePlugin | Processes product type information for order items after saving an order. | SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Sales |
src/Pyz/Client/Catalog/CatalogDependencyProvider.php
declare(strict_types = 1);
namespace Pyz\Client\Catalog;
use Spryker\Client\Catalog\CatalogDependencyProvider as SprykerCatalogDependencyProvider;
use SprykerFeature\Client\SspServiceManagement\Plugin\Catalog\ProductAbstractTypeFacetConfigTransferBuilderPlugin;
class CatalogDependencyProvider extends SprykerCatalogDependencyProvider
{
/**
* @return array<\Spryker\Client\Catalog\Dependency\Plugin\FacetConfigTransferBuilderPluginInterface>
*/
protected function getFacetConfigTransferBuilderPlugins(): array
{
return [
new ProductAbstractTypeFacetConfigTransferBuilderPlugin(),
];
}
/**
* @return array<string, array<\Spryker\Client\Catalog\Dependency\Plugin\FacetConfigTransferBuilderPluginInterface>>
*/
protected function getFacetConfigTransferBuilderPluginVariants(): array
{
return [
SearchHttpConfig::TYPE_SEARCH_HTTP => [
new ProductAbstractTypeFacetConfigTransferBuilderPlugin(),
],
];
}
}
src/Pyz/Client/ProductStorage/ProductStorageDependencyProvider.php
declare(strict_types = 1);
namespace Pyz\Client\ProductStorage;
use SprykerFeature\Client\SspServiceManagement\Plugin\ProductStorage\ShipmentTypeProductViewExpanderPlugin;
class ProductStorageDependencyProvider extends SprykerProductStorageDependencyProvider
{
/**
* @return array<\Spryker\Client\ProductStorage\Dependency\Plugin\ProductViewExpanderPluginInterface>
*/
protected function getProductViewExpanderPlugins(): array
{
/** @var array<\Spryker\Client\ProductStorage\Dependency\Plugin\ProductViewExpanderPluginInterface> $plugins */
$plugins = [
new ShipmentTypeProductViewExpanderPlugin(),
];
return $plugins;
}
src/Pyz/Yves/CartPage/CartPageDependencyProvider.php
declare(strict_types = 1);
namespace Pyz\Yves\CartPage;
use SprykerShop\Yves\CartPage\CartPageDependencyProvider as SprykerCartPageDependencyProvider;
use SprykerFeature\Yves\SspServiceManagement\Plugin\CartPage\ProductOfferPreAddToCartPlugin;
use SprykerFeature\Yves\SspServiceManagement\Plugin\CartPage\ServiceDateTimePreAddToCartPlugin;
use SprykerFeature\Yves\SspServiceManagement\Plugin\CartPage\ServicePointPreAddToCartPlugin;
use SprykerFeature\Yves\SspServiceManagement\Plugin\CartPage\ShipmentTypePreAddToCartPlugin;
class CartPageDependencyProvider extends SprykerCartPageDependencyProvider
{
/**
* @return array<\SprykerShop\Yves\CartPageExtension\Dependency\Plugin\PreAddToCartPluginInterface>
*/
protected function getPreAddToCartPlugins(): array
{
return [
new ProductOfferPreAddToCartPlugin(),
new ServicePointPreAddToCartPlugin(),
new ShipmentTypePreAddToCartPlugin(),
new ServiceDateTimePreAddToCartPlugin(),
];
}
}
src/Pyz/Yves/Router/RouterDependencyProvider.php
<?php
namespace Pyz\Yves\Router;
use Spryker\Yves\Router\RouterDependencyProvider as SprykerRouterDependencyProvider;
use SprykerFeature\Yves\SspServiceManagement\Plugin\Router\SspServiceManagementPageRouteProviderPlugin;
class RouterDependencyProvider extends SprykerRouterDependencyProvider
{
/**
* @return array<\Spryker\Yves\RouterExtension\Dependency\Plugin\RouteProviderPluginInterface>
*/
protected function getRouteProvider(): array
{
return [
new SspServiceManagementPageRouteProviderPlugin(),
];
}
}
src/Pyz/Zed/Cart/CartDependencyProvider.php
<?php
namespace Pyz\Zed\Cart;
use Spryker\Zed\Cart\CartDependencyProvider as SprykerCartDependencyProvider;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Cart\ProductAbstactTypeItemExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Cart\ServicePointItemExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Cart\SspShipmentTypeItemExpanderPlugin;
class CartDependencyProvider extends SprykerCartDependencyProvider
{
/**
* @param \Spryker\Zed\Kernel\Container $container
*
* @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\ItemExpanderPluginInterface>
*/
protected function getExpanderPlugins(Container $container): array
{
return [
new SspShipmentTypeItemExpanderPlugin(),
new ProductAbstactTypeItemExpanderPlugin(),
new ServicePointItemExpanderPlugin(),
];
}
}
src/Pyz/Zed/DataImport/DataImportDependencyProvider.php
<?php
namespace Pyz\Zed\DataImport;
use Spryker\Zed\DataImport\DataImportDependencyProvider as SprykerDataImportDependencyProvider;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\DataImport\ProductAbstractToProductAbstractTypeDataImportPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\DataImport\ProductAbstractTypeDataImportPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\DataImport\ProductShipmentTypeDataImportPlugin;
class DataImportDependencyProvider extends SprykerDataImportDependencyProvider
{
/**
* @return array<\Spryker\Zed\DataImport\Dependency\Plugin\DataImportPluginInterface>
*/
protected function getDataImporterPlugins(): array
{
return [
new ProductShipmentTypeDataImportPlugin(),
new ProductAbstractTypeDataImportPlugin(),
new ProductAbstractToProductAbstractTypeDataImportPlugin(),
];
}
}
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 SprykerFeature\Zed\SspServiceManagement\SspServiceManagementConfig;
/**
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
* @method \Pyz\Zed\Console\ConsoleConfig getConfig()
*/
class ConsoleDependencyProvider extends SprykerConsoleDependencyProvider
{
/**
* @var string
*/
protected const COMMAND_SEPARATOR = ':';
/**
* @param \Spryker\Zed\Kernel\Container $container
*
* @return array<\Symfony\Component\Console\Command\Command>
*/
protected function getConsoleCommands(Container $container): array
{
return [
new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SspServiceManagementConfig::IMPORT_TYPE_PRODUCT_SHIPMENT_TYPE),
new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SspServiceManagementConfig::IMPORT_TYPE_PRODUCT_ABSTRACT_TYPE),
new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SspServiceManagementConfig::IMPORT_TYPE_PRODUCT_ABSTRACT_TO_PRODUCT_ABSTRACT_TYPE),
];
}
}
src/Pyz/Zed/Product/ProductDependencyProvider.php
<?php
namespace Pyz\Zed\Product;
use Spryker\Zed\Product\ProductDependencyProvider as SprykerProductDependencyProvider;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product\ProductAbstractTypeProductAbstractAfterUpdatePlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product\ProductAbstractTypeProductAbstractPostCreatePlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product\ProductAbstractTypesProductAbstractExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product\ShipmentTypeProductConcreteExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product\ShipmentTypeProductConcretePostCreatePlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Product\ShipmentTypeProductConcretePostUpdatePlugin;
class ProductDependencyProvider extends SprykerProductDependencyProvider
{
/**
* The order of execution is important to support Inherited scope and sub-entity functionality
*
* @return array<\Spryker\Zed\ProductExtension\Dependency\Plugin\ProductAbstractPostCreatePluginInterface>
*/
protected function getProductAbstractPostCreatePlugins(): array
{
return [
new ProductAbstractTypeProductAbstractPostCreatePlugin(),
];
}
/**
* @param \Spryker\Zed\Kernel\Container $container
*
* @return array<\Spryker\Zed\Product\Dependency\Plugin\ProductAbstractPluginUpdateInterface>
*/
protected function getProductAbstractAfterUpdatePlugins(Container $container): array // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter
{
return [
new ProductAbstractTypeProductAbstractAfterUpdatePlugin(),
];
}
/**
* @param \Spryker\Zed\Kernel\Container $container
*
* @return array<\Spryker\Zed\ProductExtension\Dependency\Plugin\ProductConcreteCreatePluginInterface>
*/
protected function getProductConcreteAfterCreatePlugins(Container $container): array // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter
{
return [
new ShipmentTypeProductConcretePostCreatePlugin(),
];
}
/**
* @param \Spryker\Zed\Kernel\Container $container
*
* @return array<\Spryker\Zed\Product\Dependency\Plugin\ProductConcretePluginUpdateInterface>
*/
protected function getProductConcreteAfterUpdatePlugins(Container $container): array // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter
{
return [
new ShipmentTypeProductConcretePostUpdatePlugin(),
];
}
/**
* @return array<\Spryker\Zed\ProductExtension\Dependency\Plugin\ProductConcreteExpanderPluginInterface>
*/
protected function getProductConcreteExpanderPlugins(): array
{
return [
new ShipmentTypeProductConcreteExpanderPlugin(),
];
}
}
src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php
<?php
namespace Pyz\Zed\ProductManagement;
use Spryker\Zed\ProductManagement\ProductManagementDependencyProvider as SprykerProductManagementDependencyProvider;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductManagement\ProductAbstractTypeFormExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductManagement\ProductAbstractTypeProductAbstractFormDataProviderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductManagement\ProductAbstractTypeProductAbstractTransferMapperPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductManagement\ServiceDateTimeEnabledProductConcreteFormEditDataProviderExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductManagement\ServiceDateTimeEnabledProductConcreteFormExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductManagement\ServiceDateTimeEnabledProductFormTransferMapperExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductManagement\ShipmentTypeProductConcreteFormEditDataProviderExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductManagement\ShipmentTypeProductConcreteFormExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductManagement\ShipmentTypeProductFormTransferMapperExpanderPlugin;
class ProductManagementDependencyProvider extends SprykerProductManagementDependencyProvider
{
/**
* @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductConcreteFormEditDataProviderExpanderPluginInterface>
*/
protected function getProductConcreteFormEditDataProviderExpanderPlugins(): array
{
return [
new ShipmentTypeProductConcreteFormEditDataProviderExpanderPlugin(),
new ServiceDateTimeEnabledProductConcreteFormEditDataProviderExpanderPlugin(),
];
}
/**
* @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductFormTransferMapperExpanderPluginInterface>
*/
protected function getProductFormTransferMapperExpanderPlugins(): array
{
return [
new ShipmentTypeProductFormTransferMapperExpanderPlugin(),
new ServiceDateTimeEnabledProductFormTransferMapperExpanderPlugin(),
];
}
/**
* @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductAbstractTransferMapperPluginInterface>
*/
protected function getProductAbstractTransferMapperPlugins(): array
{
return [
new ProductAbstractTypeProductAbstractTransferMapperPlugin(),
];
}
/**
* @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductAbstractFormExpanderPluginInterface>
*/
protected function getProductAbstractFormExpanderPlugins(): array
{
return [
new ProductAbstractTypeFormExpanderPlugin(),
];
}
/**
* @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductConcreteFormExpanderPluginInterface>
*/
protected function getProductConcreteFormExpanderPlugins(): array
{
return [
new ShipmentTypeProductConcreteFormExpanderPlugin(),
new ServiceDateTimeEnabledProductConcreteFormExpanderPlugin(),
];
}
/**
* @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductAbstractFormDataProviderExpanderPluginInterface>
*/
protected function getProductAbstractFormDataProviderExpanderPlugins(): array
{
return [
new ProductAbstractTypeProductAbstractFormDataProviderPlugin(),
];
}
}
src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php
<?php
namespace Pyz\Zed\ProductPageSearch;
use Spryker\Zed\ProductPageSearch\ProductPageSearchDependencyProvider as SprykerProductPageSearchDependencyProvider;
use SprykerFeature\Shared\SspServiceManagement\SspServiceManagementConfig;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductPageSearch\ProductAbstractTypeMapExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductPageSearch\ProductAbstractTypeProductPageDataExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductPageSearch\ProductAbstractTypeProductPageDataLoaderPlugin;
class ProductPageSearchDependencyProvider extends SprykerProductPageSearchDependencyProvider
{
/**
* @return array<\Spryker\Zed\ProductPageSearch\Dependency\Plugin\ProductPageDataExpanderInterface>|array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataExpanderPluginInterface>
*/
protected function getDataExpanderPlugins(): array
{
$dataExpanderPlugins = [];
$dataExpanderPlugins[SspServiceManagementConfig::PLUGIN_PRODUCT_ABSTRACT_TYPE_DATA] = new ProductAbstractTypeProductPageDataExpanderPlugin();
return $dataExpanderPlugins;
}
/**
* @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataLoaderPluginInterface>
*/
protected function getDataLoaderPlugins(): array
{
return [
new ProductAbstractTypeProductPageDataLoaderPlugin(),
];
}
/**
* @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductAbstractMapExpanderPluginInterface>
*/
protected function getProductAbstractMapExpanderPlugins(): array
{
return [
new ProductAbstractTypeMapExpanderPlugin(),
];
}
}
src/Pyz/Zed/ProductStorage/ProductStorageDependencyProvider.php
<?php
namespace Pyz\Zed\ProductStorage;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\ProductStorage\ShipmentTypeProductConcreteStorageCollectionExpanderPlugin;
use Spryker\Zed\ProductStorage\ProductStorageDependencyProvider as SprykerProductStorageDependencyProvider;
class ProductStorageDependencyProvider extends SprykerProductStorageDependencyProvider
{
/**
* @return array<\Spryker\Zed\ProductStorageExtension\Dependency\Plugin\ProductConcreteStorageCollectionExpanderPluginInterface>
*/
protected function getProductConcreteStorageCollectionExpanderPlugins(): array
{
return [
new ShipmentTypeProductConcreteStorageCollectionExpanderPlugin(),
];
}
}
src/Pyz/Zed/Quote/QuoteDependencyProvider.php
<?php
namespace Pyz\Zed\Quote;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Quote\ServicePointQuoteExpanderPlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Quote\SspShipmentTypeQuoteExpanderPlugin;
use Spryker\Zed\ShipmentTypeCart\Communication\Plugin\Quote\ShipmentTypeQuoteExpanderPlugin;
class QuoteDependencyProvider extends SprykerQuoteDependencyProvider
{
/**
* @return list<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteExpanderPluginInterface>
*/
protected function getQuoteExpanderPlugins(): array
{
return [
new SspShipmentTypeQuoteExpanderPlugin(),
new ServicePointQuoteExpanderPlugin(),
];
}
}
src/Pyz/Zed/Sales/SalesDependencyProvider.php
<?php
namespace Pyz\Zed\Sales;
use Spryker\Zed\Sales\SalesDependencyProvider as SprykerSalesDependencyProvider;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Sales\ProductTypeOrderItemsPostSavePlugin;
use SprykerFeature\Zed\SspServiceManagement\Communication\Plugin\Sales\ScheduleTimeOrderItemExpanderPreSavePlugin;
class SalesDependencyProvider extends SprykerSalesDependencyProvider
{
/**
* @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemExpanderPreSavePluginInterface>
*/
protected function getOrderItemExpanderPreSavePlugins(): array
{
return [
new ScheduleTimeOrderItemExpanderPreSavePlugin(),
];
}
/**
* @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemsPostSavePluginInterface>
*/
protected function getOrderItemsPostSavePlugins(): array
{
return [
new ProductTypeOrderItemsPostSavePlugin(),
];
}
}
- In the Back Office, go to Catalog > Products.
- Create an abstract product with a service product type.
- For the abstract product you’ve created, create a concrete product with the following settings:
- Enable Service Date and Time
- Add Delivery and On-Site Service shipment types
- Go to Merchandising > Offers.
- Generate one or more product offers for the service product you’ve created. Make sure the following applies on the offer create page:
- The offer creation form is automatically prepopulated with information from the product
- You can assign one or more service points to the product offer
- The on-site service shipment type is available
Set up widgets
Set up widgets as follows:
- Register the following plugins to enable widgets:
PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
---|---|---|---|
SspServiceMenuItemWidget | Adds a menu item for accessing SSP services in the navigation. | SprykerFeature\Yves\SspServiceManagement\Widget | |
SspServiceChangeScheduledTimeLinkWidget | Provides a link to change the scheduled time for a specific service. | SprykerFeature\Yves\SspServiceManagement\Widget | |
ShipmentTypeServicePointSelectorWidget | Displays a selector for choosing a service point based on the shipment type. | SprykerFeature\Yves\SspServiceManagement\Widget | |
ServicePointNameForItemWidget | Displays the name of the service point associated with a specific cart item. | SprykerFeature\Yves\SspServiceManagement\Widget | |
ListItemsByShipmentTypeWidget | Lists items in the cart grouped by their shipment type. | SprykerFeature\Yves\SspServiceManagement\Widget |
src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php
<?php
namespace Pyz\Yves\ShopApplication;
use SprykerShop\Yves\ShopApplication\ShopApplicationDependencyProvider as SprykerShopApplicationDependencyProvider;
use SprykerFeature\Yves\SspServiceManagement\Widget\ListItemsByShipmentTypeWidget;
use SprykerFeature\Yves\SspServiceManagement\Widget\ServicePointNameForItemWidget;
use SprykerFeature\Yves\SspServiceManagement\Widget\ShipmentTypeServicePointSelectorWidget;
use SprykerFeature\Yves\SspServiceManagement\Widget\SspServiceChangeScheduledTimeLinkWidget;
use SprykerFeature\Yves\SspServiceManagement\Widget\SspServiceMenuItemWidget;
class ShopApplicationDependencyProvider extends SprykerShopApplicationDependencyProvider
{
protected function getGlobalWidgets(): array
{
return [
SspServiceMenuItemWidget::class,
SspServiceChangeScheduledTimeLinkWidget::class,
ShipmentTypeServicePointSelectorWidget::class,
ServicePointNameForItemWidget::class,
ListItemsByShipmentTypeWidget::class,
];
}
}
- Enable Javascript and CSS changes:
console frontend:yves:build
console frontend:zed:install-dependencies
console frontend:zed:build
-
On the Storefront, use the search to find the service product you’ve created. Make sure the product is available in the catalog.
-
Click the product to open its details page. Make sure the following applies on the product details page:
- A service point selector is displayed
- A date and time selector is displayed
- Delivery and service-on-site shipment types are available
- Select a service point.
- Select a service date and time.
- Add the product to cart.
- Add several other service and regular products to cart.
- Go to the cart page and make sure the following applies:
- The cart items display the selected service points
- Items are grouped by shipment type
- Selected service points are displayed
-
Place the order. Make sure the order is places successfully and the order summary includes service-specific details.
-
Go to Customer Account > Services. Make sure the following applies:
- The service associated with the order you’ve placed is displayed in the list with all the relevant service details
- You can change service date and time
- Next to the service, click View. Make sure the following applies on the service details page:
- Service point and shipment type are displayed
- Buttons to reschedule and cancel the service are displayed
- When changing the scheduled time, the updated information is saved and immediately reflected in the order view page.
- In the Back Office, go to Services. Make sure the following applies:
- All service orders from multiple customers are listed correctly
- Each service entry includes detailed information such as the product, customer, company, and scheduled date and time
- Open an order’s details page by clicking on its order reference. On the order details page, make sure you can update the scheduled service date and time.
- Make changes to a service order. Make sure the changes are reflected in the customer profile on the Storefront.
- In the Back Office, add a new service product. Make sure that this product is displayed on the Storefront.
- On the Storefront, go to the catalog page. Make sure you can filter products by product type: physical product or service.
Thank you!
For submitting the form