PHPackages                             spryker-demo/service-product-feature - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. spryker-demo/service-product-feature

ActiveMetapackage

spryker-demo/service-product-feature
====================================

Service product \[feature\]

1.0.0(7mo ago)00proprietaryPHP &gt;=8.2CI passing

Since Sep 25Pushed 7mo agoCompare

[ Source](https://github.com/spryker-demo/service-product-feature)[ Packagist](https://packagist.org/packages/spryker-demo/service-product-feature)[ RSS](/packages/spryker-demo-service-product-feature/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

Spryker Demo Service Product Feature
====================================

[](#spryker-demo-service-product-feature)

[![Minimum PHP Version](https://camo.githubusercontent.com/ec21f169d70b69344c67d6f18fa1a24d20476d2f0cd680e8c4a1534c22f34e5f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344253230382e322d3838393242462e737667)](https://php.net/)

Installation
------------

[](#installation)

```
composer require spryker-demo/service-product-feature

```

### Add `SprykerDemo` namespace to configuration

[](#add-sprykerdemo-namespace-to-configuration)

```
$config[KernelConstants::CORE_NAMESPACES] = [
    ...
    'SprykerDemo',
];

```

### Wire Shipment method filter plugin

[](#wire-shipment-method-filter-plugin)

```
# src/Pyz/Zed/Shipment/ShipmentDependencyProvider.php

use SprykerDemo\Zed\ServiceProduct\Communication\Plugin\Shipment\ServiceProductShipmentGroupMethodFilterPlugin;

// ...

    /**
     * @param \Spryker\Zed\Kernel\Container $container
     *
     * @return array
     */
    protected function getMethodFilterPlugins(Container $container): array
    {
        return [
            new ServiceProductShipmentGroupMethodFilterPlugin(),
        ];
    }

```

### Wire the Merchant OMS condition plugin

[](#wire-the-merchant-oms-condition-plugin)

```
# src/Pyz/Zed/MerchantOms/MerchantOmsDependencyProvider.php

use SprykerDemo\Zed\ServiceProduct\Communication\Plugin\StateMachine\Condition\IsServiceProductConditionPlugin;

// ...

    /**
     * @return array
     */
    protected function getStateMachineConditionPlugins(): array
    {
        return [
            'MarketplaceServiceProduct' => new IsServiceProductConditionPlugin(),
        ];
    }

```

### Wire the OMS condition plugin

[](#wire-the-oms-condition-plugin)

```
# src/Pyz/Zed/Oms/OmsDependencyProvider.php

use SprykerDemo\Zed\ServiceProduct\Communication\Plugin\Oms\Condition\IsServiceProductConditionPlugin;

// ...

    /**
     * @param \Spryker\Zed\Kernel\Container $container
     *
     * @return \Spryker\Zed\Kernel\Container
     */
    protected function extendConditionPlugins(Container $container): Container
    {
        $container->extend(self::CONDITION_PLUGINS, function (ConditionCollectionInterface $conditionCollection) {
            // ...
            $conditionCollection->add(new IsServiceProductConditionPlugin(), 'Service/IsServiceProduct');

            return $conditionCollection;
        });

        return $container;
    }

```

### Wire following expander plugins:

[](#wire-following-expander-plugins)

```
#src/Pyz/Zed/Cart/CartDependencyProvider.php

use SprykerDemo\Zed\ServiceProduct\Communication\Plugin\Cart\ServiceProductItemExpanderPlugin;

    /**
     * @return array
     */
    protected function getExpanderPlugins(): array
    {
        return [
            ...
            new ServiceProductItemExpanderPlugin(),
        ];
    }

```

```
#src/Pyz/Zed/Product/ProductDependencyProvider.php

use SprykerDemo\Zed\ServiceProduct\Communication\Plugin\Product\ServiceProductProductConcreteExpanderPlugin;

    /**
     * @return array
     */
    protected function getProductConcreteExpanderPlugins(): array
    {
        return [
            ...
            new ServiceProductProductConcreteExpanderPlugin(),
        ];
    }

```

```
#src/Pyz/Zed/ProductStorage/ProductStorageDependencyProvider.php

use SprykerDemo\Zed\ServiceProduct\Communication\Plugin\ProductStorage\ServiceProductProductConcreteStorageExpanderPlugin;

    /**
     * @return array
     */
    protected function getProductConcreteStorageCollectionExpanderPlugins(): array
    {
        return [
            ...
            new ServiceProductProductConcreteStorageExpanderPlugin(),
        ];
    }

```

### Create new oms subprocess xml file

[](#create-new-oms-subprocess-xml-file)

```

```

### Create new state machine subprocess xml file

[](#create-new-state-machine-subprocess-xml-file)

```

                started service product process
                service product purchased
                check service product purchase

                service product purchased
                ready for delivering service
                activate service

                ready for delivering service
                service started
                start service

                service started
                service delivered
                deliver service

                service delivered
                delivered
                complete service

```

### Include service subprocess into OMS.

[](#include-service-subprocess-into-oms)

```

                ready for shipment
                ready for shipment by merchant
                check is service

                ready for shipment
                waiting for delivery by merchant
                check is service

                waiting for delivery by merchant
                delivered
                deliver

            Service

```

### Integrate Merchant State machine with new subprocess.

[](#integrate-merchant-state-machine-with-new-subprocess)

```

                created
                new
                initiate

                new
                started service product process
                ship

                new
                shipped
                ship

                new
                closed
                close

                new
                canceled by merchant
                cancel by merchant

                canceled by merchant
                closed
                close

                shipped
                delivered
                deliver

                delivered
                closed
                close

            MerchantReturn
            MerchantRefund
            MerchantServiceProduct01

```

### Add translations

[](#add-translations)

```
# data/import/common/common/glossary.csv

oms.state.waiting-for-delivery-by-merchant, "Waiting for delivery by merchant",en_US
oms.state.waiting-for-delivery-by-merchant, "Warten auf die Lieferung durch den Händler",de_DE
oms.state.waiting-for-delivery-by-merchant, "A la espera de la entrega por parte del comerciante",es_ES
oms.state.waiting-for-delivery-by-merchant, "En attente de livraison par le commerçant",fr_FR

```

### Install demo data

[](#install-demo-data)

```
composer require spryker-demo/service-product-data-import

```

Demo data for the following entities is provided by the previous composer package:

#### product-attribute-key

[](#product-attribute-key)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/product_attribute_key.csv`
- Command: `console data:import:product-attribute-key`

#### product-management-attribute

[](#product-management-attribute)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/product_management_attribute.csv`
- Command: `console data:import:product-management-attribute`

#### product-abstract

[](#product-abstract)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/product_abstract.csv`
- Command: `console data:import:product-abstract`

#### product-concrete

[](#product-concrete)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/product_concrete.csv`
- Command: `console data:import:product-concrete`

#### product-image

[](#product-image)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/product_image.csv`
- Command: `console data:import:product-image`

#### product-price

[](#product-price)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/DE/product_price.csv`
- Command: `console data:import:product-price`

#### product-abstract-store

[](#product-abstract-store)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/DE/product_abstract_store.csv`
- Command: `console data:import:product-abstract-store`

#### product-stock

[](#product-stock)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/product_stock.csv`
- Command: `console data:import:product-stock`

#### merchant-product

[](#merchant-product)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/merchant_product.csv`
- Command: `console data:import:merchant-product`

#### product-approval-status

[](#product-approval-status)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/product_abstract_approval_status.csv`
- Command: `console data:import:product-approval-status`

#### product-price-merchant-relationship

[](#product-price-merchant-relationship)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/DE/price_product_merchant_relationship.csv`
- Command: `console data:import:product-price-merchant-relationship`

#### shipment

[](#shipment)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/shipment.csv`
- Command: `console data:import:shipment`

#### shipment-method-store

[](#shipment-method-store)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/DE/shipment_method_store.csv`
- Command: `shipment-method-store`

#### shipment-price

[](#shipment-price)

- File: `vendor/spryker/spryker-demo/Bundles/ServiceProductDataImport/data/import/DE/shipment_price.csv`
- Command: `shipment-price`

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance63

Regular maintenance activity

Popularity0

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 88.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

230d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c6756c39a921146991fee6b4090f4130af143ee3aa7a776b688365c5f3d5b511?d=identicon)[spryker\_solution\_consulting\_demos](/maintainers/spryker_solution_consulting_demos)

---

Top Contributors

[![devvent](https://avatars.githubusercontent.com/u/4672959?v=4)](https://github.com/devvent "devvent (8 commits)")[![asaulenko](https://avatars.githubusercontent.com/u/20285714?v=4)](https://github.com/asaulenko "asaulenko (1 commits)")

### Embed Badge

![Health badge](/badges/spryker-demo-service-product-feature/health.svg)

```
[![Health](https://phpackages.com/badges/spryker-demo-service-product-feature/health.svg)](https://phpackages.com/packages/spryker-demo-service-product-feature)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
